为什么我的'如果'在我的声明中为什么'循环不改变我的一个对象?

时间:2016-10-08 06:09:20

标签: java if-statement while-loop

我是Java的新手并创建了一个简单的程序,它从另一个程序输出信息并通过命令行使用它来循环。无论我看多少次,我都无法弄清楚为什么(minValue>值'不会改变minValue。

输出给出一些可能产生minValue的信息:

Count:3
Minimum: 0 @
Maximum: 75 @ DummyDate3 DummyTime3
Average: 45.00

这是while循环的结果吗?

int minValue = 0;
    int maxValue = 0;
    String minValueTime = "";
    String minValueDate = "";
    String maxValueDate = "";
    String maxValueTime = "";
    int count = 0;
    double average = 0;

    /*
     * For as long as input is going through A date, a time, and a value
     * will come through as a loop If the minimum value is less than the
     * value coming through The minimum value will become the value. If the
     * maximum value is less than the value, the maximum value will become
     * the value.
     */
    while (input.hasNext() == true) {
        String date = (input.next());
        String time = (input.next());
        int value = (input.nextInt());
        if (minValue > value) {
            minValue = value;
            minValueDate = date;
            minValueTime = time;
        }
        if (maxValue < value) {
            maxValue = value;
            maxValueDate = date;
            maxValueTime = time;
        }
        count++;
        average = average + value;
    }

    input.close();

    System.out
            .printf("Count:%d%nMinimum: %d @ %s %s%nMaximum: %d @ %s %s%nAverage: %.2f%n",
                    count, minValue, minValueDate, minValueTime, maxValue,
                    maxValueDate, maxValueTime, average / count);
}

编辑:我尝试过Integer.MAX_VALUE和MIN_VALUE,但它们都分别导致MAX_VALUE和MIN_VALUE的值。

2 个答案:

答案 0 :(得分:2)

分配给min的第一个值是0.如果每个读取的整数大于0,它将永远不会改变。你真正需要做的是确定minValue和maxValue的最大值和最小值:

int minValue = Integer.MAX_VALUE;
int maxValue = Integer.MIN_VALUE;

这样,第一个读取的值很可能会低于当前的最小值,第一个值也将高于当前的最大值。

这些值的最小值不能高于此值,最大值也不能低于此值。

答案 1 :(得分:1)

使用Integer.MAX_VALUEInteger.MIN_VALUE的上述答案可以正常使用,但如果您知道要循环的数组或输入,则经常使用的另一种技术是至少有一个条目是初始化minValuemaxValue到第一个条目。

e.g。

int firstEntry = input.nextInt();
int minValue = firstEntry;
int maxValue = firstEntry;

while (input.hasNext()) {
    int currentVal = input.nextInt();
    minValue = Math.min(minValue, currentVal);
    maxValue = Math.max(maxValue, currentVal);
}