3

ユーザーに数値を尋ね、その数値の階乗を取り、別の階乗 (Y,N) を実行するかどうかを尋ねるプログラムを作成することになっています。

次のように動作するはずです:

  • 階乗を取る数値を入力してください: 4
  • 4!= 24
  • 別の階乗 (Y,N) を実行しますか? よ
  • N が入力されるまで繰り返す

私の出力は次のようなものです:

  • 階乗を取る数値を入力してください:
  • 「別の階乗をしますか? (Y,N)?」
  • 4!Y と N のどちらを入力しても = 1 です。

    これが私のコードです:

    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) を実行しますか? 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

これはあなたを助けるでしょう。

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 に答える
0

以下のコード行を削除します。

スキャナー入力 = new Scanner(System.in); System.out.print("別の階乗 (Y,N) を実行しますか?");

要因法から。

于 2013-04-04T10:08:53.263 に答える
0

次のようにコードをリファクタリングする必要があります。

  • intを取り、その階乗を返し、他に何もしないメソッドが必要です。

  • すべての入力/出力、および「別の階乗を実行しますか?」ループ、で行う必要がありますmain()

これにより、ロジックを正しく理解することが容易になります。

于 2013-04-04T10:11:27.450 に答える