日期:2014-05-20  浏览次数:20797 次

一个关于DoWhile循环的小小例子!
请问各位大虾,这个小例子运行的结果为什么是0呢?
有点不明白!

public   class   DoWhileDemo
{
public   static   void   main(String   args[])
{
int   i,sum;
sum=0;
i=1;
do
{
sum+=i;
i+=2;
}
while(i> 0);
System.out.println( "sum= "+sum);
}
}

------解决方案--------------------
这不是一个死循环。
当i的值超过int 所能表示的最大正值时,便会溢出;这时,i 为负值,程序输出结果。
至于,为什么sum 的值会是0 ,我想也应该从这方面考虑吧。

------解决方案--------------------
输出i的值看看不就知道了吗,
hjd1056() 说的正确
i= -2147483647
------解决方案--------------------
下面是临界时的状态:
i:
十进制:2147483647
二进制:0111,1111,1111,1111,1111,1111,1111,1111
sum:
十进制:-2147483647
二进制:1000,0000,0000,0000,0000,0000,0000,0001
i+2后,其值溢出,sum=sum+i
所以sum为0;

对你的程序改进了一下:

public class C{
public static void bin(int num) {
int size = 32;
char bits[] = new char[size];
for (int i = size-1; i > = 0; --i) {
bits[i] = (num & 1) == 0 ? '0 ' : '1 ';
num > > > = 1;
}
for(int i = 0; i < bits.length; i++){
if((i%4 == 0) && (i!=0)) {
System.out.print( ", ");
}
System.out.print(bits[i]);
}
System.out.println();
}

public static void main(String[] args) {
int i,sum;
sum=0;
i=1;
int d = 2;
do
{
sum+=i;
i += d;
if((i <= Integer.MAX_VALUE) && (i > Integer.MAX_VALUE - d)) {
System.out.println( "i: ");
System.out.println( "十进制: " + i);
System.out.print( "二进制: ");
bin(i);
System.out.println( "sum: ");
System.out.println( "十进制: " + sum);
System.out.print( "二进制: ");
bin(sum);
}
}
while(i> 0);
System.out.println( "最后的sum: ");
System.out.println( "十进制: " + sum);
System.out.print( "二进制: ");
bin(sum);
}
}

bin用来打印二进制
d是i递增值
楼主可以试试.
------解决方案--------------------
public class DoWhileDemo
{
public static void main(String args[])
{
int i,sum;
sum=0;
i=1;
do
{
sum+=i;
i+=2;
}
while(i> 0);
System.out.println( "sum= "+sum);
}
}


while(i> 0)

你把他设一个大于0的值吧 这个因该是你自己练练手写的吧;



do
{
}
while(i <10)
{
}

这样 就可以啦, 我觉得 zephyr_cc() 你写的这个 不适合现在的楼主看; 简化点比较好

拙见。
------解决方案--------------------
int i值到了上界,溢出变成负数
从而停下来

但是恰巧这个时候sum为零(这种概率非常小)
所以打印的是零