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

求这个java 程序的执行结果 谢谢
谁能分析一下 这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 这个 求解 谢谢
------最佳解决方案--------------------
你的死循环把fact的值不断的乘,最后超过了int的最大值然后就变0了
------其他解决方案--------------------
你的程序一直在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);
}
}


------其他解决方案--------------------
引用:
谁能分析一下 这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(……

这儿是一个死循环超出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);
}
}


------其他解决方案--------------------
那4能等于0吗?
------其他解决方案--------------------
你的循环是个死循环吧
------其他解决方案--------------------
引用:
你的死循环把fact的值不断的乘,最后超过了int的最大值然后就变0了

没错~!
------其他解决方案--------------------
引用:
你的循环是个死循环吧

这是一个死循环啊,自己在for循环里面打印fact看下就知道了
------其他解决方案--------------------
LZ,你这直接死循环了,n=4,你的k=n,然后条件是k>=1,你这永远都成立,后面还一个k++,越来越大,
最后你乘法之后,超过了int的最大范围了。所以根据你的 fact的类型,默认就为0了。
------其他解决方案--------------------
把k++ 换成 k--试试
------其他解决方案--------------------
跟你计算器上一样,一个数乘的次数多了,就变成0了
------其他解决方案--------------------
谢谢 各位 很感谢啊 没想到这么快就回复我  答案跟我之前想的差不多  我想我是在 fact *= k;产生了疑惑
我不清楚fact变得超过int能表示的最大范围会怎么样  你们的解释我很感谢  谢谢各位  我想具体的了解一下细节 请问有什么参考资料吗  谢谢 能不能提供一个参考资料的地址或者书籍  谢谢了