java 中的阶乘使用 for 循环

factorial in java using for loop

 /* this program 
  * finds the factorial for any number
  */

public class forLoop1{

    public static void main(int x){    
        int init; 
        for( init = x; init < 2; init--){
            int finalint = init * --init; 
            System.out.println(finalint); 
        }
    }
}

^^ 这个程序没有输出,谁能想到这里出了什么问题?任何帮助将不胜感激,谢谢!

你在 -- 嗯 -- 几乎每一行都有问题。查看下面的代码并使用 n = 4(或任何其他数字)跟踪每个步骤。

public class forLoop1{
  public static void main(String[] args){    
    // n is the number whose factorial is to be calculated
    int n = 10; 
    int factorial = 1;
    for(int i = n; i >= 2; i--){
      factorial = factorial * i;
    }
    System.out.println(factorial);
  }
}
import java.util.Scanner;

public class forLoop1{

 public static void main(String args[])
  { 
  System.out.println("Enter a number greater than zero.");
  Scanner in = new Scanner(System.in);

  int n = in.nextInt();
  in.close();

  int fact = 1;
  for (n = n; n>=2; n--)
    fact *= n;

  System.out.println("Factorial of "+n+" is = "+fact);
  }
}

这应该有效。 扫描仪 将读取用户输入。

在您的代码中,只有当 init 小于 2 时才会执行循环。

以下是对您代码中错误的解释:

public static void main(int x){ //Should be public static void main(String[] args)       
    int init; 
    for( init = x; init < 2; init--){ //Should be init >= 2
        int finalint = init * --init; //Possibly should be init * (init - 1)
                                      //In each iteration of the loop,      
                                      //finalint will be overwritten
    System.out.println(finalint); //This line is fine.
}

如果您想使用命令行参数,则将 String 解析为 int

public static void main(String args[]) {
    int n=Integer.parseInt(args[0]);
    int fac = 1;
    for(int i = n; i >= 2; i--) {
        fac = fac * i;
    }
    System.out.println(fac);
}

您应该 运行 此程序作为 java forLoop1 5 输入 5 例如。

感谢您的回答! Arjun,太棒了,你的逻辑完美无缺 不过有几件事: 我不需要 (String[] args) 部分;我之前也提到过,因为我的 IDE 本身接受 x 值的输入。所以这是我最后使用的代码:

  /* Factorial 
   * program
   */


public class forLoop2 {

    public void main(long x) { // long x is correct, as my IDE takes input through this 
        long fact = 1; 

        for( x = x; x >= 2; x--) 
            fact = fact * x; 

        System.out.println(fact); 
    }
}
import java.util.*;

public class forLoop1{
    public static void main(String args[]){ 

        Scanner input=new Scanner(System.in);
        System.out.println("Enter the number:");
        int x=input.nextInt();

        int finalint=1;
        for( int init=1;init<=x;init++){
            finalint=finalint*init;
        }
    }
}