2013-10-01 5 views
1
public static void main(String[] args) 
    { 
     String s = "Hello There"; 
     String p = "eo"; 
     int reps = 0; 

     for (int i=0; i<s.length()-p.length(); i++) //checks all characters in the length of s.length minus the length it's searching for 
     { 

      for (int j=0; j<p.length(); j++) 
      { 
       if (s.charAt(i+j) == p.charAt(j)) 
        reps++; 
      } 


     } 

     System.out.print(reps); 

    } 

Это печатание 3 на количество раз е и o, если оно должно быть напечатано 4. Я понял, что это потому, что он заканчивает поиск после проверки «re», что означает, что он проверял «r», для «e» и «e» для «o». Обычно это работает, но поиск заканчивается здесь, и я получаю ошибки вне диапазона, если я попытаюсь его исправить.Как написать эту программу, чтобы включить последнюю букву строки?

ответ

0

Вы не зацикливаете всю первую строку.

for (int i=0; i<s.length()-p.length(); i++) 

должен быть

for (int i=0; i<s.length(); i++) 

..

String s = "Hello There"; //length is 11 
String p = "eo"; // length is 2 

Если петля все символы первой строки ее хорошо, но вы зацикливание s.length-p.length, там вы читаете первые 11-2 символов (и один из находок является последним, в положении длина-1)

if (s.charAt(i+j) == p.charAt(j)) 

Это должно быть

if (s.charAt(i) == p.charAt(j)) 

Вы хотите сравнить каждый символ р в с

Если вы сравниваете «H» с «ео», вы хотите сравнить «H» с «е» а затем с помощью «o», если вы используете i + j, он переместит указатель «H» на «e» и так далее.

+0

Это представляет ошибку вне диапазона. Nevermind, ваше исправление исправлено. Я не знаю, почему у меня даже был этот j в s.charAt. Я глуп, спасибо. – user2770254

0

Старт путем изменения

for (int i=0; i<s.length()-p.length(); i++) 

в

for (int i = 0; i < s.length(); i++) 

В принципе, вы условие говорит то время как i < 10 - 2, который не то, что вы хотите сделать. Вместо этого, вы хотите, чтобы проверить каждый символ в s

Далее, изменение ...

if (s.charAt(i+j) == p.charAt(j)) 

в

if (s.charAt(i) == p.charAt(j)) { 

В противном случае вы не будете проверять правильный характер и может закончиться исключение из массива за пределами ...

Если i == 0, тогда вы будете проверять символ на i (0) и i+j (1), что на самом деле не то, что вы хотите. Вы хотите сравнить этот показатель только с i

0

Это будет правильный цикл.

for (int i = 0; i < s.length(); i++) 
{ 
    for (int j = 0; j < p.length(); j++) 
    { 
     if (s.charAt(i) == p.charAt(j)) { 
      reps++; 
     } 
    } 
} 

Вы были получать из ошибки диапазона, потому что вы были проверки s.charAt(i+j), когда вы должны проверять для s.charAt(i).

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