从双数组获取最小值不起作用

时间:2019-05-14 04:39:12

标签: java arrays double minimum

我正在尝试从双精度数组中获取最小值和最大值。最大值可以正常工作,但是最小值似乎始终为零。获得最小值的最佳方法是什么?请注意,我不能在本练习中使用for循环,而使用while循环。

public class LoopingFloats {

    public static void main(String[] args) {
        double[] inputHolder = new double[5];
        int inputCounter = 0;
        double total = 0.0d;
        double average = 0.0d;
        double maximum = 0.0d;
        double minimum = inputHolder[inputCounter];
        double interestRate = 0.20d;
        double interestAmount = 0.0d;

        Scanner scnr = new Scanner(System.in);

        while(inputCounter <= 4){
            System.out.println("Enter number " + (inputCounter + 1) + ": ");
            inputHolder[inputCounter] = scnr.nextDouble();

            if(inputHolder[inputCounter] >  maximum){
                maximum = inputHolder[inputCounter];
            }
            if(inputHolder[inputCounter] <  minimum){
                minimum = inputHolder[inputCounter];
            }

            total = total + inputHolder[inputCounter];

            inputCounter += 1;

        }

    }

        average = total / 5;
        interestAmount = total * interestRate;

        System.out.println("Total: " + total);
        System.out.println("Average: " + average);
        System.out.println("Maximum: " + maximum);
        System.out.println("Minimum: " + minimum);
        System.out.println("Interest for total at 20%: " + interestAmount);
    }

}

3 个答案:

答案 0 :(得分:1)

问题出在这一行:

double minimum = inputHolder[inputCounter];

Java将新变量和新数组的所有元素初始化为0值。 See here.

因此,默认情况下,您的minimum变量设置为0,并且如果数组的值大于0,则minimum变量将不会更新,因为0小于所有其他正值。 / p>

您需要将其设置为一个非常大的值,例如99999,或者您可以使用Double.MAX_VALUE,它将为您提供两倍可以存储的最大值。

答案 1 :(得分:0)

我将使用DoubleSummaryStatistics,其中包含您的所有必需信息(我也希望使用格式化的IO)。喜欢

double[] inputHolder = new double[5];
double interestRate = 0.20;
Scanner scnr = new Scanner(System.in);
int i = 0;
while (i < 5) {
    System.out.printf("Enter number %d: ", i + 1);
    inputHolder[i] = scnr.nextDouble();
    i++;
}
DoubleSummaryStatistics dss = Arrays.stream(inputHolder).summaryStatistics();
System.out.printf("Total: %.2f%n", dss.getSum());
System.out.printf("Average: %.2f%n", dss.getAverage());
System.out.printf("Maximum: %.2f%n", dss.getMax());
System.out.printf("Minimum: %.2f%n", dss.getMin());
System.out.printf("Interest for total at 20%%: %.2f%n", dss.getSum() * interestRate);

答案 2 :(得分:0)

除了变量minimum的初始化外,其他一切似乎都不错。 inputHolder[inputCounter] = scnr.nextDouble();声明后在while循环中初始化它

inputHolder[inputCounter] = scnr.nextDouble();
if (inputCounter == 0) minimum = inputHolder[inputCounter];

希望这可以解决您的问题。