【发布时间】:2020-02-24 01:22:27
【问题描述】:
当你运行下面的代码时
count值变为 -1,程序以除以零异常结束。当您取消注释
sysout时,它运行良好。不确定sysout有何不同。
public class HelloWorld{
public static void main(String []args){
int num = 1;
int count;
int sum;
int fact;
for(count=1,sum=0,fact=1;fact<=num;count=count+1){
//System.out.println("num:"+num+" fact:"+fact+" count:"+count+" sum:"+sum);
if(num%count==0){
fact = num/count;
sum = sum+fact;
System.out.println("num:"+num+" fact:"+fact+" count:"+count+" sum:"+sum);
}
}
}
}
输出:
num:1 事实:1 count:1 sum:1
num:1 事实:-1 计数:-1 sum:0
线程“主”java.lang.ArithmeticException 中的异常:/ 为零 在 HelloWorld.main(HelloWorld.java:14)
【问题讨论】:
-
你确定你显示的代码生成了这个输出吗?如果是这样,您可以启用第一个打印语句并重新生成输出吗?
-
我很确定这里发生的事情是你循环遍历所有 int 值。 1%1 为真,但 1%n 的所有其他值均为假。那是为了积极的价值观。一旦你溢出 int,我不相信 1%0 是零,所以你不要尝试打印。但是,我猜 1%-1 为零。 (我有一段时间没看过模数的正式定义,但我认为它是这样的。)底线是“如果”语句在零上不正确。然而,这并不能解释为什么 system.out.println() 会改变结果。
标签: java loops for-loop negative-number