我是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的值。
答案 0 :(得分:2)
分配给min的第一个值是0.如果每个读取的整数大于0,它将永远不会改变。你真正需要做的是确定minValue和maxValue的最大值和最小值:
int minValue = Integer.MAX_VALUE;
int maxValue = Integer.MIN_VALUE;
这样,第一个读取的值很可能会低于当前的最小值,第一个值也将高于当前的最大值。
这些值的最小值不能高于此值,最大值也不能低于此值。
答案 1 :(得分:1)
使用Integer.MAX_VALUE
和Integer.MIN_VALUE
的上述答案可以正常使用,但如果您知道要循环的数组或输入,则经常使用的另一种技术是至少有一个条目是初始化minValue
和maxValue
到第一个条目。
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);
}