2013-10-28 66 views
1

我已經得到了下面的任務,我的代碼無法工作。問題是:Pi計算在Java中的特定數量的術語?

使用一段時間或do-while循環,編寫一個程序來計算PI使用以下公式:PI = 3 + 4 /(2 * 3 * 4) - 4 /(4 * 5 * 6)+ 4 /(6 * 7 * 8) - 4 /(8 * 9 * 10)+ ...允許用戶指定計算中使用的術語的數量(顯示5個術語)。每循環一次,只有一個額外的項目應該被添加到PI的估計中。

這是我到目前爲止的代碼: import java.util.Scanner; import javax.swing.JOptionPane; import 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循環中刪除條件。答案更接近正確,但仍不夠準確。我如何糾正這個問題給我正確的答案?

+0

不是我能看到的一個好的實現。試試這個:http://www.math.hmc.edu/funfacts/ffiles/30001.1-3.shtml – duffymo

回答

3

分號在從while語句端評估獨立地使所述循環體所以結果總是相同的

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

此外環路在第一之後終止於無條件執行迭代。刪除循環中的第一個表達式,即

while (count <= termNum) { 
+0

我刪除了分號,但現在代碼返回值爲3.0,用戶輸入的任意數量的項。有任何想法嗎? – user2928362

+0

是的,你的循環在第一次迭代後被轟出 - 只要檢查數字是否小於上限數字 – Reimeus

+0

答案正在改變,這是一件好事。我的問題是它沒有返回正確的值。他們更接近正確,但仍不完全正確。 – user2928362