【发布时间】:2016-10-08 06:09:20
【问题描述】:
我是 Java 新手,我正在创建一个简单的程序,该程序从另一个程序获取信息输出并通过命令行循环使用它。无论我看多少次,我都无法弄清楚为什么'if(minValue> value'不会改变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 的值。
【问题讨论】:
-
minValue > value只会在您的输入为负整数时评估为 true,因为minValue已初始化为 0。这可能不是您想要的。 -
将 minValue 分配给最高数字,将 maxValue 分配给最低数字。
-
对于这种模式,您通常希望将 Min 初始化为
Integer.MAX_VALUE并将 max 初始化为Integer.MIN_VALUE。见here -
不过,它也使用 Integer.MIN_VALUE 执行此操作,结果为“-2147482168”。 0 是唯一允许 maxValue 产生除 '2147482168' 以外的任何值。
标签: java if-statement while-loop