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

Java 嵌套三元運算符詳解:grade = x >= 90 ? 'A' : x >= 60 ? 'B' : 'C'

     編輯:程式設計綜合問答

代碼片段:

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';
    }
}

執行邏輯流程

  1. 判斷 x >= 90 → 是 → 賦值 'A' → 結束
  2. 否 → 判斷 x >= 60 → 是 → 賦值 'B' → 結束
  3. 否 → 賦值 '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-else 鏈(最清晰)

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] : '?';

方案三:Switch 表達式

grade = switch (x / 10) {
    case 10, 9 -> 'A';
    case 8, 7, 6 -> 'B';
    default -> 'C';
};

總結

  • 嵌套三元運算符 = 多個條件表達式右結合嵌套
  • 適用於簡單、扁平、2-3 分支的賦值場景
  • 複雜邏輯請用 if-else、switch 或查表法
  • 代碼是給人看的,順手加個括號養成習慣
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved