热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用于阶乘不正确输出的Java程序

如何解决《用于阶乘不正确输出的Java程序》经验,为你挑选了2个好方法。

我在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数并变为负数.


推荐阅读
author-avatar
施华洛卉子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有