本帖最后由 yufeiant 于 2012-6-30 17:30 编辑
在你的程序编写中,你 的num的输出语句是在while循环之外的,在循环中num的值是如何被改变的在你运行程序的时候你是看不出来,所以光读程序更本就读不出来,
在你的程序中加了一句话
class Demo
{
public static void main(String [] args)
{
add();
}
public static void add()
{
double num=1.0;
int x =1;
int y=1;
while(x<=20)
{
for(int i=1;i<=x;i++)
{
y*=i;
}
System.out.println(x+"+"+y);//这里给你加了一句话,看了一下在while循环之前y的值是如何变化的,
num +=1/y;//这里怎么报了除0错误!求大师指点!
x++;
}
System.out.println(num);
}
}
下面是运算的结果
1+1
2+2
3+12
4+288
5+34560
6+24883200
7+857276416
8+-511705088
9+1073741824//我们可以在这里看到,在for循环x是9的时候,y的值已经高达1073741824,当x等于10的时候,y的数值是那个数的平方,远远超出了int的取值范围,所以就变为了0
10+0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Demo.add(Demo.java:24)
at Demo.main(Demo.java:7)
请按任意键继续. . .
下面哥们给你用2禁制来玩一下 这次就好理解了
int型取值最大是这个吧2^31-1,如果打2^31的数值是这个214748368,转换成二进制就是这个样子了
1 0000 0000 0000 0000 0000 0000 0000 0000超出了32位,前面加了一个1,但是int只取32位,所以就是0了,
那刚才那个数远远的大于了int的取值,所以就变为了0,所以就报错了
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\493322470\QQ\WinTemp\RichOle\BC`BV%RHN1~ZX8F6T{$Q5IF.jpg
file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\493322470\QQ\WinTemp\RichOle\BC`BV%RHN1~ZX8F6T{$Q5IF.jpg
|