У меня есть два (незначительные) проблемы с вашей код:
- Вы, кажется, используете
var1
для двух целей, это как верхняя граница для вашего случайного числа, так и самого случайного числа; это вызывает путаницу и результат, который может быть не таким, как ожидалось (даже если ожидание размывается, когда дело доходит до случайных чисел).
- Я не очень люблю петлю. На практике это не сработает вечно, но нет твердой верхней границы того, сколько раз он будет работать.
Вот мое предложение вместо этого: выход
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.
Нет причины для этого, просто выполните 'if (var1> = blockvar1) {var1 ++; } 'Кроме того, что означает *« это не сработало »* точно означает? – luk2302
Какой ваш ожидаемый результат? –