我是Java的新手,并且刚刚学习了如何使用用户输入。我有一个for循环,需要用户输入10次才能输入数字。如果数字无效,则应打印“ Invalid number”,并且不计入递增的for循环中。取而代之的是,它永远循环播放,说“无效号码”。
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();
}
}
答案 0 :(得分:0)
问题是您要在2个地方更新迭代器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();
}
}
答案 1 :(得分:0)
我认为您也可以直接在while循环中使用hasNextInt()调整代码。
while (scanner.hasNextInt()) {
int num = scanner.nextInt();
sum += num;
}
答案 2 :(得分:-1)
我需要添加一个
scanner.nextLine();
在if and else语句之后,在两种情况下都清除扫描仪。