2013-10-01 53 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的時間e和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)) 

你想P的每一個字符比較以s

如果你是比較「H」與「EO」,你要比較「H」和「E」然後用「o」表示,如果你使用i + j,它將把「H」的指針移動到「e」等等。

+0

這提出了一個超出範圍的錯誤。 沒關係,你的編輯修正了它。無論如何,我不知道爲什麼我甚至有這個j。我很笨,謝謝。 – 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然後你循環將檢查在i0)和i+j1)這不是你想要的。你只想要比較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)

相關問題