我有一个只需要整数的扫描仪输入。如果我要键入一个字符串,它会拒绝并要求用户键入,直到它看到一个正确的整数。我有一个try / catch块,但是即使用户为它输入一个整数,它仍然会继续提示用户输入另一个整数。如何以这样的方式对其进行编码:一旦读取了第一个整数,它将完全停止程序并返回结果?
这是我现在的代码:
public static void main(String[] args) {
double max = Integer.MIN_VALUE;
int key1 = 0;
while(true){
System.out.println("Enter integer number only");
Scanner in = new Scanner(System.in);
String input = in.next();
int b =0;
try (BufferedReader br = new BufferedReader(new FileReader(
"readfromfile.txt"))) {
b = Integer.parseInt(input);
if(b == (int)b){
System.out.println("Correct Integer entered!");
}
} catch (IOException e) {
e.printStackTrace();
} catch (NumberFormatException ne) {
System.out.println("Input is not a number, please enter number!");
}
}
}
答案 0 :(得分:2)
您正在循环while (true)
,因此您的循环将永远不会在写入时结束。
您可以在获得终止循环的号码后添加break
语句:
if(b == (int)b){
System.out.println("Correct Integer entered!");
break;
}
您可以在Java Tutorials中详细了解break
和其他分支语句。这些是Java的基础部分,因此您应该熟悉它们。
另一种方法是使用变量来跟踪您是否找到了数字。
您可以将变量的初始状态设置为while (true)
,而不是循环true
,并在找到您喜欢的数字后将其翻转:
boolean stillLooking = true;
while (stillLooking) {
...
if(b == (int)b){
System.out.println("Correct Integer entered!");
stillLooking = false;
}
...
}
另外需要注意的是,Integer.parseInt(input)
可以保证返回int
,或者抛出NumberFormatException
。尝试检查int
- ness对于您已编写的异常处理是多余的,因此您可以这样做:
b = Integer.parseInt(input);
// if input cannot be parsed to an int, this line will not be reached
System.out.println("Correct Integer entered!");
答案 1 :(得分:0)
不应使用while (true)
进行循环,而应该使用像:
boolean correctAnswer = false;
while (!correctAnswer) {
// read input from user
// ...
if (<input is what expected>) {
correctAnswer = true;
}
}
注意:
if(b == (int)b){
System.out.println("Correct Integer entered!");
}
将始终打印Correct...
,因为b
始终等于(int)b
,因为b
被声明为int
。我想你想要与你尚未使用的文件中读取的值进行比较。