2016-11-10 81 views
0

我一直在運行一個程序,它模擬了通過一個7步橋接所需的步驟數。生成一個隨機數來確定該人是向前還是向後。這個模擬運行1000次。在此之後,打印出的平均打印步數以及打印的最大步數。藍色的J顯示它正在運行,但不會打開結果窗口

這反過來運行1000次。它編譯好。我的問題是,當我去運行它時,(在BlueJ上)條顯示它正在運行,但輸出窗口未能出現。發生什麼事? (最有可能是愚蠢的,我不知道的東西。)

import java.util.Random; 

public class Prog214a 
{ 
    public static void main (String[] args) 
    { 
     Random rn = new Random(); 

     for (int m = 1; m <= 20; m++) 
     { 

      int max = 0;   

      for (int c = 1; c <= 1000; c++) 
      { 
       int s = 0; 
       int sn = 0; 
       int sum = 0; 

       while (s < 7) 
       { 
        int ans = rn.nextInt(1) + 0; 

        if (ans == 1) { 
         s = s + 1 
        } 
        else { 
         s = s - 1; 
        } 

        sn++;    
       } 

       sum = sum + sn; 

       if (sn > max) {    
        max = sn;   
       } 

       if (c == 1000) {    
        double avg = sum/c; 
        System.out.print(avg); 
        System.out.print(" " + max);    
       } 
      } 
     } 
    } 
} 
+1

請正確地縮進/格式化您的代碼。在BlueJ中,您可以按ctrl + shift + I自動執行此操作。 – davmac

+0

's = s + 1' - 您在此陳述後錯過了分號。你確定這段代碼編譯正確嗎? –

+0

@Flightless_bird,使用和IDE很棒,你還應該學習使用IDE進行調試。 – Acewin

回答

1

至少有一個問題。在這裏:

   int ans = rn.nextInt(1) + 0; 

       if (ans == 1){ 
        s = s + 1; 
       } 

       else { 
        s = s -1; 
       } 

rn.nextInt(1)只能返回0,所以ans將是0。你有沒有警衛,確保s不變成負,所以它 - 它仍然低於7,這意味着while循環(條件爲s < 7)繼續執行長時間時間(具體而言,直到s再次回到正數)。

+0

而合適的調用語句將爲int ans = rn.nextInt(2);這是隨機生成0或1。但是,執行可能不會在有限的迭代中停止。 – Acewin

+0

感謝所有人的幫助,我能夠解決我所有的大錯誤。還有一件事......我的平均值一直爲0。我認爲這是一個繼承性的東西,所以我玩弄了「c」和「avg」的定位,但是找不到解決這個問題的方法問題。有什麼建議麼? –

+0

@Flightless_bird你需要將'int sum = 0;'移到循環外部。因爲它位於循環內部,所以每次迭代都會重置其值。 – davmac

相關問題