Ошибка генерации случайных чисел в Java. (включая код и ошибку)

#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 () для этого, и БАЦ, это сработало. Большое вам спасибо за всю вашу помощь. Также спасибо за советы!