2015-01-24 4 views
0

Я пишу метод, который печатает guesses = [random number here from 1-50 inclusive] несколько раз в новой строке до тех пор, пока значение больше 48. Когда оно больше 48, я пытаюсь напечатать количество догадок (ни один сканер не использовался, а «догадки» - - это номер, созданный Math.random). Вот пример вывода:Что добавить в условие во время цикла?

guess = 43 
guess = 47 
guess = 45 
guess = 27 
guess = 49 
total guesses = 5 

и это мой выход:

guess = 44 
guess = 47 
guess = 45 
guess = 27 
total guesses = 4 

Причина я получаю почти те же самые случайные числа, потому что это в практике-It.

Вот мой код:

public static void makeGuesses(){ 
    int totalGuesses = 0; 
    double randomNumber = (Math.random() * 50 + 1); 

    while(randomNumber < 48){ 
     System.out.print("guess = "); 
     System.out.println(randomNumber + 1); 
     randomNumber = (int)(Math.random() * 51); 
     totalGuesses++; 
    } 
     System.out.print("total guesses = " + totalGuesses); 
} 

В настоящее время я не получаю последнюю строку требуемой мощности. Что мне нужно, чтобы сделать условие в моем цикле while?

ответ

1

Вы на правильном пути, так что вам нужно наложить на int, но вам нужно бросить на int, когда вы сгенерируете номер.

Кроме того, если вы используете текущую реализацию, вы генерируете числа от 0 до 50 включительно. Вы хотите генерировать от 1 до 50 включительно. Вы можете исправить это путем умножения на 50, а затем просто добавив 1.

int randomNumber = (int) (Math.random() * 50 + 1); 
0

Ваш первый random не является int, потому что вы забыли бросание

double randomNumber = (int) (Math.random() * 51); 

Я предлагаю вам сделать введите int, как хорошо

int randomNumber = (int) (Math.random() * 51); 
0

Когда вам нужно для генерации случайных чисел снова и снова, вы должны использовать java.util.Random для этого.

public static void makeGuesses() { 
     int totalGuesses = 0; 
     Random rdm = new Random(); 
     int randomNumber; 
     do { 
      randomNumber = rdm.nextInt(50) + 1; 
      System.out.println("guess = " + randomNumber); 
      totalGuesses++; 
     } while (randomNumber < 48); 
     System.out.println("total guesses = " + totalGuesses); 
    } 
} 

Выход:

guess = 15 
guess = 29 
guess = 26 
guess = 14 
guess = 3 
guess = 1 
guess = 49 
total guesses = 7 
+0

Непонятно. Какая последняя строка. «total guesses = ...» будет напечатано. – afzalex

+0

"guess = 49". Я уверен, что это мой тест в цикле, который мне нужно изменить ...? –

+0

Если вы хотите узнать все случайные числа, которые сгенерированы, для этого вам следует использовать 'do-while'. Я отредактировал свой ответ. взгляните на это. – afzalex

0

Проблема заключается в том, что условие на ваше время проверяет номер, который вы еще не напечатаны. Если вы используете отладчик и выполните код, вы заметите это.

int totalGuesses = 0; 
int randomNumber; 

while (true) { 
    randomNumber = 1 + (int)Math.floor(Math.random() * 50); 
    totalGuesses += 1; 
    System.out.print("guess = "); 
    System.out.println(randomNumber); 
    if (randomNumber > 48) break; 
} 

System.out.print("total guesses = " + totalGuesses); 

Извините, я не могу точно форматировать код на своем телефоне.

Смежные вопросы