Java min finder无法正常工作

时间:2015-11-12 17:36:14

标签: java loops if-statement min

这是我到目前为止的代码片段。我的问题是min值是Integer.MAX_VALUE,而不是我想要的值。 iSpeedMph和压力都是一维整数数组。

    //calculating mins
    Integer min = Integer.MAX_VALUE;
    int minSpeed = Integer.MAX_VALUE;
    int minPressure = Integer.MAX_VALUE;
    for(i = 0; i < iSpeedMph.length; i++)
    {
        if (min > iSpeedMph[i])
        {
            min = iSpeedMph[i];
            minSpeed = iSpeedMph[i];
        }
    }

    min = Integer.MAX_VALUE;

    for(i = 0; i < pressure.length; i++)
    {
        if (min > pressure[i])
        {
            min = pressure[i];
            minPressure = pressure[i];
        }
    }
...
    System.out.printf("%7s%2s%-9s%4s%8s%5s%13.3s%5s%16.2s\n", "Minimum",  " ", " ", " ", " ", " ", minPressure, " ", minSpeed);

当我打印出最后一行时,终端显示214表示压力,21表示速度,没有格式化,表示它们都是Integer.MAX_VALUE。

5 个答案:

答案 0 :(得分:2)

您正在检查当前项目是否大于当前最小值Integer.MAX_VALUE,但您要检查当前项目是否小于当前最小值,例如

if (iSpeedMph[i] < min)

同样适用于其他最小确定。

答案 1 :(得分:2)

测试

if (iSpeedMph[i] > min) 

始终返回false。您必须撤消比较

if (iSpeedMph[i] < min) 

或作为替代

if (min > iSpeedMph[i])

答案 2 :(得分:1)

以下条件永远不会对任何整数都成立,因为minInteger.MAXVALUE

if (iSpeedMph[i] > min)

只需将其初始化为0,检查您是否正在搜索数组中的min,或者使用第一个数组值分配min并从第2个元素循环数组。

答案 3 :(得分:0)

if (iSpeedMph[i] > min)这怎么能给你新的最小值?

另外,请使用已为您编写的min方法,例如https://stackoverflow.com/a/1658144/499922

答案 4 :(得分:0)

正如其他人所指出的,你在if语句中的比较是错误的。但是使用Java 8流来查找数组中的min和max非常简单:

int minSpeed = Arrays.stream(iSpeedMph).min().get();
int minPressure = Arrays.stream(pressure).min().get();