java - 移回迭代时,while循环变为无限
问题描述
使用while循环提示用户输入3个整数来平均它们,当输入不是整数时需要重新提示,所以我决定在输入不是整数时后退一步,但是当我输入一个非 int 时,就好像它一直处于它不是 int 的状态,并继续重新提示,而不重新检查新的输入。
Scanner scnr = new Scanner(System.in);
String prompt = "Type an integer: ";
int num = 0;
int i = 0;
while (i < 3) {
System.out.print(prompt);
if (scnr.hasNextInt()) {
int input = scnr.nextInt();
num += input;
} else i -= 1;
i += 1;
}
double average = num / 3.0;
System.out.println("Average: " + average);
解决方案
hasNextInt()
true
仅当 int 已经存在时才返回——它实际上并没有得到输入。这就是你的电话nextInt()
正在做的事情。但它永远不会被调用,因为hasNextInt()
它总是错误的,因为你从未真正接受过用户输入,所以i
在else
块中递减,然后永远递增。
另一种方法是使用 try/catch 块nextInt()
来获取下一个输入值,如果捕获到异常则后退(意味着输入不是 int)。
推荐阅读
- android - Google In App Billing 区分用户帐户
- c++ - “错误:获取临时对象的地址”的最简单修复?
- tensorflow - 如何在 tensorflow2 中为 RNN 制作可变长度序列的掩码,然后对其进行填充
- ruby-on-rails - Ruby 设置存储大量单词并查找
- r - 在 R 中查找两个栅格之间的 p 值
- javascript - 在 React 中使用箭头函数声明方法
- jmeter - JMeter 3.1 添加额外引号,CSV 数据集配置
- node.js - 如何在 mongodb 的一个页面中呈现和显示一些博客文章,并将其余的博客文章显示到另一个页面
- flutter - Flutter:如何使 PageView 滚动速度快结束
- java - 当我启动 Activity 时,在 onCreate() 之后调用 OnDestroy()