【问题标题】:Try/ Catch problems when using For loop in Java在 Java 中使用 For 循环时尝试/捕获问题
【发布时间】:2016-10-05 22:08:22
【问题描述】:

我试图从用户那里获得 10 个整数输入。另外,当用户输入错误类型的数据(不是整数)时,我想处理异常。但是,我在使用 for 循环和 try/catch 时遇到了这个问题。 例如,如果我在第 4 个数字处输入字符串。结果我会得到这个:

Type 1. integer: 15
Type 2. integer: 152 
Type 3. integer: 992
Type 4. integer: jj
Invalid number
Type 5. integer: Invalid number
Type 6. integer: Invalid number
Type 7. integer: Invalid number
Type 8. integer: Invalid number
Type 9. integer: Invalid number
Type 10. integer: Invalid number

Integers: [15, 152, 992]

我不知道捕获异常后如何重新进入循环。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner(System.in);
    Integer integer;
    List<Integer> integerList = new ArrayList<Integer>();
    for (int i = 1; i < 11; i ++) {
        System.out.print("Type " + i + ". integer: ");
        try {
        integer = input.nextInt();
        integerList.add(integer);
        }
        catch (InputMismatchException exc) {
            System.out.println("Invalid number");
        }

    }
    System.out.println("Integers: " + integerList);
}

【问题讨论】:

标签: java


【解决方案1】:

您不会将 for 循环置于异常状态。我建议使用 while 循环而不是 for 循环,例如

//  your code
while (integerList.size() < 10) {
    Scanner input = new Scanner(System.in);
    //  your code
    try {
    //  your code
    }
    catch (InputMismatchException exc) {
        input.nextLine();
        //  your code
    }
    //  your code
}
//  your code

【讨论】:

  • 它仍然没有为我解决问题。由于某些原因,异常语句被捕获为下一个整数的输入。使用 while 循环在这里创建了一个不定式循环。我的异常处理参数有什么问题吗?
  • @HieuCao 将input.nextLine() 添加到错误消息之前的catch 块中(请参阅stackoverflow.com/a/25277332/584862
【解决方案2】:

或者当异常计数时减少计数器,这样循环就不会被计数。

 catch (InputMismatchException exc) {
            System.out.println("Invalid number");
            i--;       
}

【讨论】:

    【解决方案3】:

    您必须清除扫描仪输入:

    import java.util.Scanner;
    import java.util.List;
    import java.util.ArrayList;
    import java.util.InputMismatchException;
    
    class foo {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner input = new Scanner(System.in);
            Integer integer;
            List<Integer> integerList = new ArrayList<Integer>();
            for (int i = 1; i < 11; i ++) {
                System.out.print("Type " + i + ". integer: ");
                try {
                    integer = input.nextInt();
                    integerList.add(integer);
                }
                catch (InputMismatchException exc) {
                    System.out.println("Invalid number");
                    input.nextLine();
                    --i;
                }
            }
            System.out.println("Integers: " + integerList);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      • 2022-08-13
      • 2013-12-15
      • 2019-10-29
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多