2014-02-25 56 views
0

首先,這是一個學校課程。 這是我的計劃:運行時出錯,在版本上正常工作

import java.util.*; 

public class Exitearly1 { 
    public static void main(String[] args) { 
     Scanner kbinput = new Scanner(System.in); 
     System.out.println("Please input your name: "); 
     String name = kbinput.next(); 
     int count = 0; 
     while (count < name.length()) { 
      count++; 
      int res = name.charAt(count); 
      if ((res == 'a') || (res == 'A')) 
       continue; 
      System.out.println(name.charAt(count)); 
     } 
     System.out.println("Name with no A's"); 
    } 
} 

它打印什麼,我輸入(安德烈),而A的喜歡它是假設,但這樣做,而不是打印出來,上線後,它給了我這樣的輸出:

n 
d 
r 
e 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6 
    at java.lang.String.charAt(String.java:686) 
    at Exitearly1.main(Exitearly1.java:13) 

我嘗試了許多不同的方式用什麼來解決它改變它,我來這裏是因爲我問老師如何解決它,她只告訴我什麼是錯的,我已經知道了。

回答

2

你從位置迭代定位name.length(),所以你走出去的範圍(因爲stringvar.charAt(stringvar.length())總是導致一個超出範圍。例外

奧廖爾的解決方案可能會在一個無限循環結束你應該做這樣的事情:

while (count < name.length()) 
{  
    int res = name.charAt(count); 
    if ((res !='a')&&(res !='A')) { 
     System.out.println(name.charAt(count)); 
    } 
    count++; 
} 

請注意,您的代碼永遠不會顯示字符串的第一個位置,獨立於它是一個' A'或其他東西。

1

雖然其他人指出你的錯誤(你在用它來讀取它描述的位置之前的字符時增加了計數器),我會建議使用增強for循環(它可以遍歷數組或實現接口的類的實例),類似於

for (char ch : name.toCharArray()){ 
    if ((ch == 'a') || (ch == 'A')) 
     continue; 
    System.out.println(ch); 
} 
相關問題