我有一個文本文件,我從中創建了一個數組列表。每行 = 一個集合元素。有沒有辦法在該行中找到特定單詞,如果找到,將該行輸出到控制臺?現在我的那部分代碼看起來有點像這樣:protected static void FindBook() { System.out.print("Author's name: "); String neededauthor = sc.nextLine(); for (int k=0; k<=books.size(); k++) { if (books.get(k).contains(neededauthor)) System.out.println(books.get(k)); }}但它給了我Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0更新:我已經嘗試修復它,現在異常消失了,但它也不起作用。輸入名稱后,該方法停止工作并且什么也不做,它應該輸出該行。我不明白這是怎么回事
3 回答

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
正如其他答案已經說過的那樣,訪問不存在的索引時會出現問題:
books.get(books.size())
索引從0到size()-1,因此size()超出范圍。
您可以使用這樣的 foreach 循環完全避免索引并使代碼更簡單:
for (Book book: books)
if (book.contains(neededauthor))
System.out.println(book);
我假設的類型books是一些類型的集合Book。

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
我認為您的代碼看起來正確,但有一個問題。
for (int k=0; k<=books.size(); k++) {
如果k
從 0 開始,它不能等于books.size()
,因為這意味著它將for
比 中的元素多經過一次循環books.size()
。
嘗試將其更改為 for (int k = 0; k < books.size(); k++) {
除此之外,如果您的 ArrayList 中books
有值,那么您的代碼應該可以工作。

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
用這部分k<books.size()
代替k<=books.size()
它應該只有不到。不小于等于。還將您的方法名稱更改為,findBook()
因為它不遵循 Java 駱駝表示法
添加回答
舉報
0/150
提交
取消