我的完美数字程序出现错误“线程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");
}
}
答案 0 :(得分:0)
调用while (rem != 0)
时,如果调用rem == 1
,则将其递减为0,因此不能除。
因此,将while (rem != 0)
更改为while (rem > 1)
,它应该可以工作。
答案 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");
}
}