作者:施华洛卉子 | 来源:互联网 | 2023-01-20 10:09
我在Eclipse IDE中执行下面的Java代码.
public class Programs {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i, num, n;
n = 6;
// num=n-1;
for (i = 1; i <= n - 1; i++) {
n = n * i;
}
System.out.println("Factorial of the declared number is" + " " + n);
}
}
它将输出显示为-1420957696.如果我取消注释并在for循环中使用"num"变量,代码工作正常.我认为,对于每次迭代,与价值n
相比,变化的价值逐渐变得令人难以置信i
.相同的代码在Vbscript中工作正常(见下文).有人可以解释这个区别吗?
Option Explicit
Dim i, num
num = InputBox("enter a number")
For i=1 To num-1
num = num * i
Next
MsgBox "The factorial of entered number is: " & num, 3, "Program for factorial"
Bathsheba..
6
Java的:
n
会变得相当大 i
.
因此i <= n - 1
永远都是true
,直到你的n
溢出和包裹到负面.
一个修复方法是用来num
保存原始值n
,并i <= num - 1
用作停止条件.
Vbscript中:
在各种基础知识(例如Vbscript,VBA)中,num-1
在循环开始时有效地计算,并进一步调整以num
对停止条件没有影响.您可以通过运行明确地看到这一点
Dim j
Dim i
j = 10
For i = 1 To j
WScript.Echo i
j = 1 'has no effect on the stopping condition.
Next
小智..
5
检查forloop i <= n-1中的每次迭代.因为n一直在增加,所以for循环将一直运行,直到n达到最大可能的INTEGER数并变为负数.
1> Bathsheba..:
Java的:
n
会变得相当大 i
.
因此i <= n - 1
永远都是true
,直到你的n
溢出和包裹到负面.
一个修复方法是用来num
保存原始值n
,并i <= num - 1
用作停止条件.
Vbscript中:
在各种基础知识(例如Vbscript,VBA)中,num-1
在循环开始时有效地计算,并进一步调整以num
对停止条件没有影响.您可以通过运行明确地看到这一点
Dim j
Dim i
j = 10
For i = 1 To j
WScript.Echo i
j = 1 'has no effect on the stopping condition.
Next
2> 小智..:
检查forloop i <= n-1中的每次迭代.因为n一直在增加,所以for循环将一直运行,直到n达到最大可能的INTEGER数并变为负数.