Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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_Output_Factorial - Fatal编程技术网

Java阶乘输出

Java阶乘输出,java,output,factorial,Java,Output,Factorial,我应该创建一个程序,要求用户输入一个数字,并取该数字的阶乘,然后询问他们是否要进行另一个阶乘(Y,N) 它应该是这样工作的: 输入一个数字,取4的阶乘 4!=二十四 做另一个阶乘(Y,N)?Y 重复此操作,直到输入N 我的输出如下: 输入一个数字,取其阶乘: “做另一个阶乘吗?(Y,N)?” 4!=1无论我输入的是Y还是N 这是我的密码: import java.util.Scanner; public class factorial { public static void m

我应该创建一个程序,要求用户输入一个数字,并取该数字的阶乘,然后询问他们是否要进行另一个阶乘(Y,N)

它应该是这样工作的:

  • 输入一个数字,取4的阶乘
  • 4!=二十四
  • 做另一个阶乘(Y,N)?Y
  • 重复此操作,直到输入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; 
    }
import java.util.Scanner;
公共类阶乘
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
System.out.print(“输入一个你想取其阶乘的数字:”);
int num=input.nextInt();
int-fact=1;
System.out.printf(“%d!=%d\n”,num,阶乘(num,fact));
系统输出打印(“做另一个阶乘(Y,N)?”;
char foo=input.next().charAt(0);
而(foo!=“N”)
{
系统输出打印(“做另一个阶乘(Y,N)?”;
foo=input.next().charAt(0);
System.out.print(“输入一个你想取其阶乘的数字:”);
num=input.nextInt();
System.out.printf(“%d!=%d\n”,num,阶乘(num,fact));
}
}
公共静态整数阶乘(整数、整数事实)
{
对于(int i=1;i,以下是错误:

System.out.printf("%d! = %d\n ", num, fact, Factorial(num, fact))
您的输出不是真正的
阶乘(num,fact)
,而是
fact
,这应该是:

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

计算阶乘,但从不打印:

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

System.out.printf("%d! = %d\n ", num, Factorial(num, fact));
此外,
Factorial
函数没有使用
fact
参数,因此应该删除它,并在函数中声明一个局部变量


最后,询问“是否需要另一个阶乘”应该在顶层完成,而不是在
阶乘
函数中。您的代码也不使用用户输入的字符:您需要一个循环来检查用户的输入,并在输入
Y
时继续。删除下面的代码行:

扫描仪输入=新扫描仪(System.in); 系统输出打印(“做另一个阶乘(Y,N)?”


从阶乘方法。

您应该按照如下方式重构代码:

  • 应该有一个方法,它接受一个
    int
    并返回它的阶乘,而不做其他事情

  • 所有的输入/输出以及“Do other factorial?”循环都应该在
    main()
    中完成

这将使逻辑更容易正确。

这将对您有所帮助

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))); 
        }
    }
公共静态int事实(int num)
{

如果(numHow确切地说,我将如何实现一个循环来检查用户输入的是Y还是N,然后要求用户输入另一个数字?很抱歉,我对java非常陌生。我知道如何检查用户输入的是Y还是N,但现在我仍在想用户输入后如何再次进行阶乘计算Y@user1858350您可能需要编辑您的问题,并且把你的新代码放在一个单独的“更改后”块中。@ USE1858350,你几乎在那里:用“<代码> >(真)替换“<代码>”(FoO!=“N”)< /代码>,在用户进入<代码> Foo后,在循环内进行检查,并添加<代码>(Foo==n));< /C> >退出中间循环。“做另一个阶乘?”两次如果我输入Y,那么将重复,如果我输入N,它将要求我输入一个数字,进行计算并退出。也许我把if语句放错了位置?