Java 如何修复在四个随机生成的数字中查找最小数字时偶尔出现的错误答案

Java 如何修复在四个随机生成的数字中查找最小数字时偶尔出现的错误答案,java,if-statement,random,Java,If Statement,Random,我为java类赋值介绍创建了一些基本代码,以从四个随机生成的0到10(包括0到10)的数字中找到最小的数字。对于赋值决策控制结构,它必须只有一个,它可以工作并给出正确的答案,但有时它会给出错误的答案。错误答案的截图会被附上,因为从随机生成的数字中得到错误答案可能需要一段时间。我不确定是什么原因导致代码有时给出错误的答案 //variables int num1, num2, num3, num4; //random num1 =

我为java类赋值介绍创建了一些基本代码,以从四个随机生成的0到10(包括0到10)的数字中找到最小的数字。对于赋值决策控制结构,它必须只有一个,它可以工作并给出正确的答案,但有时它会给出错误的答案。错误答案的截图会被附上,因为从随机生成的数字中得到错误答案可能需要一段时间。我不确定是什么原因导致代码有时给出错误的答案

        //variables
        int num1, num2, num3, num4;

        //random
        num1 = (int) (Math.random() * 10) + 0;
        num2 = (int) (Math.random() * 10) + 0;
        num3 = (int) (Math.random() * 10) + 0;
        num4 = (int) (Math.random() * 10) + 0;

        //output
        System.out.println("The four random numbers are " +
                num1 + ", " + num2 + ", " + num3 + ", and " + num4);

        //smallest number decision
        if (num1 <= num2 && num1 <= num3 && num1 <= num4) {
            System.out.println("The smallest number is " + num1);

        } //if end

        else if (num2 <= num1 && num2 <= num3 && num1 <= num4) {
            System.out.println("The smallest number is " + num2);

        } //else if end

        else if (num3 <= num1 && num3 <= num2 && num3 <= num4) {
            System.out.println("The smallest number is " + num3);
        } //else if end

        else {
            System.out.println("The smallest number is " + num4);
        } //else end

不正确的输出

问题num1
else if (num2 < num1 && num2 < num3 && num1 < num4) 
应该是:

else if (num2 < num1 && num2 < num3 && num2 < num4) 
注:更简单的方法如下:

// variables
int num1, num2, num3, num4, min;

// random
num1 = (int) (Math.random() * 10) + 0;
num2 = (int) (Math.random() * 10) + 0;
num3 = (int) (Math.random() * 10) + 0;
num4 = (int) (Math.random() * 10) + 0;

// output
System.out.println("The four random numbers are " + num1 + ", " + num2 + ", " + num3 + ", and " + num4);

min = num1;
if (num2 < min) {
    min = num2;
}
if (num3 < min) {
    min = num3;
}
if (num4 < min) {
    min = num4;
}

System.out.println("The smallest number is " + min);
首先,您当前的范围不包括10,Math.random永远不会返回1.0,我强烈建议您将该限制设置为变量。接下来,我将依次调用Math.minint和int来代替寻找最小值的长链比较。最后,我更喜欢格式化io而不是手动字符串连接。像

int limit = 11;
int num1 = (int) (Math.random() * limit);
int num2 = (int) (Math.random() * limit);
int num3 = (int) (Math.random() * limit);
int num4 = (int) (Math.random() * limit);
System.out.printf("The four random numbers are %d, %d, %d, and %d%n", 
        num1, num2, num3, num4);
System.out.printf("The smallest number is %d%n", 
        Math.min(num4, Math.min(num3, Math.min(num2, num1))));

我会做一些不同的事情来避免重复

    Random rand = new Random();
    Scanner scan = new Scanner(System.in);

    System.out.println("How many numbers are you planning to add?");

    int numOfNumbers = scan.nextInt();

    System.out.println("Max number?");

    int maxNum = scan.nextInt();

    int[] nums = new int[numOfNumbers];

    for (int i = 0; i < nums.length; i++) {
        nums[i] = rand.nextInt(maxNum+1);
        System.out.println("numbers: " + nums[i]);
    }

    Arrays.sort(nums);
    System.out.println("your lowest num = " + nums[0]);

您的第二个if语句中有一个输入错误:否则,如果要获得额外点数,请找出如何从随机数中找到最低的数。@JacobG。非常感谢你,现在一切正常!有趣的是,一个小错误如此容易被忽略。@Kaiju-如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。公认的答案有助于未来的访问者自信地使用解决方案。检查以了解如何做到这一点。感谢你的头部有10没有包括只是不得不改变10到11,它的工作!但我必须使用和if语句,它是作业所必需的。还有,我不明白你的意思,因为它永远不会返回1.0?生成的数字为1。@Kaiju Math.random将返回一个介于0和0.99999999之间的值,例如,它不包括1;因为您可以将结果乘以1,但是Math.random返回的值显式排除1.0。如果您没有将您的要求包括在问题中,我们怎么可能知道您的要求?可以理解,但我确实将其包括在我的问题中,…使用一个它必须是分配决策控制结构的唯一一个,但我理解混淆,因为我没有将it指定为if语句,只是一个决定structure@Kaiju但是你没有提到你必须使用if。是的,我只是编辑了我的回复,我道歉!