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

По-прежнему существует проблема неправильного использования подстроки для извлечения символа из строки. – 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, чтобы получить символ в этом положении, и сравните его с == символом буква 'x', а не с String"x".

2

Три причины:

  1. подстрока() возвращает всю строку (так начиная с «я» до конца строки, а не только одна буква).
  2. Сравнить с .equals(), а не ==
  3. "я" должен заканчиваться str.length() - 1
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

Не использовать подстроку для индексирования символов.

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; 
} 
Смежные вопросы