#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); } }
Обратите внимание на дополнительные круглые скобки вокруг выражения, которое должно быть приведено к целому числу.