官术网_书友最值得收藏!

3.2.1 條件分支

在現實生活中,常常需要在岔路口抉擇走去何方,往南還是往北,向東還是向西。在Java編程中,利用if語句可判斷接下來要做什么,比如:如果某個條件成立,就執行某種處理;否則執行另一種處理。if語句的具體格式為“if (條件) { /*條件成立時的操作代碼*/ } else { /*條件不成立時的操作代碼*/ }”,其中后面的else分支是可選的。下面是一個if判斷的簡單代碼示例(完整代碼見本章源碼的src\com\control\process\Condition.java):

        System.out.println("涼風有信,秋月無邊。打二字");
        System.out.println("獲取“涼風有信”的謎底請按1,獲取“秋月無邊”的謎底請按2");
        Scanner scan=new Scanner(System.in);  // 從控制臺接收輸入文本
        int seq=scan.nextInt();  // nextInt方法表示接收一個整數,以回車鍵結尾
        if (seq == 1) {  // 按1時打印“涼風有信”的謎底
            System.out.println("涼風有信的謎底是“諷”");
        }
        if (seq == 2) {  // 按2時打印“秋月無邊”的謎底
            System.out.println("秋月無邊的謎底是“二”");
        }

上面的例子,目的是根據輸入的數字來顯示對應的謎底,當輸入數字1時,日志打印“涼風有信”的謎底;當輸入數字2時,日志打印“秋月無邊”的謎底。然而,如果輸入其他數字,就什么都不打印,這樣未免太嚴格了,不如對所有非1的數字,都自動轉換成數字2。此時else分支就派上用場了,凡是非1的數字,自動默認變為數字2。于是,補充了自動轉換數字的賦值代碼如下:

        if (seq == 1) {  // 為1的情況
            seq=1;
        } else {  // 不為1的情況
            seq=2;
        }

以上的賦值轉換代碼雖然實現的功能很簡單,但是足足占用了5行代碼,著實拖泥帶水。仔細分析它的代碼邏輯,其實包括3個要素,其一為判斷條件,其二為條件滿足時的賦值,其三為條件不滿足時的賦值,因而Java引入了新的三元運算符“?:”加以優化。該運算符的完整形式為“式子A?式子B:式子C”,當式子A成立時,運算結果為B,否則運算結果為C。如此一來,先前的數值轉換代碼可以改寫成下面這樣的(完整代碼見本章源碼的src\com\control\process\Condition2.java):

        // “式子A ? 式子B : 式子C”里的問號加冒號構成了一個三元運算符
        // 當式子A成立時,運算結果為B,否則(式子A不成立)結果為C
        seq=seq==1?1:2;  // 等價于 seq=(seq==1)?1:2

改寫后的代碼僅有一行而已,盡管未出現if和else的身影,但它是一種從條件語句簡化來的條件運算符。

當然,運算符“?:”最終是為了得到條件判斷的運算結果,倘若業務邏輯并不要求返回什么數值,而是要求執行某項動作(比如打印日志),那么這個三元運算符便不再適用了。例如,前面的文字猜謎游戲,假設不需要對變量seq轉換數值,而是發現非1數字時直接打印“秋月無邊”的謎底,則應當書寫完整的if/else語句,不可也無法再套用運算符“?:”。此時修改后的代碼就變成下面這樣了(完整代碼見本章源碼的src\com\control\process\Condition3.java):

        if (seq == 1) {  // 條件式子為真時,進入if分支處理
            System.out.println("涼風有信的謎底是“諷”");
        } else {  // 否則(條件式子為假),進入else分支處理
            System.out.println("秋月無邊的謎底是“二”");
        }

所以,三元運算符“?:”僅適用于需要返回計算結果的場合。

主站蜘蛛池模板: 肇庆市| 新宁县| 应城市| 元江| 凤翔县| 岢岚县| 新晃| 阿拉善左旗| 阆中市| 永仁县| 津南区| 漾濞| 宾川县| 南川市| 龙海市| 扎赉特旗| 阿拉尔市| 汝南县| 武隆县| 卫辉市| 宁波市| 田东县| 四子王旗| 贵港市| 西城区| 会东县| 法库县| 息烽县| 二连浩特市| 永安市| 百色市| 会理县| 民丰县| 贵德县| 左权县| 桦南县| 天峨县| 临洮县| 沽源县| 宜昌市| 宁都县|