編寫一個 Java 程序,讀取未指定數量的整數,統計正數與負數的個數,計算所有輸入值的總和與平均值(不計入 0)。當輸入 0 時程序結束,平均值以浮點數顯示。
import java.util.Scanner;
public class TextXXXXX {
public static void main (String[] args){
Scanner input = new Scanner(System.in);
int count1 = 0 , count2 = 0 , sum = 0 , num;
double avg;
System.out.print("請輸入一個整數,輸入0時結束:");
num = input.nextInt();
while(num != 0){
System.out.print("請輸入一個整數,輸入0時結束:");
num = input.nextInt();
while(num > 0)
count1+=1;
while(num < 0)
count2+=1;
sum+=num;
}
avg = sum /(count1 + count2);
System.out.println("整數個數為:" + count1 + " 負數個數為:" + count2);
System.out.println("和為:" + sum);
System.out.println("平均值為:"+ avg);
}
}
主要問題:
while(num > 0) 和 while(num < 0),這會導致當輸入正數或負數時進入無限循環,因為 num 值未在循環內改變。if 判斷而非 while 循環。public static void main(String[] args) {
int count1 = 0, count2 = 0, sum = 0, num;
double avg;
Scanner input = new Scanner(System.in); // Scanner 提升到循環外,避免重複創建
for (;;) { // 無限循環,內部通過 break 退出
System.out.print("請輸入一個整數,輸入0時結束:");
num = input.nextInt();
if (num == 0) break; // 輸入 0 結束
if (num > 0) count1++;
if (num < 0) count2++;
sum += num;
}
// 避免除以零,並確保浮點數運算
if (count1 + count2 > 0) {
avg = sum * 1.0 / (count1 + count2);
} else {
avg = 0;
}
System.out.println("正數個數為:" + count1 + " 負數個數為:" + count2);
System.out.println("和為:" + sum);
System.out.println("平均值為:" + avg);
}
Scanner 實例化移至循環外,提升性能。for(;;) 或 while(true) 搭配 break 控制流程,結構更清晰。if 替換 while 進行正負數判斷,避免死循環。1.0 強制提升為 double 運算。