2011-09-21 53 views
-1

我在獲取方法在Java中正常工作時遇到了一些問題。在程序中,我創建了一個由不同長度的許多不同單詞組成的數組。我正在處理的方法應該是讀取字長,字母和位置的用戶輸入,然後Java將打印出與這三個參數匹配的任何單詞(例如,如果用戶輸入字長4,字母A和位置2,而長度爲4的字包含位置2處的字母A將被打印出來)。StringIndexOutOfBoundsException

無論如何,我已經創建的方法是這樣的:

public static void inputMethod(int length, char letter, int position){ 
    for (int index = 0; index < wordTable.length; index++) { 
     if (length == wordTable[index].length() && letter == wordTable[index].charAt(position)) 
      System.out.println(wordTable[index]); } 

這種方法工作正常進行一些投入,但對於其他輸入我得到一個錯誤信息,如本:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5 
at java.lang.String.charAt(Unknown Source) 
at Wordarray.inputMethod(Wordarray.java:153) 
at Wordarray.main(Wordarray.java:61) 

如果有人能向我解釋我如何解決這個問題,我將不勝感激!就像我所說的,我只收到某些輸入信息。對於其他輸入,該程序就像它應該的那樣工作。

回答

2

如果更換

for (int index = 0; index < wordTable.length; index++) { 

for (int index = 0; index < length; index++) { 

這很可能是你真正想要的不是什麼。

的更好的方法是這樣的:

public static void inputMethod(int length, char letter, int position) { 
    // check if input is valid 
    if(position < length) 
    for (int index = 0; index < wordTable.length; index++) { 
     if (length == wordTable[index].length() && letter == wordTable[index].charAt(position)) 
      System.out.println(wordTable[index]); 
} 
+0

非常感謝!這工作完美:)。畢竟,我不需要assert語句。不勝感激! – Kristian

7

那麼,顯然position比在wordTable[index](或否定)找到的字符串的長度大。您還需要檢查字符串的長度。

+0

是的,好像我得到這個消息,如果整數「位置」是等於或大於整數「長度」的值越高。現在我已經包含了一個「斷言」 - 將會告知這種情況的陳述。非常感謝你的幫助。 – Kristian

0

這是您的實際代碼?您在for循環中使用了三個不同的變量:indexsindeksindex。我很驚訝,甚至編譯。不要重新輸入代碼,剪切並粘貼實際的代碼。

+0

嗨。我原本並沒有用英文寫這篇文章,只是忘了翻譯所有的「索引」單詞。這些在我的程序文件中當然都是相似的。對不起,這可以忽略。 – Kristian

1

如果給定的位置比當前字的長度大,則可能發生這種情況。還值得一看:position爲第一個字符01

+0

感謝您的評論。如上所述,爲了確保參數輸入正確,我現在包含了一個assert-statement。 – Kristian

+0

如果歡迎回答,請通過投票通知回答者。 有關詳細信息,請查看[FAQ-Section](http://stackoverflow.com/faq#howtoask) 並且最重要的:讓我們知道,如果答案有效,那麼新行爲是什麼,並編輯您的問題顯示新的代碼。 –

相關問題