Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的阶乘循环分析_Java_Loops_For Loop_Logic - Fatal编程技术网

Java中的阶乘循环分析

Java中的阶乘循环分析,java,loops,for-loop,logic,Java,Loops,For Loop,Logic,考虑以下代码: int number; double factorial = 1.0; for(int i=2; i<=5; i++) { factorial *=i; System.out.println(number + "! = " + factorial ); } 我知道从2点开始到5点 factorial *= i; 相当于: factorial = factorial * i; 比如说,factorial是1.0,i是2: 那么演算将是: factori

考虑以下代码:

int number;
double factorial = 1.0;

for(int i=2; i<=5; i++)
{
    factorial *=i;
    System.out.println(number + "! = " + factorial );
}
我知道从2点开始到5点

factorial *= i;
相当于:

factorial = factorial * i;
比如说,
factorial
1.0
i
2

那么演算将是:

factorial = 1.0 * 2

等等,直到循环结束。

我认为您希望使用
long
(而不是
double
,因为您使用了
double
,所以您得到了浮点类型)。阶乘通常是整型的。大概

long factorial = 1;
for (int i = 2; i <= 5; i++) {
    factorial *= i;
    System.out.println(i + "! = " + factorial);
}
表示阶乘=i*阶乘

因子变量范围是在循环之外的继电器,所以它不会在每次循环迭代时重置

所以当i=2时,时间阶乘=2.0

当i=3时,上述计算的时间阶乘值为2.0,因此阶乘=2.0*3,即6

当i=4时,时间阶乘=6*4=24.0

当i=5时,时间阶乘=24*5=120.0
  • 1*2=2
  • 2*3=6
  • 6*4=24
  • 24*5=120
  • 我想,输出是正确的

    1,2,6,24是在先前迭代期间存储在阶乘var中的结果

    2,3,4,5表示回路i值

    整数;
    
    int number;
    
    
    for(int i=2; i<=5; i++)
    {
      double factorial = 1.0;
      factorial *=i;
      System.out.println(number + "! = " + factorial );
    }
    

    对于(int i=2;问题不清楚,但你看到2.0而不是2的原因是因为阶乘是双精度的,而不是整数。默认情况下,它会这样打印出来。你知道阶乘是什么吗?你知道4!=24和5!=120吗?就像@ergonaut说的,这不是一个非常清楚的问题。编辑它来解决你关于相关变量的具体问题t代码,并显示完整的输出,而不是一个被截断的版本。我打算乘以一个double,但我还不明白为什么我得到了6.0/24.0/120.0,因为我知道1.0*2=2.0秒应该是1.0*3=3.0,但我得到了6.0为什么???对于其余的24.0和120.0,如何获得输出…?代码必须是编译错误。变量号未初始化..不错,但为什么我返回3=6.6,4=24.0,5=120.0?@ForlanAnWest当时的问题是什么?:)因为在循环的第一次迭代之后,“阶乘”变成2.0,在下一次迭代中,它就像2.0*3=6.0,这是根据factorial的数学定义,我打算乘以一个double,但我还不明白为什么我得到了6.0/24.0/120.0,因为我知道1.0*2=2.0秒应该是1.0*3=3.0,但是我得到了6.0,为什么??,还有其余的24.0和1200@ForlanAnWest不,第二个是2*3。第三个是4*3*2。阶乘取上一个的结果。即当i=2时,1.0*2=2.0,然后阶乘使用2.0到*到3,依此类推。
    2! = 2
    3! = 6
    4! = 24
    5! = 120
    
    factorial *=i; 
    
    int number;
    
    
    for(int i=2; i<=5; i++)
    {
      double factorial = 1.0;
      factorial *=i;
      System.out.println(number + "! = " + factorial );
    }
    
    int number;
    double factorial = 1.0;
    
    for(int i=2; i<=5; i++)
    {
    factorial *=i;
    System.out.println(number + "! = " + factorial );
    }