数组java中的最小值

时间:2018-06-07 04:13:05

标签: java arrays

我正在编写一个编码项目,我必须让用户输入五个特定的浮点值。然后根据这些值,我必须获得总数,最大值,最小值,然后应用兴趣。我现在被困在从阵列中获取最小值。我已经能够获得最大值但是当我打印最小值时,我得到0.0。有什么想法吗?

import java.util.Scanner;

public class float_assignment {
    public static void main(String[] args) {
        float[] userNum = new float[5];
        float total = 0;
        float average = 0;
        float maximum = userNum[0];
        float minimum = userNum[0];
        float interest = 0;
        int i = 0;
        Scanner scnr= new Scanner(System.in);

        for (i = 0; i <= 4; ++i) {
            System.out.println("Please enter a number with a single decimal value:");
            userNum[i] = scnr.nextFloat();
        }

        for (i = 0; i < userNum.length; ++i) {
            if (userNum[i] > maximum) {
                maximum = userNum[i];
            }
        }

        for (i = 0; i < userNum.length; ++i) {
            if(userNum[i] < minimum) {
                minimum = userNum[i];
            }
        }

        total = userNum[0] + userNum[1] + userNum[2] + userNum [3] + userNum [4];

        System.out.println("");
        System.out.println("Total value is: " + total);
        System.out.println("");
        System.out.println("Maximum Vaule is: " + maximum);
        System.out.println("");
        System.out.println("Minimum Vaule is: " + minimum);
    }
}

5 个答案:

答案 0 :(得分:2)

问题出在这个

float[] userNum = new float[5];
.. //some other declarations
float minimum = userNum[0];

当你创建一个float类型的数组时,所有的元素都被初始化为0.0(显然你只输入大于0的正数)

请参阅:java: primitive arrays — are they initialized?

要解决此问题,请在从控制台输入数字后初始化minimum(也可能是maximum

for(i = 0; i<=4; ++i) {
    System.out.println("Please enter a number with a single decimal value:");
userNum[i]= scnr.nextFloat();
}
minimum = maximum = userNum[0];
//Proceed to find max and min

请注意,您不需要两个循环来查找最小值和最大值,并且可以将它们合并为一个。

for(i = 0; i < userNum.length; ++i ) {
    if(userNum[i]> maximum) {
        maximum = userNum[i];
    }
    if(userNum[i] < minimum) {
        minimum = userNum[i];
    }
}

答案 1 :(得分:2)

问题在于最小值的初始值。它目前设为0。

if(userNum[i] < minimum)

因此永远不会成立(假设为正值)。因此,您需要在开始循环之前将最小值设置为最大值。或者将其设置为float允许的最大值。

答案 2 :(得分:1)

Java 8版本:

OptionalDouble min = IntStream.range(0, userNum.length).mapToDouble(i -> userNum[i]).min();
float minimum= (float) min.getAsDouble();

答案 3 :(得分:0)

这是因为在您的初始化中 - float userNum [] = new float [5];

默认情况下,数组userNum使用全零进行初始化,它看起来像

userNum = [0.0,0.0,0.0,0.0,0.0]

因此最大值和最小值也用0.0

初始化

您可能会在输入中输入所有正值,这就是为什么您的最大值显示正确但最小值仍为0.0

为了避免在从用户获取for循环中的数组的第一个值之后初始化最大值和最小值。

在数组assignmet的for循环中添加此if语句

if(i==0)
        {
            maximum=minimum=userNum[0];
        }

答案 4 :(得分:0)

请注意,按照惯例,建议以大写字母开始您的班级名称。 :) 在这里,您应用的逻辑是错误的。要使其正常工作,您需要在现有循环中添加另一个for循环。那么变量&#39;最小值&#39;必须在外部for循环的每次迭代期间更新,最后,将if条件放在inner for循环中。检查下面给出的更新代码:

for(i = 0; i< userNum.length; ++i) {
            minimum = userNum[0];     //updating value at each iteration.
            for(i = 0; i < userNum.length; ++i) {  //newly added loop.

                if(userNum[i] < minimum) {

                    minimum = userNum[i];
                }
            }
        }