代码不等待用户输入?

时间:2012-06-08 19:33:23

标签: java input console

我必须为我的计算机科学课做一个项目。问题是:

图书馆的顾客最多可以借三本书。因此,赞助人有一个名字和最多三本书。一本书有作者和标题。设计并实现两个类,Patron和Book,以表示这些对象和以下行为:

  • 客户端可以实例化具有标题和作者的书籍
  • 客户可以检查但不能修改图书的标题或作者
  • 客户可以向顾客询问它是否借用了一本书(由标题标识)。
  • 客户可以告诉顾客返回给定的书(由标题标识)。
  • 客户可以告诉顾客借用一本书。

Patron类应该为每本书使用一个单独的实例变量(总共三个)。 这些变量中的每一个最初都为空。当借书时,顾客会寻找一个非空的变量。如果未找到此类变量,则该方法返回false。如果找到null变量,则将其重置为新书,并且该方法返回true。类似的考虑也适用于其他方法。使用方法aString.equals(aString)比较两个字符串是否相等。确保为您的类包含适当的toString方法,并使用测试程序对其进行测试。

以下是我的Client课程,其中包含main方法:http://pastebin.com/JpxCT2F6

现在我的问题是,当我运行程序时,程序不会等待用户输入。以下是Eclipse控制台中的内容:

Please enter title of book 1: 
s
Please enter author of book 1: 
e
Please enter title of book 2: 
f
Please enter author of book 2:
t
Please enter title of book 3: 
g
Please enter author of book 3:
d
Which book would you like to check for?
s
The patron has taken out the book s
Would you like to return a book? (1 yes or 2 no)
1
Which book would you like to return?
Sorry, could not find the book 
Would you like to take out a book? (1 yes or 2 no)
2
Invalid option
Which book would you like to check for?
The patron does not have  taken out
Would you like to return a book? (1 yes or 2 no)

嗨,你可以看到,在“你想要哪本书返回?”之后,控制台不会等待用户输入。相反,它需要一个空白值。然后在代码中,我输入“2”,这意味着不返回任何书,而是给我一个无效的输入输出。

4 个答案:

答案 0 :(得分:1)

nextLine吃换行符。 nextInt将其保留在输入缓冲区中,下一个readLine立即终止。

快速修复:对所有内容使用readLine,然后从字符串read解析int。

答案 1 :(得分:1)

您在代码的第71行使用nextInt(),它会获得用户提供的整数答案。然后使用nextLine() Advances this scanner past the current line and returns the input that was skipped.。跳过的输入只是前一个nextInt()调用中的换行符(它不会只读取int的整行)。

您可以在需要输入之前调用input.nextLine()一次,或使用nextLine()代替nextInt()并将字符串转换为整数值来跳过此步骤。

答案 2 :(得分:1)

你只需要去下一行。 input.nextLine();

答案 3 :(得分:0)

您可以使用nextInt();使输入停止并等待响应。