Java 用户输入的循环永无止境

Java 用户输入的循环永无止境,java,for-loop,input,Java,For Loop,Input,我是java新手,刚刚学会了如何使用用户输入。我有一个for循环,通过用户输入10次来请求一个数字。如果数字无效,则应打印“无效数字”,且不计入递增for循环。相反,它总是循环说“无效数字” import java.util.Scanner; public class Main { public static void main(String[] args) { int sum = 0; Scanner scanner = new Scanner(Sy

我是java新手,刚刚学会了如何使用用户输入。我有一个for循环,通过用户输入10次来请求一个数字。如果数字无效,则应打印“无效数字”,且不计入递增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();
    }
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
整数和=0;
扫描仪=新的扫描仪(System.in);
对于(inti=1;i我需要添加一个

scanner.nextLine();

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

问题是您在两个位置更新迭代器
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();
    }
}
import java.util.Scanner;
公共班机{
公共静态void main(字符串[]args){
整数和=0;
扫描仪=新的扫描仪(System.in);

对于(inti=1;i我认为您还可以直接在while循环中使用hasNextInt()调整代码

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

请检查我的答案是否解决了你的问题,并接受它作为唯一的灵感来源