当前位置: 首页 > 面试题库 >

Java中的do-while循环的异常处理

穆商震
2023-03-14
问题内容

该算法应将3个整数带入ArrayList。如果输入的不是整数,则将出现提示。当我执行代码时,该catch子句会执行,但是程序会陷入无限循环。有人可以指导我朝正确的方向前进,我感谢您的帮助。:-D

package chapter_08;
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class IntegerList {
    static List<Integer> numbers = new ArrayList<Integer>();

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int counter = 1;
        int inputNum;

        do {
            System.out.print("Type " + counter + " integer: " );
            try {
                inputNum = input.nextInt();
                numbers.add(inputNum);
                counter += 1;
            }
            catch (Exception exc) {
                System.out.println("invalid number");
            }
        } while (!(numbers.size() == 3));
    }
}

问题答案:

这是因为当使用下一个int读取nextInt()并且失败时,Scanner仍然包含键入的内容。然后,当重新进入do-
while循环时,input.nextInt()尝试再次使用相同的内容对其进行解析。

您需要使用以下Scanner内容“冲洗” 内容nextLine()

catch (Exception exc) {
    input.nextLine();
    System.out.println("invalid number");
}

笔记:

  • 您可以删除该counter变量,因为您没有使用它。否则,你可以更换counter += 1counter++
  • 可以替换while (!(numbers.size() == 3))使用while (numbers.size() != 3),甚至更好:while (numbers.size() < 3)
  • 捕获异常时,除非您有充分的理由这样做,否则您应尽可能具体。在您的情况下Exception应替换为InputMismatchException


 类似资料:
  • 我是并发新手,我试图为do-time循环实现执行器服务并发。但是我总是遇到 以下是我的示例代码: 但这似乎是不正确的。我想我在错误的地方调用了关闭。有人能帮我在do-time循环中正确实现

  • 我想写一个程序,把每4位数字的每一位相加。例如,我从1000开始,加上1001,千变成2,百变成0,十变成0,单位变成1。这将持续增加每个数字,直到达到9999。这是我的代码,它只输出9999。

  • 与while循环顶部测试循环条件的for和while循环不同, do...while循环do...while循环底部检查其条件。 do...while循环类似于while循环,除了do ... while循环保证至少执行一次。 语法 (Syntax) Perl中do...while循环的语法是 - do { statement(s); }while( condition ); 应该注意的是

  • 与while循环顶部测试循环条件的for和while循环不同,Objective-C编程语言中的do...while循环检查循环底部的条件。 do...while循环类似于while循环,除了do ... while循环保证至少执行一次。 语法 (Syntax) Objective-C编程语言中do...while循环的语法是 - do { statement(s); } while( co

  • Pascal中的while-do循环语句允许重复计算,直到满足某些测试条件。 换句话说,只要给定条件为真,它就会重复执行目标语句。 语法 (Syntax) while-do循环的语法是 - while (condition) do S; 其中, condition是布尔值或关系表达式,其值为true或false, S是BEGIN ... END块中的简单语句或语句组。 例如, while num

  • do-while语句用于模拟其他编程语言中存在的简单while循环。 语法 (Syntax) do-while语句的语法如下 - do while (condition) statement #1 statement #2 ... end 通过首先计算条件表达式(布尔值)来执行while语句,如果结果为true,则执行while循环中的语句。 从while语句中的条件