iT邦幫忙

2025 iThome 鐵人賽

DAY 15
0

讓程式碼更好讀、更乾淨,不改功能,只讓程式變更好看

程式碼:
因為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("血壓狀態大致正常,請保持良好生活作息!");
        }
    }

上一篇
根據數據給出簡單的報告
下一篇
自行決定輸入天數
系列文
30 天完成:血壓健康追蹤系統16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言