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