3

我应该创建一个程序,询问用户一个数字并获取该数字的阶乘,然后询问他们是否想做另一个阶乘(Y,N)。

它应该像这样工作:

  • 输入一个数字以乘以:4
  • 4!= 24
  • 做另一个阶乘(Y,N)?是
  • 重复直到输入 N

我的输出是这样的:

  • 输入一个数字以求阶乘:
  • “做另一个阶乘?(Y,N)?”
  • 4!= 1,无论我输入 Y 还是 N。

    这是我的代码:

    import java.util.Scanner;
    public class factorial
    {
         public static void main ( String [] args )
         {
         Scanner input = new Scanner(System.in);
         System.out.print("Enter a number you want to take the factorial of: ");
         int num = input.nextInt();
         int fact = 1;
         System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact));
     } 
         public static int Factorial(int num, int fact)
         {
             Scanner input = new Scanner(System.in);
             char foo;
    
              System.out.print("Do another factorial (Y,N)?");
              foo = input.next().charAt(0);
    
                 for (int i = 1; i >= num; i++)
                 {   
                     fact *= i;
                     if (foo == 'Y')
                     {
                         System.out.print("Do another factorial (Y,N)?");
                         foo = input.next().charAt(0);
                         continue;
                     }
                     else
                     {
                         break;
                     }
                 }
                 return fact;  
    
         }
    
    }
    

更改后:

import java.util.Scanner;
public class factorial
{
    public static void main ( String [] args )
    {
      Scanner input = new Scanner(System.in);

        System.out.print("Enter a number you want to take the factorial of: ");
        int num = input.nextInt();

        int fact = 1;

        System.out.printf("%d! = %d\n ", num, Factorial(num, fact));

        System.out.print("Do another factorial (Y,N)? ");
        char  foo = input.next().charAt(0);

        while (foo != 'N')
        {
            System.out.print("Do another factorial (Y,N)? ");
            foo = input.next().charAt(0);

        System.out.print("Enter a number you want to take the factorial of: ");
        num = input.nextInt();

        System.out.printf("%d! = %d\n", num, Factorial(num, fact));
    }
}
    public static int Factorial(int num, int fact)
    {
        for (int i = 1; i <= num; i++)
            {   
                fact *= i;
            }
            return fact; 
    }

}

输出还是有一些问题:

  • 输入一个数字以乘以:4
  • 4!= 24
  • 做另一个阶乘(Y,N)?是
  • 做另一个阶乘(Y,N)?是
  • 输入一个数字以乘以:4
  • 4!= 24
  • 做另一个阶乘(Y,N)?ñ
  • 输入一个数字以求阶乘:
4

5 回答 5

3

您计算阶乘,但从不打印它:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact));

应该

System.out.printf("%d! = %d\n ", num, Factorial(num, fact));

此外,您的Factorial函数不使用fact参数,因此您应该删除它,并在函数内声明一个局部变量。

最后,询问“你想要另一个阶乘”应该在顶层完成,而不是在Factorial函数内部。您的代码也没有使用用户输入的字符:您需要一个循环来检查用户的输入,并在输入时继续Y

于 2013-04-04T10:08:40.003 回答
1

这是错误:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact))

你的输出不是真的Factorial(num, fact)但是fact,这应该是:

System.out.printf("%d! = %d\n ", num, Factorial(num, fact))
于 2013-04-04T10:08:22.770 回答
0

删除以下代码行:

扫描仪输入 = 新扫描仪(System.in);System.out.print("做另一个阶乘 (Y,N)?");

从阶乘法。

于 2013-04-04T10:08:53.263 回答
0

你应该重构你的代码如下:

  • 应该有一个方法接受int并返回它的阶乘,并且什么也不做。

  • 所有的输入/输出,以及“做另一个阶乘?” 循环,应该在main().

这将使逻辑更容易正确。

于 2013-04-04T10:11:27.450 回答
0

这将对您有所帮助。

public static void main ( String [] args )
     {
     String yesno ="Y";
     while(yesno.equalsIgnoreCase("y"))
     {
         Scanner input = new Scanner(System.in);
         System.out.print("Enter a number you want to take the factorial of: ");
         int num = input.nextInt();
         System.out.printf("%d! = %d\n ",num,fact(num));
         System.out.print("Do another factorial (Y,N)?");
         Scanner inputKey = new Scanner(System.in);
         yesno = inputKey.nextLine();

     }
     }

这是阶乘函数:

public static int fact(int num)
    {
        if(num<=1)
        {
            return 1;

        }else{
            return (num*(fact(num-1))); 
        }
    }
于 2013-04-04T10:44:05.727 回答