4 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
解決這個(gè)問題的關(guān)鍵點(diǎn)是維護(hù)在循環(huán)外定義的最小值和最大值的狀態(tài)。特別是,最小值應(yīng)該用最大可能的整數(shù)值作為種子,而最大值可以用零作為種子。
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));
我省略了一些事情,例如處理用戶沒有在掃描儀中輸入有效整數(shù)的可能性。此外,我假設(shè)用戶總是會(huì)輸入至少一個(gè)有效整數(shù)。如果不是,我們將不得不在最后處理平均算術(shù)以避免被零除。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊
做這件事有很多種方法。如果我們想通過對(duì)現(xiàn)有代碼進(jìn)行最少的更改來做到這一點(diǎn),我會(huì)說最簡(jiǎn)單的選擇是添加一個(gè)布爾標(biāo)志,指示是否繼續(xù)循環(huán):
在你的 while 循環(huán)之前
boolean userWantsToQuit = false;
這應(yīng)該是你的循環(huán)條件:
while (keyb.hasNextInt() && !userWantsToQuit)
然后在您的 while 循環(huán)中,您需要在其他 if 語句之前添加此 if 語句
if(n<=0){userWantsToQuit=true}
您可能還想將其他 if 語句切換為 else if 語句附加到此條件 - 否則您將始終得到 0 或您用來退出的負(fù)數(shù)作為輸入的最小數(shù)字。
您還可以使用 break 語句而不是布爾標(biāo)志 - 這是個(gè)人喜好問題。出于某種原因,我總是被教導(dǎo)要避免 break 語句,所以我通常使用標(biāo)志,但兩者都是有效的方法。
這不是最慣用的解決方案,但它是最相似地遵循您已經(jīng)設(shè)置的模式的解決方案。

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
如果你想讓它更像 Java-8,就像一個(gè)想法。
首先,您從用戶那里收集所有整數(shù)
List<Integer>
然后計(jì)算
IntSummaryStatistics
并提取最小值、最大值和平均值:
result = list.stream().collect(Collectors.summarizingInt(Integer::intValue));
min = result.getMin();
max = result.getMax();
average = result.getAverage();

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
您走在正確的軌道上,但是您不需要avg在代碼頂部預(yù)先聲明變量,因?yàn)樗皇窃谧詈笥?jì)算的。
對(duì)于循環(huán)退出條件,當(dāng)輸入小于或等于零時(shí),使用 if 語句中斷 while 循環(huán):
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
添加回答
舉報(bào)