这里的第一篇文章/问题和java的新内容。试图制作一个基于小文本的电影数据库应用程序。其中一部分是添加评论。问题是,当我在评论中询问分数[0-10]时,我只是按[enter],提示只是向下一步并继续等待输入。我希望将此字段留空是不可能的。以下是我到目前为止的情况:
int score;
do {
while (!sc.hasNextInt()) {
sc.next();
System.out.print("\nInvalid input! ");
System.out.print("Please enter a number from 0-10: ");
}
score = sc.nextInt();
if (!(score >= 0 && score <= 10)) {
System.out.print("\nInvalid input! ");
System.out.print("Please enter a number from 0-10: ");
}
} while (!(score >= 0 && score <= 10 ));
答案 0 :(得分:2)
Scanner
正在阅读令牌,即以空格分隔的文字。这意味着,只要你按Enter键,下一个令牌就还没有开始。
Scanner
的一个谬误是它易于使用,但更容易被滥用,例如错误处理用户输入。
示例:如果使用进入123 abc<enter>
会发生什么?您的代码将读取123
并继续,将abc
留在缓冲区中以进行下一个提示,这可能需要文本,因此将abc
作为该文本读取。糟糕!!
大多数情况下,为了处理错误的用户输入,您绝不应使用hasNextXxx()
以外的nextXxx()
和nextLine()
方法。这是确保您为一个提示获得一个答案(输入)的唯一方法。
所以,你应该这样做:
int score;
for (;;) {
System.out.print("Please enter a number from 0-10: ");
String line = sc.nextLine();
try {
score = Integer.parseInt(line.trim());
} catch (NumberFormatException e) {
System.out.println("Invalid input! Not a number.");
continue;
}
if (score < 0 || score > 10) {
System.out.println("Invalid input! Out of range.");
continue;
}
break;
}