題目:濕熱指數(humidex)是加拿大氣象學家用來反映溫度和濕度的綜合影響的度量衡。當溫度為30oC(86oF)和露點為15oC(59oF)時,濕熱指數是34(注意濕熱指數是一個沒有度量單位的數,這個值表示大約的攝氏溫度值)。
輸入:輸入包含了許多行,除了最後一行,每行由空格分開的4個項目組成:一個字母,一個數字,第二個字母,第二個數字。每個字母說明後面跟著的數字的含義:T表示溫度,D表示露點,H表示濕熱指數。輸入結束行為字母E。
輸出:對於每行輸入,除了最後一行,產生一行輸出。輸出的形式如(T 數字 D 數字 H 數字)。
import java.util.Scanner; public class Humidex { static String a, b; //定義兩個測試旗標字元 static double A, B, temp, hum, dew; public static double dohum(double tt, double dd){ //根據溫度tt和露點dd計算濕熱指數 double e= 6.11 * Math.exp(5417.7530 * ((1/273.16) - (1/(dd+273.16)))); double h = (0.5555) * (e - 10.0); return tt + h; } public static double dotemp(double hh, double dd){ //根據濕熱指數hh和露點dd計算溫度 double e= 6.11 * Math.exp(5417.7530 * ((1/273.16) - (1/(dd+273.16)))); double h = (0.5555) * (e - 10.0); return hh - h; } public static double dodew(double hh, double tt){ //根據濕熱指數hh和溫度tt計算露點 double x = 0; //露點值及其增量值初始化 double delta = 100; for(delta = 100; delta > .00001; delta *= .5){ // 迴圈:增量值從100開始,每次迴圈減少一半,若根據目前溫度tt和露點x得出的濕熱指數大於濕熱指數hh,則露點x減少一個增量值,否則露點x增加一個增量值,這個迴圈過程直至增量值<=0.001為止 if(dohum(tt, x) > hh) x -= delta; else x += delta; } return x; } public static void main(String[] args) { Scanner scanIn = new Scanner(System.in); //輸入第1組的資料 if(scanIn.hasNext()) a = scanIn.next(); if(scanIn.hasNext()) A = scanIn.nextDouble(); if(scanIn.hasNext()) b = scanIn.next(); if(scanIn.hasNext()) B = scanIn.nextDouble(); while(a != "E"){ //依次輸入每次天氣預報的兩個測試量,直至輸入結束旗標E temp = hum = dew = -99999; if(a.equals("T")) temp = A; if(a.equals("H")) hum = A; if(a.equals("D")) dew = A; if(b.equals("T")) temp = B; if(b.equals("H")) hum = B; if(b.equals("D")) dew = B; if(hum == -99999) hum = dohum(temp, dew); if(dew == -99999) dew = dodew(hum, temp); if(temp == -99999) temp = dotemp(hum, dew); System.out.printf("T %.1f D %.1f H %.1f\n", temp, dew, hum); scanIn = new Scanner(System.in); //繼續輸入資料 if(scanIn.hasNext()) a = scanIn.next(); if(scanIn.hasNext()) A = scanIn.nextDouble(); if(scanIn.hasNext()) b = scanIn.next(); if(scanIn.hasNext()) B = scanIn.nextDouble(); } System.out.println("End"); } }
鏈結到這頁!