首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 華氏轉攝氏溫度轉換:系統資源監控與效能測量完整實作

     編輯:程式設計疑難解答

題目需求

  • 重複讀取華氏溫度輸入
  • 轉換為攝氏溫度:C = (F - 32) * 5 / 9
  • 輸出轉換結果
  • 統計記憶體佔用與執行時間

題目截圖

完整實作代碼

import java.util.Scanner;

public class TemperatureConverter {
    public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        long startMemory = runtime.totalMemory() - runtime.freeMemory();
        long startTime = System.currentTimeMillis();
        
        Scanner scanner = new Scanner(System.in);
        System.out.println("華氏轉攝氏溫度轉換器 (輸入非數字結束)");
        System.out.printf("初始記憶體佔用: %,d bytes%n", startMemory);
        
        int count = 0;
        while (scanner.hasNextDouble()) {
            double fahrenheit = scanner.nextDouble();
            double celsius = (fahrenheit - 32) * 5.0 / 9.0;
            
            System.out.printf("輸入: %.2f°F → 輸出: %.2f°C%n", fahrenheit, celsius);
            count++;
        }
        
        long endTime = System.currentTimeMillis();
        long endMemory = runtime.totalMemory() - runtime.freeMemory();
        
        System.out.println("\n=== 執行統計 ===");
        System.out.printf("轉換次數: %d%n", count);
        System.out.printf("耗時: %d ms%n", endTime - startTime);
        System.out.printf("記憶體增長: %,d bytes%n", endMemory - startMemory);
        
        scanner.close();
    }
}

關鍵 API 解析

API用途注意事項
Runtime.getRuntime()取得 JVM 執行環境單例模式
totalMemory()JVM 當前堆記憶體總量含已用+可用
freeMemory()當前可用堆記憶體GC 後較準確
System.currentTimeMillis()毫秒級時間戳適合測量較長操作
System.nanoTime()奈秒級相對時間適合微基準測試

進階:JMX 詳細記憶體監控

import java.lang.management.*;

MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
System.out.printf("堆初始: %,d, 已用: %,d, 承諾: %,d, 最大: %,d%n",
    heapUsage.getInit(), heapUsage.getUsed(), 
    heapUsage.getCommitted(), heapUsage.getMax());

溫度轉換公式驗證

華氏度 (°F)攝氏度 (°C)驗算
320冰點
212100沸點
98.637人體常溫
-40-40兩制相等點

整數除法陷阱提醒

// 錯誤:整數除法截斷
int c = (f - 32) * 5 / 9;  // 5/9 = 0

// 正確:強制浮點運算
double c = (f - 32) * 5.0 / 9.0;
// 或
double c = (f - 32) * 5 / 9.0; // 5/9.0 先算成 double
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved