2014-02-14 65 views
0

這是一個我堅持上學的計劃。無法弄清楚爲什麼它不會給我一個平均和最大的。該程序運行50次就像我想要的,但不會增加移動和總數的值。不知道爲什麼這不起作用

import java.util.*; 

public class RandomWalk { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Random rand = new Random(); 

     int location; 
     double average; 
     int greatest=0; 
     int moves = 0; 
     int total = 0; 
     int step; 

     for (int i = 0; i < 50; i++) { 

      location = 4; 
      step = rand.nextInt((2 - 1) + 1) + 1; 


      while (location < 1 || location > 7) { 
       moves ++; 
       if (step == 2){ 
        location ++;  
       } else { 
        location --; 
       } 
       if (moves > greatest) { 
        greatest = moves; 
        total += moves; 
       } 
      } 
     } 

     average = total/50; 

     System.out.println("The greatest number of steps: " + greatest); 
     System.out.println("The average number of steps: " + average); 

    } 

} 

修復for循環,但它仍然不給我平均和最大。

作爲while (location < 1 || location > 7)它應該運行,直到人站在位置1和位置7

這裏的問題是我得到:

在「隨機漫步」,一個人被放置在七米長的橋樑的中心。每個步驟隨機向前或向後移動1米的人。 創建一條隨機步道,確定在走下橋之前,人步行了多少步。申請平均50次審判,並顯示平均和最多的步驟。

感謝幫助...

如果我把它改成這樣:`進口的java.util。*;

公共類RandomWalk2 {

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Random rand = new Random(); 
    double average; 
    int greatest=0; 
    int moves; 
    int total = 0; 
    int step; 

    step = rand.nextInt((2 - 1) + 1) + 1; 

    int location; //location of man on bridge 
    for(int i = 0; i < 50; i++) 
    { 
     moves = 0; 
     moves++; 
     location = 4; 
     total += moves; 
     while(true) 
     { 
      if (step == 2) { 
      location++; 
      } else { 
      location--; 
      } 

     if((location < 1) || (location > 7)) break; 
     } 

     if(moves > greatest) { 
     greatest = moves; 

     } 


     } 

    average = total/50; 

    System.out.println("The greatest number of steps: " + greatest); 
    System.out.println("The average number of steps: " + average); 


    } 

} 

` 那麼它運行50次,但只佬移動一個站,所以我的最大平均總是顯示爲1

+2

現在將是一個偉大的時間去學習使用調試器。或者,使用筆和紙。 –

回答

4

不,不循環50次,因爲您的for循環條件不正確。如果條件爲true而不是false,則for循環將繼續迭代。從

for (int i = 0; i == 50; i++) { 

更改條件

for (int i = 0; i < 50; i++) { 

然後,它會運行,直到i < 50false(50次)。

+0

我修復了這個問題,但是你能告訴我爲什麼當我運行它時,平均值和最大值仍然不顯示? – ZebraRuler

0
location = 4; 
step = rand.nextInt((2 - 1) + 1) + 1; 
while (location < 1 || location > 7) { 
    .. 
} 

何時將位置小於1或大於7?另外在for循環中通過rgettman

+0

這座橋長7米,傢伙在中間..編號1-7中間會是4.所以我想循環運行,而他不在1或7。 – ZebraRuler

+0

我的意思是指導你到問題。您將位置初始化爲4,然後檢查它不是1或7。除非您的對象被一致地修改,否則while循環將不會執行 – RyanS

1

提到

您需要了解的基礎知識for循環。

爲(初始化;終止; 增量){ 聲明(S) }

當使用這個版本的for語句,請記住:

的初始化表達式初始化循環;它在循環開始時執行 一次。當終止表達式求值爲 false時,循環終止。增量表達式在 每次遍歷循環後調用;這個 表達式增加或減少一個值是完全可以接受的。

下面的鏈接應該是有幫助的:

Java for loops

+0

我會牢記以備將來參考。謝謝。 – M7Jacks

+1

感謝您澄清這個循環..我在學校的老師不是很擅長java ......因爲她甚至不知道它.. – ZebraRuler

相關問題