谁能分析一下 这java程序的 执行结果 谢谢 
public class Test
{
public static void main(String[] args)
{
int n = 4;
int k, fact = 1;

for(k = n; k >= 1; k++)
{
fact *= k;
}

System.out.println(n + "!=" + fact);
}
}为什么结果是 4!=0 这个 求解 谢谢

解决方案 »

  1.   

    你的死循环把fact的值不断的乘,最后超过了int的最大值然后就变0了
      

  2.   

    你的程序一直在for循环执行,当达到int的最大值2147483648,继续执行就会变成-2147483648,然后继续执行就到0了,所以最后面fact的值为0,这是由int所表示的范围决定的。你可以执行下面的程序,就会明白了:
    public class Test4 {
    public static void main(String[] args) {
    int n = 4;
    int k, fact = 1; for (k = n; k >= 1; k++) {
    System.out.println(k + "-------------");
    fact *= k;
    System.out.println(fact);
    if (k == 50) {
    break;
    }
    }
    System.out.println(n + "!=" + fact);
    }
    }
      

  3.   

    这是一个死循环啊,自己在for循环里面打印fact看下就知道了
      

  4.   

    LZ,你这直接死循环了,n=4,你的k=n,然后条件是k>=1,你这永远都成立,后面还一个k++,越来越大,
    最后你乘法之后,超过了int的最大范围了。所以根据你的 fact的类型,默认就为0了。
      

  5.   

    谢谢 各位 很感谢啊 没想到这么快就回复我  答案跟我之前想的差不多  我想我是在 fact *= k;产生了疑惑
    我不清楚fact变得超过int能表示的最大范围会怎么样  你们的解释我很感谢  谢谢各位  我想具体的了解一下细节 请问有什么参考资料吗  谢谢 能不能提供一个参考资料的地址或者书籍  谢谢了
      

  6.   

    这儿是一个死循环超出int的取值范围,就成为0了;
    你的for()循环写的不合适for(初始值;循环条件;运算表达式)
    你可以这样改,就实现了,可以这样改代码,你就明白了:public class ForTest
    {
    public static void main(String[] args)
    {
    int n = 4;
    int k, fact = 1;for(k = 1; k <=n; k++)//或者改成for (k = n; k >= 1; k--)
    {
    fact *= k;
    }
    System.out.println(fact);System.out.println(n + "!=" + fact);
    }
    }
      

  7.   

    对了,楼上说的都对了,我验证了一下,开始我还看错,原因就是变成无穷大了,所以在java中int类型是无法表达的