java - 为什么我收到 java.lang.ArithmeticException :/by zero?

标签 java greenfoot

我是java初学者,我生成随机和的代码抛出了一个奇怪的异常......

    public void randomRekensom(int n)
{

    switch(n) {
        case 1: this.max = 100;
                break;
        case 2: this.max = 150;
                break;
        case 3: this.max = 200;
                break;
}
    getal1= (int) Math.sqrt(max);
    getal2= (int) Math.sqrt(max);

    operator=ThreadLocalRandom.current().nextInt(1, 4 + 1);
    switch(operator) {
        case 1: antwoord=(this.getal1+this.getal2);
                operatorTeken=" + ";
                break;
        case 2: antwoord=(this.getal1-this.getal2);
                operatorTeken=" - ";
                break;
        case 3: antwoord=(this.getal1/this.getal2);
                operatorTeken=" / ";
                break;
        case 4: antwoord=(this.getal1*this.getal2);
                operatorTeken=" * ";
                break;
}

}

也许是因为我今天盯着屏幕看太多了,但我不知道为什么会收到此错误。

提前致谢!

最佳答案

您只设置this.max如果n是 1、2 或 3。如果您之前没有将其设置为其他值,this.max == 0 ,所以getal2 == Math.sqrt(0) == 0 .

您应该添加 default案例给您switch处理 n 的所有其他值的语句。简单地抛出 IllegalArgumentException 可能是合适的。 .

switch(n) {
    case 1: this.max = 100;
            break;
    case 2: this.max = 150;
            break;
    case 3: this.max = 200;
            break;
    default: throw new IllegalArgumentException("Not 1, 2 or 3");
}

或者您可能有一个合理的默认值,您可以将其设置为 this.max .

关于java - 为什么我收到 java.lang.ArithmeticException :/by zero?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36295950/

相关文章:

java - 使用 Mock 框架编写单元测试的最佳实践是什么

java - Android DownloadManager 在某些情况下不起作用

java - 无法运行 jacoco 代码覆盖工具

java - 声明了静态数组但方法无法工作

java - Greenfoot 我可以在构造函数中创建一个 Actor 实例吗?

java - 如何使用 while() 循环在 vertx 上运行无限循环

Java Swing 在运行时从 POJO 生成 JTable

java - 制作一种将对象随机放置在屏幕上的方法。

java - 在两台电脑上运行游戏?