Calcolo Pi a un numero specifico di termini in Java?


Mi è stato dato il seguente incarico e il mio codice non funziona. La domanda è:

Usando un ciclo while o do-while, scrivi un programma per calcolare PI usando la seguente equazione: PI = 3 + 4/(2*3*4) - 4/(4*5*6) + 4/(6*7*8) - 4/(8*9*10) + ... Consentire all'utente di specificare il numero di termini (5 termini sono mostrati) da utilizzare nel calcolo. Ogni volta intorno al ciclo solo un termine in più dovrebbe essere aggiunto alla stima per PI.

Questo è il codice che ho finora: importa java.util.Scanner; importa javax.swing.OPzionePano; importa java.lang.Matematica;

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);
    }

}

Non riesco a capire perché il codice non restituirà il valore giusto per 3 o più termini di Pi, continua a dare lo stesso valore ogni volta.

EDIT: ho rimosso il punto e virgola dalla fine dell'istruzione while e ora il codice restituisce il valore 3.0 per qualsiasi numero di termini immessi dall'utente. Dove sto sbagliando?

EDIT2: Condizione rimossa dal ciclo while. Le risposte sono più vicine all'essere corrette, ma ancora non abbastanza accurate. Come posso correggere questo per darmi la risposta giusta?

Author: user2928362, 2013-10-28

1 answers

Il punto e virgola alla fine dell'istruzione while viene valutato indipendentemente causando l'esecuzione incondizionata del corpo del ciclo in modo che il risultato sia sempre lo stesso

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

Inoltre il ciclo termina dopo la prima iterazione. Rimuovi la prima espressione dal ciclo, cioè

while (count <= termNum) {
 3
Author: Reimeus, 2013-10-28 14:35:23