2016-09-29 3 views
0

Я должен рекурсивно подсчитать, сколько «XX» находится в строке, если есть маленький x перед двойным X, его не следует считать. Я не уверен, что я делаю неправильно; Я, кажется, застрять на первом же возвращении, я получаю 0.Рекурсивно считать строку внутри строки java

UPDATE: У меня все работает похоже, но XXXXXX продолжает получать считается как 1 вместо 2.

public static int count(String s) { 

     if ((s.length() < 2)) 
      return 0; 
     int counter = 0; 
     if (s.charAt(0)== 'x') 
     { 
     if (s.substring(0, 2).equals("xX")) 
      return count(s.substring(3)); 

     } 
     if (s.substring(0, 2).equals("XX")) { 
      return 1 + count(s.substring(3)); 
     } 
     else 
      return counter + count(s.substring(1)); 
     } 



public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner kb = new Scanner(System.in); 
    System.out.println("Enter a String: "); 
    String s = kb.nextLine(); 
    System.out.println(count(s)); 
} 

}

+0

домашнее задание? http://stackoverflow.com/q/39758831/2710704 – Tokazio

+0

Что должно быть возвратом, если строка «XXX» (1 или 2)? Другими словами, нужно ли считать совпадение «XX»? Если это так, уменьшите индекс позиции (аргумент подстроки) при вызове рекурсивно 'count'. –

+0

Не ходите по два, если не увидите 'XX'. Проверьте, является ли символ 'x', если это так, отмените его для следующего вызова. Если это 'X', проверьте следующий, чтобы увидеть, является ли это' XX'. Если это так, добавьте '1'; в противном случае вернуть значение из следующего вызова. – dasblinkenlight

ответ

1

Поскольку конечный индекс в вызове substring равен эксклюзивным, вызов substring(0, 1) никогда не вернет двухсимвольную строку; будет возвращена только строка, состоящая из первого символа.

Чтобы взять два символа, сначала проверьте, что длина равна двум или более, а затем вызовите substring(0, 2).

Смежные вопросы