2013-05-03 5 views
1

목표는 주어진 문자열에서 "xx"의 수를 세는 것입니다. 겹침이 허용되므로 "xxx"에는 2 "xx"가 포함됩니다. 그 작동하지 않는 이유이 기본 Java 프로그램이 작동하지 않는 이유는 무엇입니까?

http://codingbat.com/prob/p194667 내가 알아낼 수 없습니다를 참조하십시오

int countXX(String str) { 
     int f = 0; 
     for (int i = 0; i < str.length(); i++){ 
      if (!str.substring(i+1).isEmpty()){ 
       if (str.substring(i) == "x" && str.substring (i+1) == "x") { 
        f++; 
       } 
      } 
     } 
     return f; 
    } 
+0

이것은 시동기의 일반적인 실수입니다. 조심해. – Lion

+0

문자열 값을'=='와 비교하는 것은 잘못된 일이지만,이 질문은 문자를 추출하기위한'substring '의 오용에 관한 것입니다. – rgettman

+1

나는이 질문을 다시하기로 표결했다. 일반적인 "=="대 "같음"문자열 비교 문제의 복제본이 아닙니다. – rgettman

답변

4

문자열을 비교하는 == 사용하지 마십시오; equals()를 사용하십시오.

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length(); i++) { 
     if (!str.substring(i+1).isEmpty()) { 
      if (str.substring(i).equals("x") && str.substring(i+1).equals("x")) { 
       f++; 
      } 
     } 
    } 
    return f; 
} 

나는 i 문자열 마이너스 1의 길이가 같을 때이 코드가 여전히 문제가 생각 당신은 (i+1)에있는 문자에 액세스하려고합니다.

+0

.equals()가 여전히 작동하지 않습니다. – user1399888

+0

문자열에서 문자를 추출하기 위해'substring '을 남용하는 문제가 여전히 있습니다. – rgettman

+0

그리고 i

1

== 대신에 문자열의 '같음'방법을 사용합니다 :

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length(); i++){ 
    if (!str.substring(i+1).isEmpty()){ 
    if (str.substring(i).equals("x") && str.substring (i+1).equals("x")) { 
    f++;}}} 
    return f; 
    } 
+1

이것은 부분적으로 만 문제를 해결합니다. –

4

하나 개의 인자를 가진 substring 방법은 그것은을 통해 그 위치에서 모든 것을 얻을, 그 위치에 그냥 문자를하지 않습니다 문자열의 끝. 해당 위치에있는 문자를 얻으려면 charAt을 사용하고 String"x"이 아닌 인 문자로 ==과 비교하십시오.

2

세 가지 이유 :

  1. 문자열()가 전체 문자열을 반환합니다 (그래서 "I"문자열의 끝에서 시작, 그리고 단 하나의 편지).
  2. 는 .equals()와하지와 비교 ==
  3. "내가"str.length에 종료한다() -
0
int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length() - 1; i++){ 
     if (str.substring(i, i + 2).equals("xx")) { 
      f++; 
     } 
    } 
    return f; 
} 
4

1 색인 문자에 대한 문자열을 사용하지 마십시오.

int countXX(String str) { 
    int f = 0; 
    for (int i = 0; i < str.length()-1; i++) { 
     if(str.charAt(i) == 'x' && str.charAt(i+1) == 'x') { 
     f++; 
     } 
    } 
    return f; 
} 
관련 문제