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

java异常处理-以零除和以文本除方法

田仲卿
2023-03-14

我做java已经4个月了,所以我还是一个业余爱好者。只是想搞定一些hwk。我似乎找不到正确的技巧来让我的分母通过拒绝文本数据和零,同时保持循环错误消息来很好地发挥作用。另一个问题是,无论分子/分母是什么,我的商都是0.0。有很多问题,任何建议都很感谢。指示如下:

--这个程序接受用户输入的(int)分子和(int)分母,然后计算并显示(双)商。

--如果用户为分子输入的是文本而不是数字,则显示一条解释问题的错误消息,并使用户处于循环状态,直到输入正确的数据。

--如果用户为分母输入文本或零而不是数字,则显示一条错误消息,解释问题,并使用户处于循环状态,直到输入正确的数据。

--消息应该是关于问题的描述性的。

public static void main(String[] args) throws Exception {
    Scanner console = new Scanner(System.in);
    int n1 = 0; //number 1
    int n2 = 1; //number 2..
    double r = (double) n1 / n2; //quotient
    String n1Str = "Please enter a real number for the numerator";
    String n2Str = "Please enter a real number greater than zero for the denominator";
    String errMsg = "Please enter a real number.";
    String notZero = "Denominator cannot equal zero.";      // not all string msgs are used, just there in case i need them.

    try {
        n1 = getInteger(n1Str); // validates against alphabet
        if (hasNextInt()) {     // working
            n1 = console.nextInt();
        }
    } catch (InputMismatchException ime) {
    }

    try {
        n2 = getInteger2(n2Str); // trying to validate against alphabet & zero
        if (hasNextInt()) {     //  not working though... 
            n2 = console.nextInt();
        }
    } catch (InputMismatchException ime) {
    }
    System.out.println("Fraction result is " + r);
}   

public static int getInteger(String message) {
    Scanner console = new Scanner(System.in);
    int count = 0;
    boolean isValidInteger = false;
    do {
        System.out.println(message);
        if (console.hasNextInt()) {
            isValidInteger = true;
            count = console.nextInt();
        } else {
            console.nextLine();
        }
    } while (!isValidInteger);
    return count;
}

public static int getInteger2(String message) {
    Scanner console = new Scanner(System.in);
    int count = 0;
    boolean isValidInteger = false;

    do {
        System.out.println(message);
        if (console.nextInt() != 0 || console.hasNextInt()) { // validates against zero but 
            isValidInteger = true;              // can't get it to validate against text.
            count = console.nextInt();  //tried switching statements and using && but get thrown into endless loop
        }
    } while (!isValidInteger);
    return count;
}

private static boolean hasNextInt() {
    return false;
}
}

共有1个答案

谢奕
2023-03-14

您的代码有很多问题。

首先,您应该只有一个扫描器,它将在应用程序的整个生命周期中存在。不需要实例化多个扫描器。

public class SomeClass {

    private static Scanner console;

    public static void main(String[] args) throws Exception {

        console = new Scanner(System.in);

        (...)

        console.close();
    }
}

现在让我们看看有问题的getInteger2方法

如果输入是一个整数,您应该像对getInteger方法一样简单地验证。如果是,你处理它;否则,您将使用next()(而不是nextline())跳过它,因为您要跳过此扫描程序中的下一个完整令牌。

public static int getInteger2(String message) {
    int count = -1;

    boolean isValidInteger = false;

    do {
        System.out.println(message);

        if (console.hasNextInt()) {
            count = console.nextInt();

            if (count != 0) {
                isValidInteger = true;
            } else {
                System.out.println("Denominator cannot equal zero.");
            }
        } else {
            console.next();
        }
    } while (!isValidInteger);

    return count;
}

最后,您的商数总是被打印为0.0,因为您在输出它之前没有更新它的值:

r = (double) n1 / n2;
System.out.println("Fraction result is " + r);
 类似资料:
  • 参考第25行(我的for循环条件)。 循环工作得很好,直到我尝试将Digit的值转换为int,我不确定为什么这会导致循环的任何部分将某物除以零。我已经讨论了所有关于使用有理表达式的条件的可能性,不能推导出任何分母都为零的偶然性。无论输入什么数字,我都会得到这个错误。如果不是因为我的教授在一个测试用例中提供了一个数值超过了可以存储在int中的数值,我根本不会选择将number保存为double。该程

  • 问题内容: 我有一个I2C设备,需要两个输入:分母和分子。两者均被写入不同的地址,因此不进行实际计算()。问题在于,I2C器件上可能会发生被零除的情况,因此需要检查被零除的错误。理想情况下,如果除法是通过Java代码完成的,则将发生完全相同的事情。 目前,我已经绑定了一个用于进行除法运算的未使用变量,但是我担心它会被优化: 当然,有更好的方法! 问题答案: 你应该 不是 抛出一个Arithmeti

  • 问题内容: 它是否只是在每次除法后检查除数是否等于零(即使在JIT版代码中)? 我的意思是VM如何在不被OS杀死的情况下设法引发异常? 问题答案: 在一个Unix环境,在这种划分被零是通过主导,JVM将已安装的陷阱的信号处理程序,进而S上的。如果您对内部结构感兴趣,请参见例如 我认为OP提出的要求是基于这样一个事实,即直到/除非有处理程序到位,大多数进程都会在接收到此信号时采取默认操作,即终止操作

  • 结果只是显示无穷大,当我尝试除以0时,它不打印行。

  • 为什么这段代码不抛出?看一看: 我不知道!

  • 问题内容: 我需要以以下方式进行计算(旧版代码): 我想它可以在python-2.x中工作),但是在python-3.x中不工作(它返回错误)。 如何使其在python-3.x中工作? 编辑:错误消息(Python 3.6.3): 问题答案: 该文档指出: 如果和被赋予与输入的数组是1-d,相当于:: 那么,为什么会看到错误?举个简单的例子: 到现在为止还挺好。首先检查,结果为。该代码不会尝试进行