代碼片段:
if (x > 0 && x < 101) {
grade = x >= 90 ? 'A' : x >= 60 ? 'B' : 'C';
System.out.println("Lev:" + grade);
}
這行代碼乍看像「三目運算符」,實際是兩個條件表達式嵌套。
grade = (x >= 90) ? 'A' : ((x >= 60) ? 'B' : 'C');
// ↑條件1↑ ↑真值1↑ ↑假值1(又是條件表達式)↑
等價的 if-else 寫法:
if (x >= 90) {
grade = 'A';
} else {
if (x >= 60) {
grade = 'B';
} else {
grade = 'C';
}
}
x >= 90 → 是 → 賦值 'A' → 結束x >= 60 → 是 → 賦值 'B' → 結束'C' → 結束分級邏輯:90-100→A, 60-89→B, 0-59→C。
?: 右結合:a ? b : c ? d : e 解析為 a ? b : (c ? d : e)grade = x >= 90 ? 'A' : (x >= 60 ? 'B' : 'C');超過 2 層嵌套三元運算符,可讀性急劇下降。推薦替代方案:
if (x >= 90) grade = 'A';
else if (x >= 60) grade = 'B';
else grade = 'C';
char[] grades = {'C','C','C','C','C','C', // 0-5
'C','C','C','C','C','C', // 6-11
// ... 0-59 都是 C
'B','B','B','B','B','B', // 60-65
'B','B','B','B','B','B', // 66-71
// ... 60-89 都是 B
'A','A','A','A','A','A', // 90-95
'A','A','A','A','A'}; // 96-100
// 使用:grade = (x >= 0 && x <= 100) ? grades[x] : '?';
grade = switch (x / 10) {
case 10, 9 -> 'A';
case 8, 7, 6 -> 'B';
default -> 'C';
};
if-else、switch 或查表法