讓程式碼更好讀、更乾淨,不改功能,只讓程式變更好看
程式碼:
因為main()裡的東西太長了,方法名稱有些不夠直覺且計算的地方全部都混再一起,如果哪裡有出錯的話會很難找到錯誤
1.printAverage()改成calculateAverage()
2.更改inputAllDaysData()、showReport()
3.以後要改計算平均值只需要改一個地方,如果需要改輸入流程也只要改inputAllDaysData()
4.將重複或太長的程式碼抽成一個小方法
-將輸入的流程拆成一個方法
public static void inputAllDaysData() {
for (int i = 0; i < systolicArray.length; i++) {
recordTodayData(i);
}
}
-將輸出報告拆成一個方法
public static void showReport() {
printAllData();
printAverageAndTrend();
printMaxMinAndVariation();
printStatusSummaryAndAdvice();
}
後面接著印出當天的狀態
public static void recordTodayData(int dayIndex) {
Scanner scanner = new Scanner(System.in);
System.out.println("=== 第 " + (dayIndex + 1) + " 天輸入 ===");
System.out.print("請輸入收縮壓: ");
systolicArray[dayIndex] = scanner.nextInt();
System.out.print("請輸入舒張壓: ");
diastolicArray[dayIndex] = scanner.nextInt();
System.out.print("請輸入脈搏: ");
pulseArray[dayIndex] = scanner.nextInt();
statusArray[dayIndex] = getStatus(systolicArray[dayIndex], diastolicArray[dayIndex]);
System.out.println("今日狀態:" + statusArray[dayIndex] + "\n");
}
-將判斷狀態抽成一小方法
public static String getStatus(int systolic, int diastolic) {
if (systolic >= 140 || diastolic >= 90) {
return "偏高";
} else if (systolic < 90 || diastolic < 60) {
return "偏低";
} else {
return "正常";
}
}
後面接著印出目前所有紀錄後接印出平均值的程式碼
public static void printAllData() {
System.out.println("=== 目前所有紀錄 ===");
for (int i = 0; i < systolicArray.length; i++) {
System.out.println("第 " + (i + 1) + " 天:" +
systolicArray[i] + "/" + diastolicArray[i] +
" mmHg, 脈搏:" + pulseArray[i] +
" → 狀態:" + statusArray[i]);
}
}
public static void printAverageAndTrend() {
double systolicAvg = calculateAverage(systolicArray);
double diastolicAvg = calculateAverage(diastolicArray);
double pulseAvg = calculateAverage(pulseArray);
System.out.println("\n=== 平均值 ===");
System.out.println("平均收縮壓:" + systolicAvg);
System.out.println("平均舒張壓:" + diastolicAvg);
System.out.println("平均脈搏:" + pulseAvg);
System.out.println("\n=== 趨勢分析 ===");
if (systolicAvg >= 135 || diastolicAvg >= 85) {
System.out.println("整體狀態:偏高,建議注意飲食或生活作息");
} else if (systolicAvg < 90 || diastolicAvg < 60) {
System.out.println("整體狀態:偏低,建議多補充水分或休息");
} else {
System.out.println("整體狀態:正常,請保持!");
}
}
-將計算平均值抽成一個方法
public static double calculateAverage(int[] data) {
int sum = 0;
for (int value : data) {
sum += value;
}
return (double) sum / data.length;
}
後接著印出最高最低血壓日
public static void printMaxMinAndVariation() {
int maxIndex = getMaxIndex(systolicArray);
int minIndex = getMinIndex(systolicArray);
int variation = systolicArray[maxIndex] - systolicArray[minIndex];
System.out.println("\n=== 最高 / 最低血壓日 & 變異幅度 ===");
System.out.println("最高血壓:第 " + (maxIndex + 1) + " 天 → " +
systolicArray[maxIndex] + "/" + diastolicArray[maxIndex]);
System.out.println("最低血壓:第 " + (minIndex + 1) + " 天 → " +
systolicArray[minIndex] + "/" + diastolicArray[minIndex]);
System.out.println("收縮壓變異幅度:" + variation + " mmHg");
if (variation >= 30) {
System.out.println("血壓波動較大,建議注意作息");
} else {
System.out.println("血壓波動穩定");
}
}
-抽取最大最小值計算方法
public static int getMaxIndex(int[] data) {
int maxIndex = 0;
for (int i = 1; i < data.length; i++) {
if (data[i] > data[maxIndex]) {
maxIndex = i;
}
}
return maxIndex;
}
最後是狀態統計跟建議
public static void printStatusSummaryAndAdvice() {
int highCount = 0, lowCount = 0, normalCount = 0;
for (String status : statusArray) {
if (status.equals("偏高")) highCount++;
else if (status.equals("偏低")) lowCount++;
else normalCount++;
}
System.out.println("\n=== 狀態統計 ===");
System.out.println("偏高天數:" + highCount);
System.out.println("偏低天數:" + lowCount);
System.out.println("正常天數:" + normalCount);
System.out.println("\n=== 健康建議 ===");
if (highCount > lowCount && highCount > normalCount) {
System.out.println("偏高天數較多,建議少鹽少油,保持運動!");
} else if (lowCount > highCount && lowCount > normalCount) {
System.out.println("偏低天數較多,建議注意休息,多補充水分!");
} else {
System.out.println("血壓狀態大致正常,請保持良好生活作息!");
}
}