请问各位大虾,这个小例子运行的结果为什么是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);
}
}

解决方案 »

  1.   

    因为i永远大于0
    你的是个死循环最后cpu抗不住了,给你个0应付一下
      

  2.   

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

  3.   

    输出i的值看看不就知道了吗,
    hjd1056() 说的正确
     i= -2147483647
      

  4.   

    下面是临界时的状态:
    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递增值
    楼主可以试试.
      

  5.   

    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()  你写的这个 不适合现在的楼主看; 简化点比较好 
           
          拙见。
      

  6.   

    int i值到了上界,溢出变成负数
    从而停下来但是恰巧这个时候sum为零(这种概率非常小)
    所以打印的是零