我有一个文本文件,我从中创建了一个数组列表。每行 = 一个集合元素。有没有办法在该行中找到特定单词,如果找到,将该行输出到控制台?现在我的那部分代码看起来有点像这样: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
提交
取消
