我有一个文本文件,从中创建了一个数组列表。每行=集合的一个元素。有什么方法可以在该行中找到一个特定的单词,如果找到了,将其输出到控制台? 现在,我的部分代码看起来像这样:
> ((double (double (double inc))) 5)
13
> ((double (double (double (double inc)))) 5)
21
但这给了我
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));
}
}
更新:我已经尝试修复它,现在该异常消失了,但是它也不起作用。输入名称后,该方法将停止工作,并且不执行任何操作,而是在该位置输出该行。我不明白是怎么回事
答案 0 :(得分:1)
正如其他回答者已经说过的那样,访问不存在的索引时存在问题:
books.get(books.size())
索引从0
到size()-1
,因此size()
超出范围。
通过使用如下所示的foreach循环,可以完全避免使用索引并简化代码:
for (Book book: books)
if (book.contains(neededauthor))
System.out.println(book);
我假设books
的类型是类型Book
的某种集合。
答案 1 :(得分:0)
我认为您的代码看起来正确,但是有一个问题。
for(int k = 0; k <= books.size(); k ++){
如果k
从0开始,则它不能等于books.size()
,因为这意味着它将比{{ 1}}。
尝试将其更改为for
此外,如果您的ArrayList books.size()
中包含值,则您的代码应该可以工作。
答案 2 :(得分:0)
使用这部分k<books.size()
代替k<=books.size()
,它应该少于。不小于等于。还要将您的方法名称更改为findBook()
,因为它不遵循Java骆驼符号