題目:濕熱指數(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");
}
}
鏈結到這頁!