2012-08-30 3 views
0

나는 자바에서 compareTo 방법에 문제는, 이것은 코드가 있습니다compareTo 메소드 이상한

for(int i = 0; i < btFolder.size(); i++) { 

     String g = btFolder.get(i).toString(); 

     String[] subf = g.split(splitchar); 

     String s = subf[subf.length-1].toUpperCase(); 

     if(s.compareTo(bt.toUpperCase()) == 0) { 
      return g; 
     } 
    } 
    return null; //not found! 

이이 if-statement에 뛰어하지 않습니다, 그것은이 sbt 변수가 동일해야하기 때문에 , 나는 숙제를하고 그것을 디버깅했기 때문에 알았다.

 String g = btFolder.get(i).toString(); 

     String[] subf = g.split(splitchar); 

     String s = subf[subf.length-1].toUpperCase(); 

     String btUp = bt.toUpperCase(); 

     int theSame = s.compareTo(btUp); 

     if(theSame == 0) { 
      putSharedPrefs("pathToBt", g); 
     } 
     return null; 

변수 theSame가 0, sbtUp이 동일하다는 것을 의미 : 그냥 나는이 코드 조각을 썼다 무엇 compareTo 방법 리턴 파악합니다. 그리고 여전히 the if-statement은 실행되지 않습니다!

왜 이런 일이 발생합니까? 이것에 대한 좋은 해결책이 있습니까?

나는이 너무 시도했습니다

편집 : 나는이가 thread 내부에서 수행되는 것을 언급한다

boolean equals = s.equalsIgnoreCase(bt); 

     if(equals) { 
      return g; 
     } 

boolean는, true,하지만 결코 if-statement을 실행하고있을하지만 문제를 일으키지 않아야합니까?

+0

왜 'compareTo'대신 'String.equalsIgnoreCase'를 사용하지 않으시겠습니까? – maba

+0

사용하기에 조금 비싸기 때문입니다. 나는 전체 문자열을 동일한 순서로 그리고 문자열의 일부가 아니라 정확히 동일하게하고 싶다. 이것은 실제로 작동해야하는'compareTo'를 왜 사용하는지에 대한 질문이 아닙니다. –

+2

* "theSame 변수는 0이며 s 및 btUp이 동일 함을 의미하지만 여전히 if 문은 실행되지 않습니다!"* => 그럴 수 없습니다. 자신의 문제를 보여주는 [단문, 자기 포함, 올바른 예 (SSCCE)] (http://www.sscce.org/)를 게시하면 더 나은 답변을 얻을 수 있습니다. – assylias

답변

2

이 조각에서

if(theSame == 0) { 
     putSharedPrefs("pathToBt", g); 
} 

디버깅 할 수있는 경우 및 theSame0인지 확인한 다음 sysout을 입력하고 인쇄 여부를 확인하십시오.

실행되지 않으면 확실합니다. 디버깅중인 코드와 실행중인 코드가 같지 않은 경우가 있습니다. 빌드가 배포되지 않고 이전 실행 파일로 새 소스를 디버깅 할 때 이따금 일식이 발생합니다.

0

가 왜 그냥 할 : 나는 당신은 compareTo를 사용할 수 있습니다 생각

if (s.equalsIgnoreCase(bt) { 
    return g; 
} 

그러나 너무 다른 일을 ...

+0

제 편집을 참조하십시오. –

관련 문제