Хорошая практика, чтобы добавить, чтобы установить в то время как условие? - PullRequest
1 голос
/ 12 марта 2020

Я пытаюсь добавить случайное число в набор. Если он уже есть в наборе, то l oop следует продолжить и повторить попытку.

Что является лучшей практикой,

do {
  nextChosenInt = rand.nextInt(48) + 1;
  addFailed = !chosenInts.add(nextChosenInt);
}
while (addFailed);

или

do {
    nextChosenInt = rand.nextInt(48) + 1;
}
while (!chosenInts.add(nextChosenInt));

Ответы [ 3 ]

0 голосов
/ 12 марта 2020

Согласно Java документации , "если этот набор уже содержит элемент, вызов оставляет набор неизменным и возвращает false." Независимо от того, когда вы добавляете в набор, если набор уже содержит элемент, он останется неизменным. Таким образом, производительность не имеет большого значения.

0 голосов
/ 12 марта 2020

Ни с тех пор, как наборы не могут содержать дубликаты. Просто делайте это, пока set не наберет нужное количество элементов. Но вы также можете сделать что-то вроде этого.

        Random rand = new Random();
        int next = 50;
        for (int i = 0; i < 10; i++) {
           next = rand.nextInt(48) + next+1;
           set.add(next);  
        }

Они все уникальны в первый раз (но не полностью случайны). Чтобы добавить номер, которого нет в наборе, возможно следующее:

        int size = set.size();
        while (set.size() == size) {
           set.add(rand.nextInt(48));
        }
0 голосов
/ 12 марта 2020

Я бы проголосовал за второй вариант здесь с небольшим изменением.

Вы используете тот факт, что метод .add возвращает логическое значение, которое является полезным, поскольку вам не нужно иметь избыточную переменную-флаг, которая из контекста вашего кода не служит никаким другим цель, чем просто прекратить l oop.

Лично я бы предпочел извлечь:

!chosenInts.add(nextChosenInt)

в его собственный метод, который будет более наглядным и читабельным. Делая это, вы позволяете любому понять это условие без предварительного знания API коллекций.

...