我有一个文本文件,其中包含一个姓名列表和一个以下表格中的书籍列表:
5
Prisoner Azkaban
J. k. Rowling
Eragon
Christopher Paolini
Ulysses
James Joyce
Of mice and men
John Steinbeck
War and peace
Leo Tolstoy
4
Craig David
Isabel Campbell
Lee Rinaldo
Bethany Waters
这些数字告诉您数字后面有多少个“对象”,从book name>author开始循环,然后这个模式停止在列出用户名的users部分重复。
下面是我对代码的尝试:
Scanner inFile = new Scanner(new FileReader("C:\\Users\\finla\\IdeaProjects\\Untitled1\\src\\books2.txt"));
int numberOfBooks = inFile.nextInt();
for (int i= 0; i <= numberOfBooks; i++){
String bookName = inFile.nextLine();
System.out.println("Book name: " + bookName);
String bookAuthor = inFile.nextLine();
System.out.println("Book author: " + bookAuthor);
}
int numberOfUsers = inFile.nextInt();
for (int i= 0; i <= numberOfUsers; i++){
String userName = inFile.nextLine();
System.out.println("User name: " + userName);
}
以下是输出:
Book name:
Book author: Prisoner Azkaban
Book name: J. k. Rowling
Book author: Eragon
Book name: Christopher Paolini
Book author: Ulysses
Book name: James Joyce
Book author: Of mice and men
Book name: John Steinbeck
Book author: War and peace
Book name: Leo Tolstoy
Book author: 4
这本书的作者给我贴错了标签。循环不应该在最后打印出4。我希望能在名单的最后读到人。你对我的代码为什么不起作用有什么建议吗?我尝试过使用next()而不是nextline(),但这并不能解决问题,只能从每行中获取第一个字符串。
2条答案
按热度按时间qmelpv7a1#
开头空行:
当你使用
inFile.nextInt();
它只获取int,不使用行尾的换行符\n
.有几种方法可以解决此问题,其中一种方法是使用整行并将其解析为int,例如:
否则,您只需在使用nextint用完行的其余部分后使用空白nextline调用即可:
结尾处的附加行:
你的循环运行了额外的时间,因为
<=
,记住循环从0开始,所以正确的方法是使用<
:biswetbf2#
您希望for循环从0到<计数,或者从1到计数,如下所示:
你有<=,这意味着你消耗了1行太多。