1

次の割り当てが与えられましたが、コードが機能しません。質問は:

while または do-while ループを使用して、次の式を使用して PI を計算するプログラムを作成します。 PI = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6* 7*8) - 4/(8*9*10) + ... 計算で使用する項の数 (5 つの項が示されています) をユーザーが指定できるようにします。ループを回るたびに、PI の推定値に項を 1 つだけ追加する必要があります。

これは私がこれまでに持っているコードです: import java.util.Scanner; import javax.swing.JOptionPane; java.lang.Math をインポートします。

public class LabFriday25 {

public static void main(String[] args) {
    String termInput = JOptionPane.showInputDialog(null, "How many terms of 
                                 PI would you like?");
    Scanner termScan = new Scanner (termInput);

        double termNum = termScan.nextDouble();
        double pi = 3;
        int count = 0;
        double firstMul = 2;
        double secMul = 3;
        double thirdMul = 4;
        double totalMul = 0;

                while (count<= termNum)
                {
                    if (termNum==1)
                    {
                        pi = 3.0;
                    }

                    else if (count%2==0)
                    {
                        totalMul= (4/(firstMul*secMul*thirdMul));
                    }

                    else
                    { 

                       totalMul = -(4/((firstMul+2)*(secMul+2)*(thirdMul+2)));
                    }
                pi = pi + (totalMul);

                firstMul = firstMul + 2;
                secMul = secMul + 2;
                thirdMul = thirdMul + 2;
                //totalMul = (-1)*totalMul;
                count++;
            }


        JOptionPane.showMessageDialog(null, "The value of pi in " + termNum + " terms is : " + pi);
    }

}

コードが Pi の 3 項以上に対して正しい値を返さない理由がわかりません。毎回同じ値を返し続けます。

編集: while ステートメントの末尾からセミコロンを削除したところ、コードはユーザーが入力した任意の数の用語に対して値 3.0 を返しています。どこが間違っていますか?

EDIT2: while ループから条件を削除しました。正解に近づいていますが、まだ十分に正確ではありません。これを修正して正しい答えを得るにはどうすればよいですか?

4

1 に答える 1

3

ステートメントの最後のセミコロンwhileは独立して評価され、ループの本体が無条件に実行されるため、結果は常に同じになります。

while (count > 0 && count <= termNum);
                                     ^

さらに、ループは最初の繰り返しの後に終了しています。ループから最初の式を削除します。つまり、

while (count <= termNum) {
于 2013-10-28T14:17:05.790 に答える