【发布时间】:2017-02-09 05:48:53
【问题描述】:
期望的结果:
- 接受用户输入
- 确保用户一次只输入 1 个整数值
- 将该整数存储在变量中
我尝试通过执行以下操作来实现这一点:
- 将用户输入存储在变量中
- 计算变量中的标记数
- 如果没有一个令牌,则拒绝输入
- 如果输入的数据类型不是
int,则拒绝输入
代码:
Scanner scan = new Scanner(System.in);
System.out.println("Enter an integer:");
String myString = scan.nextLine();
int tokens = new StringTokenizer(myString, " ").countTokens();
while (tokens != 1 && !scan.hasNextInt()) {
System.out.println("Enter a single integer");
myString = scanner.nextLine();
tokens = new StringTokenizer(myString, " ").countTokens();
}
int number = scanner.nextInt();
System.out.println(number);
这段代码漏洞百出。输出不一致且不受欢迎。它通常以抛出java.util.InputMismatchException 错误结束,表明它试图存储的值不是int。我在一个循环之后和多个循环之后都遇到过这个错误,即使输入的类型和数量相同(例如 2 个字符串)。
我应该继续使用这段代码,还是应该尝试从不同的角度解决这个问题?
【问题讨论】:
-
哎呀,感谢您指出这一点,这是我的帖子中的错字,但我的代码中没有,所以这不会导致任何问题。
-
您不想在
whileloop 条件中使用||(逻辑或)而不是&&(逻辑与)吗? -
“我收到一堆错误”到底是什么错误?
-
@DavidChoweller 我的理解是
&&会导致代码循环,直到正好有1个token并且它是一个整数,然后它将继续将整数值存储在变量@ 987654329@。除非输入既有一个标记又是一个整数,否则我希望用户必须提供新的输入。 -
@Code-Apprentice 我将在我的帖子中澄清这一点——除了
java.util.InputMismatchException之外,代码实际上并没有经常抛出错误。我没有看到任何模式。有时它会在几个循环中运行良好,使用相同的输入,有时它会在第一个循环时崩溃。我观察到很多不一致和错误,我会尝试在我的 OP 中添加一些。