마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

ArrayList에 넣은값이 다르게 나옵니다ㅠㅠ [closed]

0 추천

 

b라는 변수 생성후

add함수를 통해 b변수를 ArrayList에 넣었는데

Log값으로 두값을 읽어보니

분명 b변수에는 제대로된 값이 들어갔는데

b값을 넣은 ArrayList형에는 종종 다른값이 출력되더라고요

b값을 넣었는데 왜 b변수와는 다른 값이 나오는지

전혀 이해가 안되어서 그런데  뭘 잘못한건지 가르침 부탁드립니다ㅠㅠ

답변 주시면 정말 감사하겠습니다

 

코드 첨부합니다

 

 static ArrayList<Integer>final_truebearing_list=new ArrayList();
 @Override
public void onCreate(Bundle savedInstanceState) {     
    super.onCreate(savedInstanceState);            

   for(int i=0;i<lat_list.size();i++){         
     Integer b =new Integer(Integer.parseInt(String.valueOf(Math.round(getTrue_bearing()))));       //getTrue_bearing 은 double 형을 반환하는 함수입니다

     final_truebearing_list.add(new Integer(b));



      if(final_truebearing_list.get(i).equals(b)){ 
   Log.i("save","right-distance");       

   } else{          
    	     Log.i("save","truebearing"+b);     
           Log.i("save","truebearing"+final_truebearing_list.get(i));  
      }
}



 public double getTrue_bearing() {
    
  if (myLocation != null) {
     latPoint = myLocation.getLatitude();
     lngPoint = myLocation.getLongitude();
     
     //거리 구하기
     float[] dist=new float[3];
        Location.distanceBetween(lat, lon, latPoint, lngPoint, dist);
        distance = dist[0]/1000;
        distance = Float.parseFloat(String.format("%.3f", distance));
        
        //각도 구하기
        Cur_Lat_radian = latPoint * (3.141592 / 180); 
        Cur_Lon_radian = lngPoint * (3.141592 / 180);
        Dest_Lat_radian = lat * (3.141592 / 180);
        Dest_Lon_radian = lon * (3.141592 / 180);
        
        radian_distance = Math.acos(Math.sin(Cur_Lat_radian) * Math.sin(Dest_Lat_radian) + Math.cos(Cur_Lat_radian)* Math.cos(Dest_Lat_radian)* Math.cos(Cur_Lon_radian - Dest_Lon_radian));
        radian_bearing = Math.acos((Math.sin(Dest_Lat_radian) - Math.sin(Cur_Lat_radian)* Math.cos(radian_distance))/ (Math.cos(Cur_Lat_radian) * Math.sin(radian_distance)));
        //목적지 이동방향을 구한다.(현재 좌표에서 다음 좌표로 이동하기 위해서는 방향을 설정해야한다. 라디언값이다.
        //acos의 인수로 주어지는 x는 360분법의 각도가 아닌 radian(호도)값이다.
        if (Math.sin(Dest_Lon_radian - Cur_Lon_radian) < 0) {
          true_bearing = radian_bearing * (180 / 3.141592);
          true_bearing = (360 - true_bearing); 
        } else {
          true_bearing = (radian_bearing * (180 / 3.141592));
        }      
      
    }    return true_bearing;
 
      }

 

질문을 종료한 이유: 값은 맞게 나오고있었으나 i값을 이용한 비교로 잘못된값과 비교하고 있었네요^^ 해결하였습니다
익명사용자 님이 2013년 10월 4일 질문
2013년 10월 4일 closed
...