Java開發筆記(十六)非此即彼的條件分支

前面花了大量篇幅介紹布爾類型及相應的關係運算和邏輯運算,那可不單單是爲了求真值或假值,更是爲了經過布爾值控制流程的走向。在現實生活中,經常須要在岔路口抉擇走去何方,往南仍是往北,向東仍是向西?在Java編程中,利用if語句可判斷接下來要作什麼,好比說:若是某個條件成立,就進行某種處理;不然的話,就進行另外一種處理。if語句的具體格式爲「if (條件) { /* 條件成立時的操做代碼 */ } else { /* 條件不成立時的操做代碼 */ }」,其中後面的else分支是可選的,下面是個if判斷的簡單代碼示例:java

		System.out.println("涼風有信,秋月無邊。打二字");
		System.out.println("獲取「涼風有信」的謎底請按1,獲取「秋月無邊」的謎底請按2");
		Scanner scan = new Scanner(System.in); // 從控制檯接收輸入文本
		/* nextLine方法表示接收一行文字,以回車鍵結尾 */
		int seq = scan.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) {
			seq = 1;
		} else {
			seq = 2;
		}

 

以上的賦值轉換代碼,雖然實現的功能很簡單,可是足足佔用了五行代碼,着實拖泥帶水。仔細分析它的代碼邏輯,其實包括了三個要素,其一爲判斷條件,其二爲條件知足時的賦值,其三爲條件不知足時的賦值,於是Java引入了新的三元運算符「?:」加以優化。該運算符的完整形式爲「式子A?式子B:式子C」,當式子A成立時,運算結果爲B,不然運算結果爲C。如此一來,先前的數值轉換代碼能夠改寫成下面這樣:優化

		// A?B:C裏的問號加冒號構成了一個三元運算符,當式子A成立時,運算結果爲B,不然(式子A不成立)結果爲C
		seq = seq==1?1:2; // 等價於 seq = (seq==1)?1:2

 

改寫後的代碼僅有一行而已,儘管未出現if和else的身影,但它還是一種從條件語句簡化來的條件運算符。
固然,運算符「?:」最終是爲了獲得條件判斷的運算結果,假若業務邏輯並不要求返回什麼數值,而是要求執行某項動做(好比打印日誌),那麼這個三元運算符便再也不使用了。例如,前面的文字猜謎遊戲,假設不須要對變量seq進行數值轉換,而是發現非1數字時直接打印「秋月無邊」的謎底,則應當書寫完整的if/else語句,不可也沒法再套用運算符「?:」。此時修改後的代碼就變成下面這樣了:日誌

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

因此,三元運算符「?:」僅適用於須要返回計算結果的場合。blog

相關文章
相關標籤/搜索