#java #android #random
#java #Android #Случайный
Вопрос:
Я получаю сообщение об ошибке с этим кодом, который выдает Class file editor: источник не найден внутри Random.class вкладка. Возникли проблемы с моей строкой, в которой указано значение =…
Я пытаюсь создать общий метод генерации случайного числа между двумя целыми числами, которые я передаю.
import java.util.Random;
public class RandomNumGen {
int value;
Random rand;
public RandomNumGen() {
rand = new Random();
}
public int intRandom(int min, int max) {
value = rand.nextInt(max) min;
return(value);
}
public int choiceRandom(int first, int second, int third, int fourth) {
int random = intRandom(1, 400);
if (random < 100) {
return(first);
}else if (random > 100 amp;amp; random < 200) {
return(third);
}else if (random > 200 amp;amp; random < 300) {
return(fourth);
}
return(second);
}
}
Помощь была бы оценена,
Спасибо
Комментарии:
1. Отформатируйте код, используя 4 пробела перед каждым оператором кода или с помощью
{}
, доступного в редакторе.
Ответ №1:
Ошибка «Источник не найден» связана с тем, что он пытался открыть исходный код для java.util.Random
, чтобы помочь вам в отладке, и не смог его найти. Код выглядит правильным в том смысле, что он должен выполняться без ошибок; Random.nextInt
выдаст IllegalArgumentException
, если вы передадите ему неположительное число, но вы передаете его 400. Я не получаю никаких ошибок при запуске этого фрагмента кода и вызове choiceRandom(1, 2, 3, 4);
Однако логически код неверен — intRandom
не возвращает число между min
и max
. Вы вызываете nextInt(max)
, который возвращает число между 0
и max-1
, а затем добавляете min
, создавая диапазон между min
и min max-1
. Вам нужно будет вернуть rand.nextInt(max-min) min
Если вам просто нужен метод, который принимает кучу целых чисел и возвращает одно случайным образом, более простая реализация:
public int choiceRandom(int... numbers) {
return numbers[rand.nextInt(numbers.length)];
}
Комментарии:
1. Что именно делает int… делать? Также я все еще получаю ту же ошибку, это исключение IllegalArgumentException. Даже при реализации вашего (удивительного, кстати) метода я получаю ту же ошибку.
2. @Kirk Это метод varargs ; вы передаете ему любое количество целых чисел, и он сохраняет их в массиве с именем
numbers
. Вы уверены, что число, которое вы передаетеrand.nextInt
, больше 0?3. каким-то образом я отправлял ему отрицательный результат, хотя и не думал, что это так. Я использовал Math.abs () для этого, и БАЦ, это сработало. Большое вам спасибо за всю вашу помощь. Также спасибо за советы!