4 回答
TA贡献1853条经验 获得超9个赞
解决这个问题的关键点是维护在循环外定义的最小值和最大值的状态。特别是,最小值应该用最大可能的整数值作为种子,而最大值可以用零作为种子。
public static void main(String[] args) {
int minimum = Integer.MAX_VALUE;
int maximum = 0;
int total = 0;
int counter = 0;
Scanner keyb = new Scanner(System.in);
while (true) {
int num = keyb.nextInt();
if (num <= 0) {
System.out.println("Exiting input loop.");
break;
}
if (num < minimum) {
minimum = num;
}
if (num > maximum) {
maximum = num;
}
total += num;
++counter;
}
System.out.println("minimum: " + minimum);
System.out.println("maximum: " + maximum);
System.out.println("average: " + (total / counter));
我省略了一些事情,例如处理用户没有在扫描仪中输入有效整数的可能性。此外,我假设用户总是会输入至少一个有效整数。如果不是,我们将不得不在最后处理平均算术以避免被零除。
TA贡献1848条经验 获得超6个赞
做这件事有很多种方法。如果我们想通过对现有代码进行最少的更改来做到这一点,我会说最简单的选择是添加一个布尔标志,指示是否继续循环:
在你的 while 循环之前
boolean userWantsToQuit = false;
这应该是你的循环条件:
while (keyb.hasNextInt() && !userWantsToQuit)
然后在您的 while 循环中,您需要在其他 if 语句之前添加此 if 语句
if(n<=0){userWantsToQuit=true}
您可能还想将其他 if 语句切换为 else if 语句附加到此条件 - 否则您将始终得到 0 或您用来退出的负数作为输入的最小数字。
您还可以使用 break 语句而不是布尔标志 - 这是个人喜好问题。出于某种原因,我总是被教导要避免 break 语句,所以我通常使用标志,但两者都是有效的方法。
这不是最惯用的解决方案,但它是最相似地遵循您已经设置的模式的解决方案。
TA贡献1951条经验 获得超3个赞
如果你想让它更像 Java-8,就像一个想法。
首先,您从用户那里收集所有整数
List<Integer>
然后计算
IntSummaryStatistics
并提取最小值、最大值和平均值:
result = list.stream().collect(Collectors.summarizingInt(Integer::intValue));
min = result.getMin();
max = result.getMax();
average = result.getAverage();
TA贡献1813条经验 获得超2个赞
您走在正确的轨道上,但是您不需要avg在代码顶部预先声明变量,因为它只是在最后计算的。
对于循环退出条件,当输入小于或等于零时,使用 if 语句中断 while 循环:
import java.util.Scanner;
public class Sequence2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = 0, overallMax = 0, overallMin = Integer.MAX_VALUE;
double sum = 0;
System.out.println("Enter a sequence of positive integers, which will end with either 0 or a negative integer. ");
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
if (num <= 0) {
scanner.close();
break;
}
overallMax = Math.max(overallMax, num);
overallMin = Math.min(overallMin, num);
count++;
sum += num;
} else {
System.out.println("ERROR: Invalid Input. Enter a integer!");
scanner.next();
}
}
System.out.println("The maximum value is: " + overallMax);
System.out.println("The minimum value is: " + overallMin);
double avg = sum / count;
System.out.println("Average: " + avg);
}
}
用法示例:
Enter a sequence of positive integers, which will end with either 0 or a negative integer.
4
a
ERROR: Invalid Input. Enter a integer!
2
6
-1
The maximum value is: 6
The minimum value is: 2
Average: 4.0
添加回答
举报