2 條件判斷
2-1 if...else...
if( 判斷式 ){
....
}
else if( 判斷式2 ){
...
}
else{
...
}
//PURPOSE:判斷x是奇數還是偶數
int x=1;
if(x%2==0){
System.out.println(x+"是偶數");
}else{
System.out.println(x+"是奇數");
}
------------------------
1是奇數
若沒有{ }的話,銜接在判斷式後的第一行 (只有一行),即為包含在{ }內的語法
//與上方含有{ }程式碼結果相同
if(x%2==0)
System.out.println(x+"是偶數");
else
System.out.println(x+"是奇數");
if(x%2==0)
System.out.println(x+"是偶數");
x++;//error,沒有{ }的話只能放一行而已
else
System.out.println(x+"是奇數");
請一定要使用階層式寫法及{ },才可以避免錯誤,並且幫助下一個工程師閱讀
以下段程式碼為例,直接用眼睛看過去,好像會以為下方三行都是在else被觸發時才會使用,但事實上最下方兩行並不在else的範圍內,僅僅是被錯誤的階層式寫法給誤導了,由此可見加上{ }的重要性
int x=2;
if(x%2==0)
System.out.println(x+"是偶數");
else
System.out.println(x+"是奇數");
x++;
System.out.println(x);
-----------------------------------------
2是偶數
3
- else if
//PURPOSE:幫成績分成甲乙丙丁四種等級
if(score>=90){
System.out.println("甲");
}
else if(score>=80){
System.out.println("乙");
}else if(score>=70){
System.out.println("丙");
}else{
System.out.println("丁");
}
---------------------
若score=95 : 甲
若score=55 : 丁
2-2 ?: (一行版本的if else)
( BooleanStatement )?( TrueResult ):( FalseResult )
System.out.println((score>=60)?"及格":"不及格");
2-3 switch
switch( 判斷變數 ){
case 情況1:
...
break;
case 情況2:
...
break;
default:
break;
}
一個良好的switch寫法,絕對不能少了default !!!
這是一個就連老手工程師都常常會犯的錯誤
或許你少加default在正常的狀況下不會有任何錯誤出現,但當用來進行判斷的變數內容出現bug或是異常,程式碼將變得難以除錯,也可能產生無法預期的連帶錯誤
//PURPOSE:將存在資料庫的LEVEL數字,換成使用者容易看得懂的ABCD階級
switch(level){
case 5: //倘若level=5,他將會向下不斷執行,直到遇到break
case 4:
System.out.println("level A");
break;
case 3:
System.out.println("level B");
break;
case 2:
System.out.println("level C");
break;
case 1:
System.out.println("level D");
break;
default: //當level不在1~5的範圍內時,將會執行以下程式碼
System.out.println("錯誤的level代碼");
break;
}
-----------------------
若level=5 : level A
若level=4 : level A
若level=6 : 錯誤的level代碼
遇到相符合的case後,他會一直往下執行直到遇到了break程式碼才會跳出
所以沒有加break的switch程式是大錯特錯的,請一定要注意
2-4 switch結構和if...else結構該如何取捨?
變數範圍是一個明確的int、short、char時 選擇使用switch
- level只有=1,2,3,4,5這幾種狀況(如上例)
- 12月份只有=1,2,3 ....12種狀況
- 血型只有=A,B,O,AB 4種狀況
篩選條件是有範圍的 選擇使用if...else
- 分類學生成績有90~100 ,80~90 ,...等分類