-1

このコードの断片に問題があります。これは、一部の計算機でnPrと呼ばれるものを計算するプログラムの一部です。エラーなしでコンパイルされますが、実行してn = 0に設定するたびに、一見無限のエラーメッセージのリストが表示されます。「エラー!」と印刷できないのはなぜですか。プログラムしたようにプログラムを終了しますか?

{
    System.out.print("n = ");
    int n = j.nextInt();
    System.out.print("r = ");
    int r = j.nextInt();
    long n_fact = factorial(n);
    if ( ( (n - r) <= 0 ) || (n <= 0) || (r < 0) )
    {
        System.out.println("Error!");
        System.exit(0);
    }
    else
    {
        long nr_fact = factorial(n - r);
        long nPr = n_fact / nr_fact;
        NumberFormat f = NumberFormat.getNumberInstance();
        System.out.println("nPr = " + f.format(nPr));
    }
}
4

2 に答える 2

2

factorial(n)かどうかを確認する前に電話をかけていますn > 0。行を移動します

long n_fact = factorial(n);

elseブロックの内側に。

于 2012-10-31T22:05:25.797 に答える
0

この行をelseブロック内に移動します。

    long n_fact = factorial(n);

トリガーされているため、上記の呼び出しの後にeven when n=0 or n < 0チェックn > 0しているため、これは望ましくありません。this(n <=0) がfactorial()メソッドで適切に処理されているかどうかは疑問です。

または、メソッドでチェックと処理をn行います。factorial(n)つまり、n=0 の場合は 1 を返し、n < 0 の場合はエラー (例外をスロー) を返します。

于 2012-10-31T22:06:35.027 に答える