最小值和最大值随机生成器出错 java
Error with min and max values random generator java
当我输入最小值和最大值时,它显示的值超出了这些边界。为什么是这样?例如:
Enter minimum value: 20
Enter maximum value: 40
Your number is: 50
还有其他代码,但一切正常。下面是不起作用的方法:
public void randomNumberMinMax(){
int min;
int max;
System.out.print("Enter minimum value: ");
min = myScan.nextInt();
System.out.print("Enter maximum value: ");
max = myScan.nextInt();
int i = (int)(Math.random() * max) + min;
System.out.println("Your number is: " + i);
if (i < min || i >= max);
}
public static void main(String[] args) {
RandomNumberGenerator generator = new RandomNumberGenerator();
generator.randomNumberMinMax();
您目前正在生成边界不正确的随机数。你有像
这样的代码
int i = (int)(Math.random() * max) + min;
假设 Math.random
生成一个像 0.9939045240919046
这样的值,然后将此值乘以 40
,变成 39,756180964
然后添加 20
,它给你
39,756180964 + 20 = 59,756180964
您可以使用
进行更正
int i = new Random().nextInt(max - min + 1) + min // this will generate number b/w min and max inclusive
我建议更换行:
int i = (int)(Math.random() * max) + min;
与
int i = (new Random()).nextInt(max-min) + min;
像这样使用随机生成器 here RandomUtil class 您可以在一些值之间生成随机数等等。
public static void main(String[] args) {
int minRange = -20;
int maxRange = 20;
for (int i = 0; i < 100; i++) {
int number = getRandomPrimitiveInt(minRange, maxRange);
System.out.println(number);
}
}
public static int getRandomPrimitiveInt(int minRange, int maxRange) {
if (minRange < 0){
int value = (int) ((Math.random() * (maxRange + Const.ONE)) + Const.ZERO);
if (getPositiveOrNegative()){
return value;
} else {
return Math.negateExact(value);
}
} else {
return (int) ((Math.random() * (maxRange - minRange + Const.ONE)) + minRange);
}
}
private static boolean getPositiveOrNegative() {
int lRandomNumber = (int) (Math.random() * Const.THREE);
if (lRandomNumber % Const.TWO == Const.ZERO) {
return true;
} else {
return false;
}
}
当我输入最小值和最大值时,它显示的值超出了这些边界。为什么是这样?例如:
Enter minimum value: 20
Enter maximum value: 40
Your number is: 50
还有其他代码,但一切正常。下面是不起作用的方法:
public void randomNumberMinMax(){
int min;
int max;
System.out.print("Enter minimum value: ");
min = myScan.nextInt();
System.out.print("Enter maximum value: ");
max = myScan.nextInt();
int i = (int)(Math.random() * max) + min;
System.out.println("Your number is: " + i);
if (i < min || i >= max);
}
public static void main(String[] args) {
RandomNumberGenerator generator = new RandomNumberGenerator();
generator.randomNumberMinMax();
您目前正在生成边界不正确的随机数。你有像
这样的代码int i = (int)(Math.random() * max) + min;
假设 Math.random
生成一个像 0.9939045240919046
这样的值,然后将此值乘以 40
,变成 39,756180964
然后添加 20
,它给你
39,756180964 + 20 = 59,756180964
您可以使用
进行更正int i = new Random().nextInt(max - min + 1) + min // this will generate number b/w min and max inclusive
我建议更换行:
int i = (int)(Math.random() * max) + min;
与
int i = (new Random()).nextInt(max-min) + min;
像这样使用随机生成器 here RandomUtil class 您可以在一些值之间生成随机数等等。
public static void main(String[] args) {
int minRange = -20;
int maxRange = 20;
for (int i = 0; i < 100; i++) {
int number = getRandomPrimitiveInt(minRange, maxRange);
System.out.println(number);
}
}
public static int getRandomPrimitiveInt(int minRange, int maxRange) {
if (minRange < 0){
int value = (int) ((Math.random() * (maxRange + Const.ONE)) + Const.ZERO);
if (getPositiveOrNegative()){
return value;
} else {
return Math.negateExact(value);
}
} else {
return (int) ((Math.random() * (maxRange - minRange + Const.ONE)) + minRange);
}
}
private static boolean getPositiveOrNegative() {
int lRandomNumber = (int) (Math.random() * Const.THREE);
if (lRandomNumber % Const.TWO == Const.ZERO) {
return true;
} else {
return false;
}
}