最小值和最大值随机生成器java出错

最小值和最大值随机生成器java出错,java,eclipse,Java,Eclipse,当我输入最小值和最大值时,它会显示这些边界之外的值。为什么会这样?例如: 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

当我输入最小值和最大值时,它会显示这些边界之外的值。为什么会这样?例如:

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();
public void randomnumerminmax(){
int-min;
int max;
系统输出打印(“输入最小值:”);
min=myScan.nextInt();
系统输出打印(“输入最大值:”);
max=myScan.nextInt();
int i=(int)(Math.random()*max)+min;
System.out.println(“您的号码是:“+i”);
如果(i=max);
}   
公共静态void main(字符串[]args){
RandomNumberGenerator生成器=新的RandomNumberGenerator();
generator.randomNumberMinimax();

您当前正在生成具有不正确边界的随机值。您的代码如下

int i = (int)(Math.random() * max) + min;
假设
Math.random
生成一个类似
0.9939045240919046
的值,然后将该值乘以
40
,该值变为
39756180964
,然后将
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;

使用类似的随机生成器,您可以在某些值和更多值之间生成随机数

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;
    }
}
publicstaticvoidmain(字符串[]args){
int minRange=-20;
int maxRange=20;
对于(int i=0;i<100;i++){
int number=getRandomPrimitiveInt(最小范围,最大范围);
系统输出打印项次(编号);
}
}
公共静态int getRandomPrimitiveInt(int minRange,int maxRange){
如果(最小范围<0){
int值=(int)((Math.random()*(maxRange+Const.ONE))+Const.ZERO);
if(getPositiveOrNegative()){
返回值;
}否则{
返回Math.negateExact(值);
}
}否则{
返回(int)((Math.random()*(maxRange-minRange+Const.ONE))+minRange);
}
}
私有静态布尔getPositiveOrNegative(){
int lRandomNumber=(int)(Math.random()*常量三);
if(lRandomNumber%Const.TWO==Const.ZERO){
返回true;
}否则{
返回false;
}
}

仔细看看你在做什么。你生成一个小于40的随机整数(假设选择了30),然后再加上20,得到50。你可以试试:int i=(int)(Math.random()*(max-min))+min;但可能不适用于负数虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。抱歉,我只想回答“最小值和最大值随机生成器java的错误”主题.可能会显示某些情况下的解决方案。我会编辑我的帖子。