我必須使用switch case語句在JAVA中編寫程序。我需要使用switch case語句檢查下列條件。但我無法比較switch case語句中的值,我怎樣才能做這個任務。如何使用範圍檢查開關case語句
if Avarage - AVG
AVG ≥ 3.50 「A Pass」
3.49 ≥ AVG ≥ 3.00 「B Pass」
2.99 ≥ AVG ≥ 2.50 「C Pass"
2.49 ≥ AVG ≥ 2.00 「D Pass」
2.00 ≥ AVG 「Fail」
我必須使用switch case語句在JAVA中編寫程序。我需要使用switch case語句檢查下列條件。但我無法比較switch case語句中的值,我怎樣才能做這個任務。如何使用範圍檢查開關case語句
if Avarage - AVG
AVG ≥ 3.50 「A Pass」
3.49 ≥ AVG ≥ 3.00 「B Pass」
2.99 ≥ AVG ≥ 2.50 「C Pass"
2.49 ≥ AVG ≥ 2.00 「D Pass」
2.00 ≥ AVG 「Fail」
您可以使用一系列的if語句或者你可以使用一個TreeMap它實現NavigableMap的接口。它可能看起來像:
TreeMap<Double, String> map = new TreeMap<>();
map.put(0d, "Fail");
map.put(2d, "D Pass");
map.put(2.5, "C Pass");
map.put(3d, "B Pass");
map.put(3.5, "A Pass");
System.out.println(map.floorEntry(1.9).getValue()); //Fail
System.out.println(map.floorEntry(2.49).getValue()); //D
System.out.println(map.floorEntry(2.5).getValue()); //C
System.out.println(map.floorEntry(3d).getValue()); //B
System.out.println(map.floorEntry(3.5).getValue()); //A
所以回到你的榜樣,你可以簡單地調用return map.floorEntry(AVG).getValue();
。
性能方面它會非常接近,尤其是隻有5種不同的情況。我把它留給你來決定哪一個更具可讀性。
Switch在內部使用跳轉表,這就是爲什麼case語句只能測試確切值和最終值的原因。你可以這樣想象一下:
result = jumpTable[key]; // switch pseudo-code
這不是你的編譯代碼中找到,但它在一般同樣的想法,所以我用它來回答你的問題。
任何索引不在該數組中無法訪問,所以如果你有長度爲5的數組,你不能做這樣的事:因爲這僅僅是沒有定義
result = jumpTable[2.3]; // impossible in Java
和Java不能奇蹟般地找出你其實是想向下舍到2.如果你需要編寫能夠理解和轉換的中間值的功能存檔,例如一個簡單的地板功能
result = jumpTable[floor_int(2.3)]; // a solution for a specific case
會做的伎倆一些情況。很顯然,使用的函數實際上需要適合您的問題,所以如果2.3應該指向索引1,您顯然需要在場景後面使用不同的數學算法。
正如assylias寫道,TreeMap的方法floorEntry
是我上面寫的內容的一般化版本,可以用來解決您的問題。
另一種方法是一個標準的if-else鏈是這樣的:
String getTestResult(final double avg) {
if (avg >= 3.5) {
return "A Pass";
} else if (avg >= 3.0) {
return "B Pass";
} else if (avg >= 2.5) {
return "C Pass";
} else if (avg >= 2.0) {
return "D Pass";
} else {
return "Fail";
}
}
這使用數的自然順序,其中指出,(顯然)avg
不能> = 3.5和< = 3.5在相同的時間。
對於你的情況你應該只寫一個函數gradeToIndex
,然後使用替代floor_int
功能的如上面我舉的例子,像
index = (int) Math.round((avg - 2.0) * 2.0);
但是我要做的使用交換機情況下,聲明是一個問題,要求使用Switch case語句。任何人都可以幫助我? – astrodileepa
@astrodileepa如果AVG可以是任何雙打,這不能用switch語句寫入。如果只有某些值被授權(比如0,0.5,1,1.5,2,2.5,3,3.5),那麼這是可能的。你需要提供更多信息。 – assylias
是的,我知道我們不能使用switch case語句來比較值。但這是一個具有挑戰性的問題。規則是不使用if..else語句。我不知道如何處理這種情況。這是非常棘手的問題。 – astrodileepa