使用for循环的java中的factorial

时间:2015-08-29 11:58:44

标签: java loops for-loop factorial

 /* 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); 
        }
    }
}

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

5 个答案:

答案 0 :(得分:1)

如果要使用命令行参数,则将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运行。

答案 1 :(得分:0)

你有问题 - 嗯 - 几乎每一行。查看下面的代码并使用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);
  }
}

答案 2 :(得分:0)

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.
}

答案 3 :(得分:0)

感谢您的回答! 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); 
    }
}

答案 4 :(得分:0)

public override bool CanConvert(Type objectType)
{
    return typeof(DateTime?).IsAssignableFrom(objectType);
}