有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么Scanner#nextInt inside for循环不断抛出异常?

我一直在学习JAVA,我对代码有点怀疑:

class apple {
    public static void main(String[] args) {

        int[] num = new int[3];

        Scanner input = new Scanner(System.in);
        for (int i = 0; i < num.length; i++) {

            try {
                num[i] = input.nextInt();
            } catch (Exception e) {
                System.out
                    .println("Invalid number..assigning default value 20");
            num[i] = 20;
            }
        }

        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }
}

我写了一个处理异常的小程序,若用户输入不是Int,抛出一个异常并指定默认值。 如果我把scanner语句放在for循环中,它就可以正常工作,但如果我把它放在它的外部,则会指定引发异常的相同值,即我输入的是char而不是int。 但若我输入所有整数,它会在数组中指定正确的值

Scanner input = new Scanner(System.in);

我希望你们理解我的问题


共 (3) 个答案

  1. # 1 楼答案

    如果^{}无法解析整数,则它不会超越输入,因此如果在解析失败后继续调用它,它将继续尝试再次解析相同的输入,抛出InputMismatchException

    您可以在catch块中调用^{},忽略它返回的字符串,以跳过无效输入:

    try {
        num[i] = input.nextInt();
    } catch (Exception e) {
        System.out
                .println("Invalid number..assigning default value 20");
        num[i] = 20;
        input.next();
    }
    
  2. # 2 楼答案

    更好的代码是,您可以检查下一个值是否为整数,这样您甚至不需要捕获异常:

       public static void main(String[] args) {
    
        int[] num = new int[3];
    
       Scanner input = new Scanner(System.in);  
    
        for (int i = 0; i < num.length; i++) 
         {
                 if(input.hasNextInt())
                 {
                      num[i] = input.nextInt();
                 }
    
                else
                {
                    System..out.println("non integer value.. will assign it default value 20");
                    num[i]=20;
                    input.next();
                }
        }
    
        for (int i = 0; i < num.length; i++) {
    
            System.out.println(num[i]);
        }
    
    
      }
    
  3. # 3 楼答案

            try
            {
                num[i] = input.nextInt();
            }
            catch(InputMismatchException ip)
            {
                System.out.println("Invalid number..assigning default value 20");
                num[i] = 20;
                input.next();
            }