当前位置: 首页 > 知识库问答 >
问题:

Java:做时循环中的Tre-Catch语句

唐利
2023-03-14

我试图执行一段代码来扫描用户输入值。此操作包含在我编写的一个名为getTriangleDim()的自定义方法中;该方法读取用户的int值,确保它在某个范围内,然后返回输入的int值。这个方法非常有效,我对它没有任何问题。

当我为getTriangleDim()方法输入一个非int值时,问题就出现了。它给我一个输入不匹配异常错误。我已将try-catch语句写入do-while循环中,试图解决此问题。但这是我第一次使用try-catch语句,显然我遗漏了一些东西。

以下是嵌套在do while循环中的try catch语句的代码:

//loop to scan for triangle dimension
        boolean bError = true;
        int triangle;

        do{
            try {
                triangle = getTriangleDim();
                bError=false;
                }
            catch (Exception e){
                System.out.println("You did not enter an integer, please enter an integer value");
                triangle = getTriangleDim();

                }
        }while (bError);

如果我通过输入一个char值来代替int来测试它,它实际上会捕获一次错误,然后打印我的“你没有......”语句。但是如果我重新输入另一个非int数字,我又会得到一个运行时错误,说.........你猜对了.........InputMismatchExc0019错误。

我的方法的代码在这里:

//method for scanning triangle dimensions from keyboard
    public static int getTriangleDim(){
        int triangle = 0;
        Scanner keyboard = new Scanner(System.in);
        do{
        System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
        triangle = keyboard.nextInt();
        if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
            System.out.println("Inpute value outside of range");
        }while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
        return triangle;
    }

我需要Do-While循环继续,但是我不断地得到这些错误。

共有1个答案

翟京
2023-03-14

没有必要要求输入catch块。你已经在一个循环中了,所以你可以捕获异常,告诉用户给你有效的输入,然后你不必做任何其他事情——你会循环回到开始。

do{
    try {
        triangle = getTriangleDim();
        bError=false;
    } catch (Exception e){
        System.out.println("You did not enter an integer, please enter an integer value");
        // Don't do anything else in here: we will loop back to the beginning again and get new input!
    }
}while (bError);

作为旁注(正如您所注意到的),如果您尝试在try块之外使用triangle,您的代码当前将无法编译,因为“triangle可能尚未初始化”。这是因为编译器无法在编译时确定程序在运行时将执行什么操作:也就是说,编译器无法看到triangle始终在该循环中初始化。因此,您的变量声明还应该将triangle设置为某个默认值0int的正常默认值,但是在程序中使用任何有意义的东西(根据gettriangeldim代码,看起来0很好)。

int triangle = 0;
do { // etc.

这样,您可以向编译器promise,当您离开循环时,三角形将具有一个值,并且您可以在其他地方使用它。

 类似资料:
  • 我的程序假设在用户输入整数时向随机数组添加10,随机数组将显示,并在第一个数组下向它们添加10,如果用户不输入int值,则try catch语句将捕捉显示错误消息的错误,因此我要做的是在try catch语句中添加一个循环,使用户在不输入int值时输入int值,这是我到目前为止尝试过的,但没有成功

  • 循环结构能够让程序员以最少的精力去完成大量重复的工作,它可以让计算机根据条件做循环计算,当条件成立时继续循环,当条件不成立时结束循环。 依据前面所学的知识,如果我们想在屏幕上依次打印1到5,可以编写以下程序: 案例演示 预览 复制 复制成功! // PrintNums.java class PrintNums { public static void main(String[] args)

  • 问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,

  • 问题内容: 我试图让用户有机会在引入会产生错误但又无法正常工作的东西之后重复输入,因为一旦发现 错误, 就不会再次执行try东西,而是直接进入catch东西,生成一个永恒的东西。柱。这是我的代码: 问题答案: 输入非整数时,对的调用不会消耗非整数。您需要致电(或)使用它。就像是,

  • 我目前正在处理Eclipse中的一些Java代码,并试图在do-time语句中使用try捕获语句。我目前的代码如下: 当我输入任何数字时,代码工作正常,并将循环请求另一个输入,当输入10时,代码按预期停止(因为猜测值等于rand)。但是,如果我输入任何非整数的内容(例如“否”),则会出现一个无限循环,其中输出打印以下内容: "你的猜测必须是整数" “输入您的猜测:您的猜测必须是整数。” “输入您的

  • 下面的代码询问用户他/她想要多少个赛车手。