2013-10-11 51 views
0

我目前在學習Java,我的一個任務是使用教授給予我們的某個公式來近似pi,我們必須使用for循環。方向對我來說不是很清楚,但我的程序非常接近,但我無法弄清楚爲什麼pi的值接近但不是每個區間應該是什麼。不能讓程序正確接近pi

這是我被給做程序中的指令:

(計算π)可以通過使用下面的公式近似π: PI + =符號/(2 * I - 1.0);其中i是for循環中變量的名稱,pi是π的變量名稱,當聲明它時初始值爲1,並且for循環中的>設置爲等於它自身的負數。確保你使用for循環>來完成這個任務。 for循環的起始值應該是2,當i小於或等於100000時,結束值應該>>。如果pi除以10000的值爲零,那麼> pi應該是(4 * pi)。

這是我想到的代碼。

public class Ch4PA1 
{ 
public static void main(String[] args) { 
//Declarations 
double pi = 1; 
double sign = 1; 

for (int i = 10000; i <= 100000; i += 10000) 
{ 
    pi = 3.14159265359; 
    sign = -2; 
    pi += sign/(2 * i - 1.0); 
    System.out.println("i : " + i + " The PI is " + pi); 
} 
    } 
} 

我想不出什麼我做錯了,我已經在這個項目約10小時的關上,它只是結束了在我感到沮喪赫克試圖找到出。

+0

我認爲你應該重新閱讀說明書,看看你的'for'循環。 'for(int i = 10000; i <= 100000; i + = 10000)'是錯誤的,我認爲... – nhgrif

+0

她說要使用2的初始值,但她希望我們以10,000的間隔輸出pi的值從10,000到100,000。我嘗試了每一種可能的方式,以便使用她的指示來工作,並且這是我能夠以只顯示她想要的10,000個間隔的唯一方式。我認爲我遇到的問題是符號變量的值,但是我嘗試的所有內容在程序中都沒有多大意義,因爲它每次都會導致pi錯誤。 –

+0

'for(int i = 2; // etc ...',然後把你的輸出放在'if(i%10000 == 0){System.out .// etc ...'作爲你的'for'循環目前,你沒有足夠頻繁地進行數學運算(從來不會犯任何其他錯誤),因爲你只需要循環10次就可以得到接近'pi'的值,所以你需要經過10萬遍'i%10000 == 0'將在'i'爲10000的倍數時返回'true',所以它會在'i = 0','i = 10000','i = 20000'處打印。等 – nhgrif

回答

0

回顧一下說明......他們說:「...聲明的初始值爲1,並且for循環中的>設置爲等於其自身的負數」。您正在設置

sign = -2; 

每次迭代。

他們還說:「for循環的起始值應該是2 ...」。你有

for (int i = 10000; i <= 100000; i += 10000) 

這使得for循環的初始值10000

0
public class Ch4PA1 
{ 
public static void main(String[] args) { 
//Declarations 
double pi = 1; 
double sign = 1; 

for (int i = 2; i <= 100000; ++i) //Switched the starting value to 2, and the increment to 1 
{ 
    pi = 3.14159265359; 
    pi += sign/(2 * i - 1.0); 
    if (sign > 0){ //you were constantly doing a -2 as oppose dto switching what the sign currently is. Notice I do it after your sign calculation so that it switches the sign AFTER the first iteration as instructed. 
     sign = -1; 
    } 
    else sign = 1; 

    System.out.println("i : " + i + " The PI is " + pi); 
} 
    } 
} 
0

從我可以從問題的理解,標誌爲1的初始值,當它被宣佈並在for循環被設置爲等於其本身的負值。

pi += (-sign)/(2 * i - 1.0); 

for循環定義應該看起來更像下面

for(int i=2; i<=100000 ; i++) 

我還是不明白的問題,爲什麼你遞增循環變量i 10000每次循環後的原因。

還應該在循環中的IF條件所看到如下

if(pi/10000) 
    pi *= 4