2017-01-20 3 views
0

Я хочу, чтобы создать генератор случайных чисел с диапазоном (определяется var1), и исключение (определяется blockvar1)Генератор случайных с диапазоном + исключением

Я написал:

Random rand = new Random(); 
int var1 = rand.nextInt(var1) + 1; 
do{ 
    blockvar1 = rand.nextInt(var1) + 1; 
} 
while (var1 == blockvar1); 
+1

Нет причины для этого, просто выполните 'if (var1> = blockvar1) {var1 ++; } 'Кроме того, что означает *« это не сработало »* точно означает? – luk2302

+1

Какой ваш ожидаемый результат? –

ответ

1

Это должно Покажи фокус. Он создает целое число с максимальным значением и минимальным значением и не генерирует число, указанное в третьем параметре.

public static Integer RandomNumberRange(int max, int min, int block) 
{ 
    Random rand = new Random(); 
    int randomNum; 

    do { 
     randomNum = rand.nextInt((max - min) + 1) + min; 
    } while (randomNum == block && (max != block && block != min)); 

    return randomNum; 
} 

Результат вызова функции с диапазоном 5-1 и 2, блокируя

public static void main(String[] args) { 
    for(int i = 0; i < 20; i++) 
     System.out.print(RandomNumberRange(5, 1, 2) + " "); 

}//main method 

Выход

1 5 5 1 5 4 3 3 4 1 5 5 5 1 5 4 3 5 1 5 
0

У меня есть два (незначительные) проблемы с вашей код:

  1. Вы, кажется, используете var1 для двух целей, это как верхняя граница для вашего случайного числа, так и самого случайного числа; это вызывает путаницу и результат, который может быть не таким, как ожидалось (даже если ожидание размывается, когда дело доходит до случайных чисел).
  2. Я не очень люблю петлю. На практике это не сработает вечно, но нет твердой верхней границы того, сколько раз он будет работать.

Вот мое предложение вместо этого: выход

private static Random rand = new Random(); 

/** 
* Generates a pseudo-random number in the range 0..var1, but not blockvar1 
* @param var1 upper bound (inclusive) of random number 
* @param blockvar1 forbidden number 
* @return the generated random number 
*/ 
public static int randomNumberRange(int var1, int blockvar1) { 
    if (blockvar1 < 0 || blockvar1 > var1) { 
     throw new IllegalArgumentException("blockvar1 must be between 0 and var1 inclusive"); 
    } 
    int result = rand.nextInt(var1); 
    if (result >= blockvar1) { 
     result++; 
    } 
    return result; 
} 

Образца из повторных вызовов randomNumberRange(4, 2):

1 1 3 3 1 0 0 0 4 4 1 0 3 3 4 3 3 0 1 3 

Вы заметите, что это дает вам цифры от 0 до 4 включительно, за исключением никогда 2.