【问题标题】:How can I solve an infinity error using try-catch blocks?如何使用 try-catch 块解决无穷大错误?
【发布时间】:2019-10-30 04:33:07
【问题描述】:

我正在尝试调试我的程序,它可以捕获整数值之外的所有错误并使用 try-catch 进行报告。当我输入一个字符串时,我得到了无限环回,不知道如何停止它。

import java.util.Scanner;
import java.lang.ArithmeticException;
import java.util.InputMismatchException;

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

        int num1 = 0;
        int num2 = 0;
        double ratio;
        Scanner scan = new Scanner(System.in);
        int x = 1; // using variable for do-while loop

        do { // re-runs code if input error
            try {
                System.out.println("Let's divide some numbers!");
                System.out.print("Enter your first number: ");
                num1 = scan.nextInt();
                System.out.print("Enter your second number: ");
                num2 = scan.nextInt();
                ratio = ((double) num1 / num2);
                System.out.println("Eureka!  the answer is " + ratio);
                x = 2;
            } catch (ArithmeticException e) {
                System.out.println("No division by zero!");
            } catch (Exception e) {
                System.out.println("This won't work. Try again.");
            }

        } while (x == 1);
    }
}

输出: 让我们划分一些数字! 输入您的第一个整数:Y 输入错误:null让我们除以一些数字! 输入您的第一个整数: 输入错误:null 让我们除以一些数字! 输入您的第一个整数:输入错误:null让我们除以一些数字!

【问题讨论】:

  • 通过添加break; 或更新x
  • 这行得通,但我必须继续要求输入,直到我得到正确的输入。如果我输入一个字符串,程序就会运行,我必须强制停止。
  • @ArvindKumarAvinash 感谢您的修改。尽管在将文本输入 int 变量时出现编译错误,但这很有帮助。我会在这方面做更多的工作。

标签: java math try-catch


【解决方案1】:

你需要类似的东西吗:

import java.util.Scanner;

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

        int num1 = 0;
        int num2 = 0;
        double ratio;
        Scanner scan = new Scanner(System.in);
        int x = 1; // using variable for do-while loop

        do { // re-runs code if input error
            try {
                System.out.println("Let's divide some numbers!");
                System.out.print("Enter your first number: ");
                num1 = scan.nextInt();
                System.out.print("Enter your second number: ");
                num2 = scan.nextInt();
                if (num2 != 0) {
                    ratio = ((double) num1 / num2);
                    System.out.println("Eureka!  the answer is " + ratio);
                } else {
                    System.out.println("The second number should not be 0");
                }
            } catch (Exception e) {
                System.out.println("This won't work. Try again.");
                x = 2;
            }
        } while (x == 1);
    }
}

示例运行:

Let's divide some numbers!
Enter your first number: 10
Enter your second number: 5
Eureka!  the answer is 2.0
Let's divide some numbers!
Enter your first number: 12
Enter your second number: 0
The second number should not be 0
Let's divide some numbers!
Enter your first number: 23
Enter your second number: 5
Eureka!  the answer is 4.6
Let's divide some numbers!
Enter your first number: 50
Enter your second number: abc
This won't work. Try again.

此时程序将停止执行。

更新:我刚刚看到您的评论,即使输入非法(例如 abc),您也不希望您的程序停止。为此,您需要做的就是再次实例化Scanner 对象。下面给出的是完整的示例运行程序:

import java.util.Scanner;

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

        int num1 = 0;
        int num2 = 0;
        double ratio;
        Scanner scan = new Scanner(System.in);
        int x = 1; // using variable for do-while loop

        do { // re-runs code if input error
            try {
                System.out.println("Let's divide some numbers!");
                System.out.print("Enter your first number: ");
                num1 = scan.nextInt();
                System.out.print("Enter your second number: ");
                num2 = scan.nextInt();
                if (num2 != 0) {
                    ratio = ((double) num1 / num2);
                    System.out.println("Eureka!  the answer is " + ratio);
                } else {
                    System.out.println("The second number should not be 0");
                }
            } catch (Exception e) {
                System.out.println("This won't work. Try again.");
                scan = new Scanner(System.in);
            }
        } while (x == 1);
    }
}

示例运行:

Let's divide some numbers!
Enter your first number: 10
Enter your second number: 5
Eureka!  the answer is 2.0
Let's divide some numbers!
Enter your first number: 10
Enter your second number: 0
The second number should not be 0
Let's divide some numbers!
Enter your first number: 10
Enter your second number: abc
This won't work. Try again.
Let's divide some numbers!
Enter your first number: 10
Enter your second number: 5
Eureka!  the answer is 2.0
Let's divide some numbers!
Enter your first number: 

我希望,这可以满足您的要求。如果您还需要其他东西,请随时告诉我。

现在,您甚至可以删除冗余变量x,如下所示:

import java.util.Scanner;

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

        int num1 = 0;
        int num2 = 0;
        double ratio;
        Scanner scan = new Scanner(System.in);

        while (true) { 
            try {
                System.out.println("Let's divide some numbers!");
                System.out.print("Enter your first number: ");
                num1 = scan.nextInt();
                System.out.print("Enter your second number: ");
                num2 = scan.nextInt();
                if (num2 != 0) {
                    ratio = ((double) num1 / num2);
                    System.out.println("Eureka!  the answer is " + ratio);
                } else {
                    System.out.println("The second number should not be 0");
                }
            } catch (Exception e) {
                System.out.println("This won't work. Try again.");
                // re-runs code if input error
                scan = new Scanner(System.in);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多