2013-03-14 1 views
3

나는 모든 것을 시도해 보았는데 왜이 문제가 발생하는지 알 수 없습니다. 다음은 현재 사용중인 코드입니다.For 루프 내의 IF 문이 조건을 충족시키지 못하는 이유는 무엇입니까?

 for(int i=0; i< objarray.size();i++) 
     { 
      //Toast shows values 
      Toast.makeText(getApplicationContext(), goingToId+""+objarray.get(i).getid(),Toast.LENGTH_SHORT).show(); 

      if (goingToId == objarray.get(i).getid()) 
      { 
       //This Toast NEVER shows 
       Toast.makeText(getApplicationContext(), "Inside the if statement",Toast.LENGTH_SHORT).show(); 

       glat = objarray.get(i).getlat(); 
       glon = objarray.get(i).getlon(); 
       loc = new Location("dummyprovider"); 
       loc.setLatitude(glat); 
       loc.setLongitude(glon); 
      } 
     } 

비교할 값은 모두 문자열입니다. for 루프에서 두 개의 값이 토스트에 출력되고 두 값이 같은 값일 때 명확하게 볼 수 있지만 for 루프는 항상 IF 문을 입력하지 않아도 끝나거나 IF 문은 조건을 충족시키지 못합니다. 그러나 이유를 모르겠습니다.

저는 항상 C#에서 이런 종류의 일을합니다. 그리고 항상 작동합니다. 왜 안드로이드에서 작동하지 않는지 알 수 있습니까? 내 게시물에 계속할 정보가별로 없다는 것을 이해하지만 for 루프를 반복하면서 값이 결국 일치한다고 말할 때 나를 믿을 수 있습니다. 내가 한마디도 모르는 한 어떤 충고도 받아 들여질 것이다. 조건

+1

비교할 문자열이 맞습니까? – njzk2

+0

goingToId는 String ..입니까? – Pragnani

+3

그 다음 반복 중 하나가 그것을 숨기고 있기 때문에 토스트가 보이지 않을 수도 있습니다. –

답변

9

귀하의 경우 문장의 끝에 세미콜론을 제거하는 경우의 끝에서

+0

오 세상에. 나는 행복으로 거의 우는 중입니다. 이 모든 시간과 이것처럼 간단했다! :/정말 고마워, 나는 문자 그대로 컴퓨터를 때려 눕혔다. 고맙습니다! – deucalion0

+3

그냥 "=="를'String'으로 추가합니다. Java에서 비교는 객체에 대한 참조를 비교하는 반면 var.equals ("string")는 값을 비교합니다 – codeMagic

+1

@ deucalion0 형제를 도와 드리겠습니다. – Pragnani

4
if (goingToId == objarray.get(i).getid()); //<<<< 

제거 반도체 :

if (goingToId.equals(objarray.get(i).getid())) 
+0

필자는 그것을 제거했다. 대신에 while 루프를 시도 할 때부터 거기에 있었지만, 세미 콜론이 있기 전에도 여전히 작동하지는 않았다.하지만 잘 알아 차렸다. :) – deucalion0

+1

@ deucalion0 : 여전히 작동하지 않습니다. u가 문자열을 비교하고 'equals' 또는'equalsIgnoreCase'를 사용하는 경우'=='를 사용하여 정수를 비교하는지 확인하십시오. –

2

세미콜론을 제거합니다.

if (goingToId == objarray.get(i).getid()); 

당신이 if 문장의 끝에 세미콜론을 쓰기 다음 if이 Unrechable 코드가 내부되지 후 내부 이동 제어 할 수 있습니다.

equals==의 차이점을 알아보십시오.

==와 equals() 메소드의 차이점.

==는 참조를 비교하는 데 사용됩니다. 메소드는 문자열 변수의 내용을 검사합니다.

예.

먼저 예를

String s1 = "FirstString"; 
String s2 = "FirstString"; 

if(s1 == s2) { 
    //This condition matched true because java don't make separate object for these two string. Both strings point to same reference. 
} 

두 번째 예

String s1= "FirstString"; 
String s2 = new String("FirstString"); 

if(s1.equals(s2)) { 
//This condition true because same content. 
} 

if(s1 == s2) { 
//This condition will be false because in this java allocate separate reference for both of them 
} 

결론 : 자바 문자열이 존재하는지 여부를 확인. new를 사용하여 두 번째 문자열의 객체를 만들고 다른 내용을 가진다면 그 객체를 만들고 다른 참조를 지정합니다. 우리가 new를 사용하여 객체를 만들지 않고 동일한 내용을 가지고 있다면 첫 번째 문자열과 동일한 참조를 포함합니다. .

관련 문제