Подбрасывание монеты и остановка при выпадении орлов 4 раза подряд

#java

#java

Вопрос:

Задача состоит в том, чтобы подбрасывать монету до тех пор, пока не будут видны четыре орла подряд, и отображать все результаты, ведущие к этому. Я продолжаю получать последнее сообщение об ошибке, которое я ввел на всякий случай, если оно провалилось. Я понятия не имею, что я напутал, и мне было интересно, смог ли кто-нибудь помочь.

 class Main {
  public static void main(String[] args) {
  
      int h = 2;
      int t = 1;
  
      int count = 0;

      int resu<

      while (count<=4)
      {
   
        result = (int)Math.random()*2;
        if (result == 2)
        {
        count  ;
        System.out.print("H ");
        }
        else if (result == 1)
        {
        count=0;
        System.out.print("T ");
        }
        else
        System.out.println("error");
      }
  }
}
  

Комментарии:

1. Math.Random() * 2 возвращает число с плавающей запятой от 0 до 1.99999 …, поэтому приведение его к int сделает его 0 или 1. Это никогда не станет 2.

Ответ №1:

 (int)Math.random() * 2
  

то же самое, что

 ((int)Math.random()) * 2
  

Учитывая, что Math.random() это возвращает число не менее нуля, но меньше единицы, ваше выражение всегда будет равно нулю.

Заключите в круглые скобки:

 (int) (Math.random() * 2)
  

Но тогда также посмотрите на значения result в ваших условных обозначениях: вы никогда не сгенерируете 2.

Ответ №2:

Вам нужно добавить 1, чтобы получить возможные значения, равные одному или двум:

 result = (int) (Math.random() * 2   1);
  

Ответ №3:

Вы можете использовать Random класс и логическое

 Random random = new Random();
int count = 0;
while (count < 4) {
    if (random.nextBoolean()) {
      System.out.print("H");
      count  ;
    } else {
        count = 0;
        System.out.print("T");
    }
}
  

Ответ №4:

В результате Math.random() имеет тип от 0 до 1, приведение его к int приведет к удалению цифр после десятичной точки, и вы всегда будете иметь ноль в качестве ответа. Приведенный ниже код поможет вам сгенерировать случайное число между min и max.

 // define the range 
      int max = 2; 
      int min = 1; 
      int range = max - min   1; 
      int rand = (int)(Math.random() * range)   min;
  

Для объяснения того, как это работает, вы можете указать минимально возможное значение 0 и максимально возможное значение 0,99 и умножить оба на любой диапазон, скажем, 20. ответ по-прежнему будет находиться в диапазоне от 1 до 20,8, который превращается в 20, поскольку он не округляется, а вводится непосредственно. Следовательно, это может дать вам случайное число для любого диапазона.