0

これが私の問題です:

学生は感謝祭の休憩の開始を少し早めに祝うことにしました。

彼女の家はメイン ストリートの角 0 にあり、ジェイルはメイン ストリートの角 10 にあります。生徒は 5 番目の角から始めて、左または右にそれぞれ 0.5 の確率で 1 つの角をさまよいます。彼女は、無事に家に着くか、刑務所に着くまで、このプロセスを繰り返します。つまり、各コーナーで、酔っ払った生徒は 50 対 50 の確率で左または右によろめき、次の番号の大きいコーナーまたは次に小さい番号のコーナーに移動します。

while ループまたは do-while ループを使用して、酔っ払った学生の歩行をシミュレートするdrunkWalk() という名前のメソッドを作成します。メソッドは、歩数と、生徒が刑務所に入れられたのか自宅に着いたのかの両方を示す単一の整数を返す必要があります。人が刑務所に着地した場合は負の数として、人が家に着いた場合は正の数として歩数を返す場合、これを行うことができます。メソッドの最終バージョンで行った各ステップを印刷しないでください。ただし、デバッグ中に印刷したい場合があります。

メソッドが機能するようになったら、メイン プログラムで、drankWalk() メソッドを N 回呼び出します (N は最終変数です)。最後に、生徒が 1 回の移動で行った平均歩数を計算して出力します。N が 5 の場合、実際のプログラムは次のようになります。

Here we go again... time for a walk! <br/>
Took 37 steps, and <br/>
Landed at HOME<br/>

Here we go again... time for a walk!<br/>    
Took 19 steps, and <br/>
Landed in JAIL<br/>

Here we go again... time for a walk!<br/>
Took 13 steps, and <br/>
Landed in JAIL<br/>

Here we go again... time for a walk! <br/>
Took 25 steps, and <br/>
Landed in JAIL<br/>

Here we go again... time for a walk!<br/>
Took 15 steps, and <br/>
Landed at HOME<br/>

Average # of steps equals 25.4<br/>

これが私のコードです。コンパイルはできますが、出力が得られません。私のコードは複雑すぎると思いますが、単純化する方法がわかりません:

class Drunk     
{

// When this code runs, nothing prints out????

  public static void main(String[] args)
  {
    int home = 0; 
    int jail = 10;  

    final int N = 5; 
    int sum = 0;

    int a = drunkWalk(N); 
    sum = sum + a; 

    //System.out.println ("Average # of steps equals" + " " + (a/sum));

  }

  static int drunkWalk(int x)
  {
    int steps; // steps is the number of steps taken by the student
    int total=5;  // total is the starting point of the student (at corner 5)

    while (x > 0); 
    {   
      do 
      { 
        steps = (int) (Math.random() * (10 +  10) - 10); 
        total += steps;
        x = x-1;
      } while (total != 0 || total != 10);
    }

    if (total == 0) 
    {
      System.out.println("Here we go again... time for a walk!");
      System.out.println("Took" + " " + steps + "steps, and");
      System.out.println ("Landed at HOME"); 
    }

    if (total == 10) 
    { 
      System.out.println("Here we go again... time for a walk!");
      System.out.println("Took" + " " + steps + "steps, and");
      System.out.println ("Landed in JAIL"); 
    }

    return steps; // Need to figure out how to add up ALL the steps
  }

助けてください!

4

2 に答える 2

0

コードに無限ループがあります

do { 
    steps = (int) (Math.random() * (10 +  10) - 10); 
    total += steps;
    x = x-1;
} while (total != 0 || total != 10);

ここで、満足した場合はループが続行され、満足した場合はtotal = 0再びループが続行され、 "YOU HAVE USED OPERATOR"と仮定します。このように使用する必要がありますtotal != 10total = 10total != 0||&&

    do { 
       steps = (int) (Math.random() * (10 +  10) - 10); 
       total += steps;
       x = x-1;
    } while (total != 0 && total != 10);

注:ループのロジックを考慮して、必要に応じてください。

于 2015-12-30T06:45:34.207 に答える