用户输入的循环永远不会结束



我是java的新手,刚刚学会了如何使用用户输入。我有一个for循环,它通过用户输入来询问一个数字,循环经过10次。如果数字无效,则应打印"无效数字",并且不计入循环的递增。相反,它只是永远循环说"无效数字"。

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int sum = 0;
Scanner scanner = new Scanner(System.in);
for(int i = 1; i<=10; i++){
System.out.println("Enter number #" + i + " ");
boolean validInt = scanner.hasNextInt();
if(validInt){
int num = scanner.nextInt();
sum += num;
} else{
System.out.println("Invalid Number");
i--;
}
}
System.out.println("Sum was " + sum);
scanner.close();
}
}

问题是在两个位置更新迭代器i

更好的方法是根据情况进行更新。

我还建议您使用包装类进行安全的整数转换,并像以下代码中所做的那样正确处理异常:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int sum = 0;
Scanner scanner = new Scanner(System.in);
for(int i = 1; i<=10; ){
System.out.println("Enter number #" + i + " ");
String input = scanner.nextLine();
try{
int num = Integer.parseInt(input);
sum += num;
i++; // If input is a valid integer, then only update i
}catch(NumberFormatException e){
System.out.println("Invalid Number");
}
}
System.out.println("Sum was " + sum);
scanner.close();
}
}

我认为您也可以直接在while循环中使用hasNextInt((来调整代码。

while (scanner.hasNextInt()) { 
int num = scanner.nextInt();
sum += num;
}

我需要添加一个

scanner.nextLine();

在if和else语句之后,在两种情况下都要清除扫描仪。

最新更新