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

Posted

技术标签:

【中文标题】从双数组中获取最小值不起作用【英文标题】:Getting minimum value from double array not working 【发布时间】:2019-10-01 01:09:06 【问题描述】:

我正在尝试从双精度数组中获取最小值和最大值。最大值工作正常,但是最小值似乎总是为零。获得最小值的最佳方法是什么?请注意,在这个练习中我不能使用 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);
    


【问题讨论】:

您正在使用 0.0 值初始化最小值(double[] 数组元素的默认值。 以下双最小值 = inputHolder[inputCounter];默认情况下将最小值初始化为 0.0。您应该分配 double minimum = Double.MAX_VALUE @akshayapandey 忘记了那里的减号。 不,我们最初希望将最小变量分配给最大值,因此当它找到较小的双精度值时,它可以将其分配给最小值。 【参考方案1】:

除了变量minimum 的初始化之外,一切似乎都正常。在inputHolder[inputCounter] = scnr.nextDouble();statement之后在while循环中初始化它

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

希望这能解决您的问题。

【讨论】:

【参考方案2】:

问题出在这一行:

double minimum = inputHolder[inputCounter];

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

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

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

【讨论】:

【参考方案3】:

我会使用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);

【讨论】:

以上是关于从双数组中获取最小值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

当指针指向数组时,为啥 operator(*) 的值不起作用?

使用参数数组更改 JavaScript 函数的参数值不起作用

OpenCV - 获取 Rtrees 值不起作用 - CopyTo 类型不匹配

动态单选按钮值不起作用[重复]

php pdo 请求对给定值不起作用的地方?

使用 react-select 设置默认值不起作用