2012-10-02 144 views
1

我不得不爲這個類項目編寫這個。編譯時我沒有遇到任何錯誤,但是當我嘗試執行它時,程序不會運行。我的Java代碼不能運行,爲什麼? (只有幾行)

我們必須編寫一個程序myRandomWalkers.java,它帶有兩個命令行參數N和T.在每個T獨立實驗中,模擬N步的隨機遊走並計算平方距離。輸出均方距離(T平方距離的平均值)。

我寫了下面的:提前

public class myRandomWalkers { 

    public static void main(String[] args) { 

     int n= Integer.parseInt(args[0]); 
     int t= Integer.parseInt(args[1]); 
     int x= 0; // starting x position 
     int y= 0; // starting y position 
     int sum = 0; // for calculating mean square distance 
     double r; 

     int count = 0; 
     while (count <= t) 
     { 
      for (int i=0; i<n; i++) { 

       r= Math.random(); 
       if (r<=0.25) x++; 
       else if(r<=0.50) x--; 
       else if(r<=0.75) y++; 
       else if(r<=1.0) y--;   

       int z = ((x*x) + (y*y)); 
       sum +=z; 
      } 
     } 

     int average = (sum/t); 
     System.out.println ("mean squared distance = " + average); 
    }   
} 

謝謝!

+6

http://codereview.stackexchange.com是最合適的地方。 – Vikdor

+3

@Vikdor在這種情況下有一個錯誤(程序不會終止),所以我想它也可以被問到...雖然可以說這個問題太過本地化了...... – assylias

+2

我投票關閉基於標題,但它不是一個真正的代碼審查問題。它更多的是尋找錯誤或問題,因此更適合SO。 (我更新了OP的標題,以更好地反映這個國際海事組織。) –

回答

9

輸出將取決於您傳遞給程序的參數。但是:

如果 count > t while循環將不被執行
  • 如果count <= t while循環將永遠不會結束,因爲你不增量次數 - 你可能需要在你的while循環添加count++;地方。
+0

我在for循環結束後添加了count ++,但仍然在while循環中,仍然存在相同的問題:/ – Ryan

+0

@Ryan不知道您使用了什麼輸入,很難重現您看到的內容,因此很難進一步幫助您。 – assylias

+0

@Ryan例如,對於n = 5和t = 1,在for循環後面加上'count ++'後,我得到以下輸出:「均方根距離= 25」 – assylias

0

正如assylias所說,你的while循環的退出條件永遠不會達到,因爲count永遠不會改變。

但是我也會評論一下這樣一個事實,即您使用了兩個不同的循環,兩者的情況非常相似。有人會說,你在這裏使用哪種類型的循環是個人喜好,但使用2種不同的風格是沒有意義的。我傾向於使用這樣一個原則,即如果我知道有多少次迭代,那麼將使用for循環(因此使用計數器的任何事物都有資格)

其他考慮因素(用於額外信用)可能是看看你的parseInt調用,我相信負數會很好,但你的計算不會考慮它們。並且非數字可以很容易地傳遞到命令行,那麼你的程序會做什麼?你更喜歡做什麼?

相關問題