Случайный метод всегда возвращает минимальное значение в цикле for?

#java #for-loop #random

#Ява #для-петли #Случайный

Вопрос:

Я использую случайный метод, который я создал, а не java.util.Случайный класс. Класс называется «Рандомизатор», вот код в нем:

 public class Randomizer{  public static int nextInt(){  return (int)Math.random() * 10   1;  }   public static int nextInt(int min, int max){  return (int)Math.random() * (max - min   1)   min;  } }  

Этот код должен работать просто отлично, но когда я вызываю его в цикле for (как показано ниже), он всегда возвращает минимальное значение.

 public class Main {  public static void main(String[] args)  {  System.out.println("Results of Randomizer.nextInt()");  for (int i = 0; i lt; 10; i  )  {  System.out.println(Randomizer.nextInt());  }  int min = 5;  int max = 10;  System.out.println("nResults of Randomizer.nextInt(5, 10)");  for (int i = 0; i lt; 10; i  )  {  System.out.println(Randomizer.nextInt(min, max));  }  } }  

Этот код возвращает следующее:

 Results of Randomizer.nextInt() 1 1 1 1 1 1 1 1 1 1  Results of Randomizer.nextInt(5, 10) 5 5 5 5 5 5 5 5 5 5  

Я думаю, что эта ошибка связана с тем фактом, что методы в рандомизаторе статичны, но я не могу себе представить, как я мог бы это исправить. Любая помощь была бы вам очень признательна!

Ответ №1:

Math.random() возвращает число с плавающей запятой (двойное) в диапазоне [0, 1) . Когда вы приводите это удвоение к целому числу, оно каждый раз усекается до 0.

Чтобы решить вашу проблему, вам нужно выполнить слепки после всей математики, которую вы пытаетесь выполнить. Итак, это должно выглядеть так:

 public class Randomizer{  public static int nextInt(){  return (int)(Math.random() * 10   1);  }  public static int nextInt(int min, int max){  return (int)(Math.random() * (max - min   1)   min);  } }  

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