Как мне сгенерировать случайное число int?

Используете ли вы метод JTextArea append(String) для добавления дополнительного текста?

JTextArea txtArea = new JTextArea("Hello, World\n", 20, 20);
txtArea.append("Goodbye Cruel World\n");
1716
задан Uwe Keim 6 March 2019 в 10:20
поделиться

7 ответов

Класс Random используется для создания случайных чисел. (Это, конечно, псевдослучайно.)

Пример:

Random rnd = new Random();
int month  = rnd.Next(1, 13);  // creates a number between 1 and 12
int dice   = rnd.Next(1, 7);   // creates a number between 1 and 6
int card   = rnd.Next(52);     // creates a number between 0 and 51

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

2347
ответ дан 22 November 2019 в 20:06
поделиться

Следующий код возвращает случайное число. В

int num = random.Next(); 

следующий код возвращает случайное число меньше чем 1 000. В

int num = random.Next(1000);

следующий код возвращает случайное число между минутой и макс. диапазоном.

GenerateВ aВ randomВ numberВ betweenВ twoВ числа:

public int RandomNumber(int min, int max)  

 { 

Random random = new Random(); 

return random.Next(min, max);  

}

2
ответ дан Mojtaba Nava 4 October 2019 в 07:27
поделиться
  • 1
    Если you' ре, вставляющее в поле INTEGER, you' ll хотят использовать ' setInt'. аналогично, другие числовые поля базы данных использовали бы другие методы set. Я отправил ссылку на документы PreparedStatement, которые перечисляют все типы метода set. – Kaleb Brasee 28 November 2009 в 16:52

Так же, как примечание для дальнейшего использования.

при использовании.NET Core несколько Случайных экземпляров не так опасны как прежде. Я знаю, что этот вопрос с 2010, но так как этот вопрос стар, но имеет некоторую привлекательность, я думаю, что это - хорошая вещь зарегистрировать изменение.

можно обратиться к этому вопросу, который я сделал несколько недель назад:

Microsoft изменяла Случайное семя по умолчанию?

В основном, они изменили семя по умолчанию с Environment.TickCount до Guid.NewGuid().GetHashCode(), поэтому если Вы создадите 2 экземпляра Случайных, то оно не отобразит те же числа.

Вы видите файл diffs от ПЛАТФОРМЫ/.NET CORE.NET (2.0.0 +) здесь: https://github.com/dotnet/coreclr/pull/2192/commits/9f6a0b675e5ac0065a268554de49162c539ff66d

Это не столь безопасно как RNGCryptoServiceProvider, но по крайней мере он не даст Вам странные результаты.

0
ответ дан Lucca Ferri 4 October 2019 в 07:27
поделиться
  • 1
    Да Cylon, PreparedStatements генерируют параметризированные запросы. – Kaleb Brasee 28 November 2009 в 16:54

Если Вы хотите, чтобы CSRNG генерировал случайные числа между минутой и макс., это для Вас. Это инициализирует Random классы с безопасными случайными семенами.

    class SecureRandom : Random
    {
        public static byte[] GetBytes(ulong length)
        {
            RNGCryptoServiceProvider RNG = new RNGCryptoServiceProvider();
            byte[] bytes = new byte[length];
            RNG.GetBytes(bytes);
            RNG.Dispose();
            return bytes;
        }
        public SecureRandom() : base(BitConverter.ToInt32(GetBytes(4), 0))
        {

        }
        public int GetRandomInt(int min, int max)
        {
            int treashold = max - min;
            if(treashold != Math.Abs(treashold))
            {
                throw new ArithmeticException("The minimum value can't exceed the maximum value!");
            }
            if (treashold == 0)
            {
                throw new ArithmeticException("The minimum value can't be the same as the maximum value!");
            }
            return min + (Next() % treashold);
        }
        public static int GetRandomIntStatic(int min, int max)
        {
            int treashold = max - min;
            if (treashold != Math.Abs(treashold))
            {
                throw new ArithmeticException("The minimum value can't exceed the maximum value!");
            }
            if(treashold == 0)
            {
                throw new ArithmeticException("The minimum value can't be the same as the maximum value!");
            }
            return min + (BitConverter.ToInt32(GetBytes(4), 0) % treashold);
        }
    }
0
ответ дан 22 November 2019 в 20:06
поделиться

Помните, что new Random () заполняется на текущей отметке времени.

Если вы хотите сгенерировать только одно число , вы можете использовать:

new Random (). Next (int.MinValue, int.MaxValue)

Для получения дополнительной информации см. Класс Random , однако обратите внимание:

Однако, поскольку часы имеют конечное разрешение, использование конструктора без параметров для создания различных объектов Random в близкой последовательности создает генераторы случайных чисел, которые производят идентичные последовательности случайных чисел

Поэтому не используйте этот код для генерации серии случайных чисел.

86
ответ дан 22 November 2019 в 20:06
поделиться
Random r = new Random();
int n = r.Next();
48
ответ дан 22 November 2019 в 20:06
поделиться

Вы можете использовать метод Джона Скита StaticRandom внутри библиотеки классов MiscUtil, которую он построил для псевдослучайного числа.

using MiscUtil;
...

for (int i = 0; i < 100; 
    Console.WriteLine(StaticRandom.Next());
16
ответ дан 22 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: