2016-11-10 12 views
0

Я запускаю программу, которая имитирует количество шагов, которые потребуются для перехода через 7-шаговый мост. Производится случайное число, чтобы определить, совершает ли человек шаг вперед или назад. Эта симуляция запускается 1000 раз. После этого среднее количество шагов, которые нужно выполнить, распечатывается, а также максимальное количество шагов.Blue 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, а это означает, что время цикла (с условием s < 7) продолжается раз (в частности, до s снова возвращается в положительное число).

+0

И утвердительный оператор вызова будет int ans = rn.nextInt (2); То есть генерировать 0 или 1 случайным образом. Но да, казнь может не успокоиться в конечных итерациях. – Acewin

+0

Спасибо за помощь, все, я смог исправить все мои большие ошибки. Еще одна вещь ... Мой avg продолжает появляться как 0. Я думал, что это было наследование, поэтому я играл с позиционированием «c» и «avg», но не смог найти способ решить эту проблему вопрос. Какие-либо предложения? –

+0

@Flightless_bird вам нужно переместить 'int sum = 0;' вне цикла. Поскольку он находится внутри цикла, его значение сбрасывается на каждую итерацию. – davmac