2

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

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

  • 客户端可以用标题和作者实例化一本书
  • 客户可以检查但不能修改书名或作者
  • 客户可以询问顾客是否借过一本书(由书名标识)。
  • 客户可以告诉顾客归还给定的书(由标题标识)。
  • 客户可以告诉顾客借一本给定的书。

Patron 类应该为每本书使用一个单独的实例变量(总共三个)。这些变量中的每一个最初都是空的。借书时,读者会查找不为空的变量。如果没有找到这样的变量,则该方法返回 false。如果找到空变量,则将其重置为新书并且该方法返回 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

4 回答 4

1

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

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

于 2012-06-08T19:40:00.343 回答
1

nextInt()在代码的第 71 行使用,它得到用户提供的整数答案。然后使用nextLine()which 使该扫描仪前进到当前行并返回被跳过的输入。. 被跳过的输入只是前一次调用中的换行符nextInt()(它不会读取整行,只读取 int)。

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

于 2012-06-08T19:42:21.537 回答
1

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

于 2012-06-08T19:43:48.837 回答
0

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

于 2012-10-26T21:10:44.803 回答