我必须为我的计算机科学课做一个项目。问题是:
图书馆的顾客最多可以借三本书。因此,赞助人有一个名字和最多三本书。一本书有作者和标题。设计并实现两个类,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”,这意味着不返回任何书,而是给我一个无效的输入输出。
答案 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();
使输入停止并等待响应。