2016-12-30 3 views
-1

Привет всем У меня есть эта команда:Как остановить Random от генерации каждый раз, кроме первого раза?

for (z = 0; z < utenti.length; z++) { 
    utenti[z] = rand.nextInt(1000) + 1; 
} 

После того, как это сделано генерации случайных чисел от 1 до 1000, я хочу, чтобы это остановить, команда является одной из функций в моей программе, но каждый раз, когда я вспоминаю это число Генерировать случайным образом снова. Есть ли способ остановить случайное поколение после первого раза?

+0

Почему бы вам просто не сохранить числа в переменной? –

+0

Этот код должен принадлежать методу в классе. Не могли бы вы также показать нам соответствующие части этого класса, особенно упомянутый метод и массив 'utenti'? – Seelenvirtuose

+0

Зачем вам каждый раз вспоминать? Не можете ли вы просто использовать переменную 'utenti []', которая имеет номера? Это поможет, если вы более четко объясните свое намерение. –

ответ

1

Есть ли способ остановить случайное поколение после первого раза?

Да. Не выполняйте этот код после первого раза. Например:

if (firstTime) { 
    for (z = 0; z < utenti.length; z++) { 
     utenti[z] = rand.nextInt(1000) + 1; 
    } 
    firstTime = false; 
} 
0

Я не хочу дважды запускать кусок кода, тогда почему вы называете это дважды?

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

  • Вы можете просто делать то, что делали в Stephen Chis answer, используя boolean отслеживать ли это в первый раз или нет. Это может быть самым простым вариантом для вас.
  • В дополнение к другому ответу также обратите внимание, что один из конструкторов класса Random принимает семя. Если вы сохраните семя одинаково, последовательность псевдослучайных чисел будет одинаковой. Это экономит ваше использование памяти массива utenti, особенно с большими массивами.

    private long seed; 
    
    private void determineSeed() { 
        long seed = new Random().nextLong(); 
    } 
    

    И затем использовать:

    Random rand = new Random(this.seed); 
    for (int i = 0; i < utenti.length; i++) { 
        int number = rand.nextInt(1000) + 1); 
        // Don't save it to an array, do something with number 
    } 
    

    Недостаток состоит в том, что вы можете не использование конкретных элементов последовательности (например, utenti[i]), вы должны использовать случайные числа в последовательности.

+0

Но мне действительно нужно вспомнить конкретный элемент. Мой массив в настоящее время имеет 50 ячеек, если мне нужно вспомнить конкретный, этот код не будет работать тогда? Пример: я вспоминаю пользователя 30, у него 20 случайных чисел, я добавляю 10 $, так что у него 30 $, я снова возвращаюсь к пользователю 30, и теперь у него есть другая сумма, генерируемая случайным образом вместо 30 $, которую он должен иметь. – Zabusy

Смежные вопросы