2013-12-18 93 views
2

我希望我的程序能夠計算從x = -2.0到x = 2.0的值。我也希望它能夠爲-3.0到3.0的標準偏差值做到這一點。一張表中應該總共有140個輸出。然而,我遇到了麻煩,獲得了標準偏差值的改變。我迄今試過的所有東西只是在一組標準偏差下輸出x。我如何修改外部循環以通過x再次執行運行並保持所有輸出?這裏是我想出到目前爲止,但沒有成功:帶多個變量的循環

所有的
import java.lang.Math; 
import java.util.Arrays; 
public class STable { 

public static void main (String[] args) 
{ 
    double exponent, x, pi, e, sqrtpart, y, stnrd, mean; 

    mean = 0; 
    stnrd = -3.0; 
    pi = 3.14159; 
    e = 2.71828; 
    x = -2.0; 
    int count = 0; 
    int supercount = 0; 

    while (supercount < 140) 
    { 
     while (count < 20) 
     { 
      exponent = - ((x-mean)*(x-mean)/(2.0*stnrd)); 
      sqrtpart = Math.sqrt(2*pi); 
      y = (Math.pow(e,exponent))/sqrtpart; 

      System.out.print(" " + y); 
      x = x + 0.2; 
      count++; 
     } 

     x=-2.0; 
     System.out.println("\n"); 

     stnrd = stnrd + 1.0;  
     supercount++; 
    } 
} 
+1

括號是編輯一個解決方案,還是隻是一個更正? (你還有問題嗎?) – DoubleDouble

+0

這是我做了一段時間後的標準偏差http://stackoverflow.com/questions/18390548/how-to-calculate-standard-deviation-using-java/18391710#18391710 – ImGeorge

回答

3

首先,你需要在每次內環後您的count變量復位。否則,在外循環的所有後續過程中,count仍然是20,所以內循環不會執行。

其次,我不認爲外循環應用於所有事情,因爲您沒有使用括號來聲明其範圍。

當我稍微修改你的代碼:

public class STable { 

    public static void main (String[] args) 
    { 


     double exponent, x, pi, e, sqrtpart, y, stnrd, mean; 

     mean = 0; 
     stnrd = -3.0; 
     pi = 3.14159; 
     e = 2.71828; 
     x = -2.0; 
     int count = 0; 
     int supercount = 0; 

     while (supercount < 140) { 



     while (count < 20) 
     { 

      exponent = - ((x-mean)*(x-mean)/(2.0*stnrd)); 

      sqrtpart = Math.sqrt(2*pi); 


     y = (Math.pow(e,exponent))/sqrtpart; 

     System.out.print(" " + y); 
     x = x + 0.2; 
     count++; 
     } 

     x=-2.0; 
     count = 0; 
     System.out.println("\n"); 

     stnrd = stnrd + 1.0;  
     supercount++; 




     } 
    } 
} 

我得到的輸出,我相信你正在尋找。

作爲一個方面說明,這是一個很好的使用案例,用於避免因忘記重置計數變量而導致的錯誤for loop。 :)

編輯 - for循環版本適當的循環執行次數:

public class STable { 

    public static void main(String[] args) { 

     double exponent, pi, e, sqrtpart, y, mean; 

     mean = 0; 
     pi = 3.14159; 
     e = 2.71828; 
     for (double stnrd = -3.0; stnrd <= 3.0; stnrd += 1) { 
      double x = -2.0; 
      for (int i = 0; i < 21; i++) { 
       exponent = -((x - mean) * (x - mean)/(2.0 * stnrd)); 

       sqrtpart = Math.sqrt(2 * pi); 

       y = (Math.pow(e, exponent))/sqrtpart; 

       System.out.print(" " + y); 
       x += 0.2; 
      } 
      System.out.println("\n"); 
     } 
    } 
} 

注意,我更新了內部循環運行21次,因爲有21層0.2的步驟從-2.0至2.0。

+0

是這似乎工作,雖然我不知道輸出是否正確 – user3112609

+0

是的,'supercount'正在增加錯誤的地方。現在,外部循環將執行140次,總共執行2800次內部循環。將'supercount ++'移到內部循環,以確保執行140次執行,並查看輸出是否接近您期望的結果。 – hinerm

0

這並不完全清楚,我你想要做什麼,但你應該包裝在大括號的每一個迴路,即
whileCOND){}

注意,你的第一個while循環沒有任何括號包裹它的身體,這意味着你的代碼實際上是一樣的

while(supercount < 140) 
{ 
    while (count < 20) 
    { 
     ... 
    } 
} 

x=-2.0; 
System.out.println("\n"); 

stnrd = stnrd + 1.0;  
supercount++; 

我猜你想第一內最後一部分環的身體。