“线程主异常/零例外”错误

时间:2018-10-12 12:41:35

标签: java

我的完美数字程序出现错误“线程main中的异常/零”,有人可以帮助我找到错误

public static void main(String[] args) {
    int num = 6, sum = 0, rem = num;
    while (rem != 0) {
        rem--;
        if (num % rem == 0) {
            sum = sum + rem;
        }
    }
    if (sum == num) {
        System.out.println("It is a perfect number");
    } else {
        System.out.println("It is not a perfect number");
    }
}

3 个答案:

答案 0 :(得分:0)

调用while (rem != 0)时,如果调用rem == 1,则将其递减为0,因此不能除。

因此,将while (rem != 0)更改为while (rem > 1),它应该可以工作。

Example

答案 1 :(得分:0)

如果您知道这个json_data = json.dumps(request.body) 符号可以提醒您将左数除以右数,那么您应该检查一下右数是否为零会引发此错误,因此在程序中%变量会在您发现提醒之前减小,因为每次在循环结束时都会发生此错误,因此可以通过将rem语句的位置更改为循环结束来解决此问题:-

rem--;

因此,这次,当while (rem != 0) { if (num % rem == 0) { sum = sum + rem; } rem--; } 的值为rem时,循环不会重复。

答案 2 :(得分:0)

在您的代码中,第6次循环时,rem变量值为1,因此while循环条件将变为true。

在while循环内,余数变量减小到零值,并且代码(num%rem == 0)将导致除零错误,因为%operator从2个变量中查找余数,在当前情况下为红利是零。因此,代码将抛出除以零的异常。

将while循环条件更改为while(rem> 1)

在进行上述更改之后,您的代码如下所示。

public static void main(String[] args) {
        int num = 6, sum = 0, rem = num;
        while (rem > 1) {
            rem--;
            if (num % rem == 0) {
                sum = sum + rem;
            }
        }
        if (sum == num) {
            System.out.println("It is a perfect number");
        } else {
            System.out.println("It is not a perfect number");
        }
    }