java基礎:流程控制語句(選擇結構if語句)
(1)順序結構 從上往下,依次執行
Demo: |
class ShunXuJieGouDemo { public static void main(String[] args) { System.out.println("程序開始了");
System.out.println("我愛Java");
System.out.println("程序結束了"); } } |
(2)選擇結構 按照不同的選擇,執行不同的代碼
Java語言提供了兩種選擇結構語句
if語句
switch語句
if語句:
if語句有三種格式
if語句第一種格式:
if(關系表達式) {
語句體
}
執行流程
首先判斷關系表達式看其結果是true還是false
如果是true就執行語句體
如果是false就不執行語句體
Demo: |
class IfDemo { public static void main(String[] args) { int x = 10;
if(x == 10) { System.out.println("x等於10"); }
if(x == 20) { System.out.println("x等於20"); }
System.out.println("over"); } } |
code: if語句的註意事項: A:比較表達式無論簡單還是復雜,結果必須是boolean類型 B:if語句控制的語句體如果是一條語句,大括號可以省略; 如果是多條語句,就不能省略。建議永遠不要省略。 C:一般來說:有左大括號就沒有分號,有分號就沒有左大括號
|
public static void main(String[] args) { int x = 10;
if(x == 10) { System.out.println("x等於10"); }
if((x > 5) || (x == 10)) { System.out.println("x大於或者等於 } System.out.println("-------------------");
int a = 100;
/* if(a == 100) { System.out.println("a的值是100"); } */
if(a != 100) { System.out.println("a的值是100"); System.out.println("over"); } System.out.println("-------------------");
int b = 100; if(b != 100); //這裏其實是有語句體的,只不過是空語句體。
//代碼塊 { System.out.println("b的值是100"); System.out.println("over"); } } |
if語句第二種格式:
if(關系表達式) {
語句體1;
}else {
語句體2;
}
執行流程
首先判斷關系表達式看其結果是true還是false
如果是true就執行語句體1
如果是false就執行語句體2
註意:else後面是沒有比較表達式的,只有if後面有。
Demo: |
public static void main(String[] args) { //判斷兩個數據是否相等
int a = 10; int b = 20;
if(a == b) { System.out.println("a等於b"); }else { System.out.println("a不等於b"); } } |
code: A:獲取兩個數據中較大的值 B:判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數
|
import java.util.Scanner;
class IfTest { public static void main(String[] args) { //創建鍵盤錄入對象 Scanner sc = new Scanner(System.in);
//獲取兩個數據中較大的值 System.out.println("請輸入第一個數據:"); int a = sc.nextInt();
System.out.println("請輸入第二個數據:"); int b = sc.nextInt();
//定義一個變量接收最大值 int max;
if(a > b) { max = a; }else { max = b; }
System.out.println("max:"+max); System.out.println("----------------");
//判斷一個數據是奇數還是偶數 System.out.println("請輸入你要判斷的數據:"); int x = sc.nextInt();
if(x%2 == 0) { System.out.println(x+"這個數據是偶數"); }else { System.out.println(x+"這個數據是奇數"); } } } |
code: 由於if語句的第二種格式剛才也完成了三元運算符可以完成的效果。 所以,我們就認為他們可以完成一樣的操作。 但是,他們就一點區別沒有嗎?肯定不是。
區別: 三元運算符實現的,都可以采用if語句實現。反之不成立。
什麽時候if語句實現不能用三元改進呢? 當if語句控制的操作是一個輸出語句的時候就不能。 為什麽呢?因為三元運算符是一個運算符,運算符操作完畢就應該有一個結果,而不是一個輸出。
|
class IfDemo4 { public static void main(String[] args) { //獲取兩個數據的最大值 int a = 10; int b = 20;
//用if語句實現 int max1; if(a > b) { max1 = a; }else { max1 = b; } System.out.println("max1:"+max1);
//用三元改進 int max2 = (a > b)? a: b; System.out.println("max2:"+max2); System.out.println("----------");
//判斷一個數據是奇數還是偶數,並輸出是奇數還是偶數 int x = 100;
if(x%2 == 0) { System.out.println("100是一個偶數"); }else { System.out.println("100是一個奇數"); }
//用三元改進 //這種改進是錯誤的。 //String s = (x%2 == 0)?System.out.println("100是一個偶數");:System.out.println("100是一個奇數");; } } |
if語句第三種格式:
if(關系表達式1) {
語句體1;
}else if (關系表達式2) {
語句體2;
}
…
else {
語句體n+1;
}
執行流程
首先判斷關系表達式1看其結果是true還是false
如果是true就執行語句體1
如果是false就繼續判斷關系表達式2看其結果是true還是false
如果是true就執行語句體2
如果是false就繼續判斷關系表達式…看其結果是true還是false
…
如果沒有任何關系表達式為true,就執行語句體n+1
Demo: |
import java.util.Scanner;
class IfDemo5 { public static void main(String[] args) { //需求:鍵盤錄入一個成績,判斷並輸出成績的等級。 /* 90-100 優秀 80-90 好 70-80 良 60-70 及格 0-60 不及格 */
//創建鍵盤錄入對象 Scanner sc = new Scanner(System.in);
//錄入數據 System.out.println("請輸入你的考試成績:"); int score = sc.nextInt();
/* if(score>=90 && score<=100) { System.out.println("優秀"); }else if(score>=80 && score<90) { System.out.println("好"); }else if(score>=70 && score<80) { System.out.println("良"); }else if(score>=60 && score<70) { System.out.println("及格"); }else { System.out.println("不及格"); } */ //這樣寫已經滿足我的基本要求,但是可能別人在使用的時候,不會按照你要求的數據給出了。 //在做一個程序的基本測試的時候,一定要考慮這樣的幾個問題: //正確數據,錯誤數據,邊界數據。 //而我們剛才寫的程序並沒有處理錯誤數據,所以這個程序不是很好,要改進 /* if(score>=90 && score<=100) { System.out.println("優秀"); }else if(score>=80 && score<90) { System.out.println("好"); }else if(score>=70 && score<80) { System.out.println("良"); }else if(score>=60 && score<70) { System.out.println("及格"); }else if(score>=0 && score<60){ System.out.println("不及格"); }else { System.out.println("你輸入的成績有誤"); } */
//另一種判斷改進 if(score<0 || score>100) { System.out.println("你輸入的成績有誤"); }else if(score>=90 && score<=100) { System.out.println("優秀"); }else if(score>=80 && score<90) { System.out.println("好"); }else if(score>=70 && score<80) { System.out.println("良"); }else if(score>=60 && score<70) { System.out.println("及格"); }else { System.out.println("不及格"); } } } |
Code: 需求: 鍵盤錄入x的值,計算出y的並輸出。
x>=3 y = 2x + 1; -1<=x<3 y = 2x; x<=-1 y = 2x – 1;
分析: A:由於數據要鍵盤錄入,所以必須使用Scanner。 B:由於是三種判斷,所以我們選擇if語句格式3。
|
import java.util.Scanner;
class IfTest2 { public static void main(String[] args) { //創建鍵盤錄入對象 Scanner sc = new Scanner(System.in);
System.out.println("請輸入x的值:"); int x = sc.nextInt();
//定義一個y int y;
//用if語句格式3進行判斷 if(x >= 3) { y = 2*x + 1; }else if(x>=-1 && x<3) { y = 2*x; }else { y = 2*x - 1; }
System.out.println("y:"+y); } } |
Code: 鍵盤錄入月份的值,輸出對應的季節。
春 3,4,5 夏 6,7,8 秋 9,10,11 冬 12,1,2
分析: A:鍵盤錄入月份的值,所以我們要使用Scanner。 B:我們應該判斷這個月份在那個季節,而這個判斷情況較多,所以,用if語句格式3。
if語句的使用場景: A:針對表達式是一個boolean類型的判斷 B:針對一個範圍的判斷
|
import java.util.Scanner;
class IfTest3 { public static void main(String[] args) { //創建鍵盤錄入對象 Scanner sc = new Scanner(System.in);
//錄入數據 System.out.println("請你輸入一個月份:"); int month = sc.nextInt();
//第三種格式實現即可 if(month<1 || month>12) { System.out.println("你輸入的月份有誤"); }else if(month == 1) { System.out.println("冬季"); }else if(month == 2) { System.out.println("冬季"); }else if(month == 3) { System.out.println("春季"); }else if(month == 4) { System.out.println("春季"); }else if(month == 5) { System.out.println("春季"); }else if(month == 6) { System.out.println("夏季"); }else if(month == 7) { System.out.println("夏季"); }else if(month == 8) { System.out.println("夏季"); }else if(month == 9) { System.out.println("秋季"); }else if(month == 10) { System.out.println("秋季"); }else if(month == 11) { System.out.println("秋季"); }else { System.out.println("冬季"); } System.out.println("--------------");
//這個程序確實是符合了我們的需求,但是就是看起來比較麻煩 //那麽,我們能不能改進一下呢? //month == 3 //month == 4 //month == 5 //我們發現,上面三個都是春季。 //而他們本身每一個都是一個boolean表達式 //所以,我們就可以考慮使用邏輯運算符給他們連接起來改進 if(month<1 || month>12) { System.out.println("你輸入的月份有誤"); }else if(month==3 || month==4 || month==5) { System.out.println("春季"); }else if(month==6 || month==7 || month==8) { System.out.println("夏季"); }else if(month==9 || month==10 || month==11) { System.out.println("秋季"); }else { System.out.println("冬季"); } System.out.println("--------------");
//這個時候,程序代碼以及可以了。 //但是呢,假如我要求你輸入一個月份,判斷是上半年還是下半年。 //這個時候,我們的判斷條件連接就是6個boolean表達式 //我們可能還有更多的連接 //這個時候,其實我們還有另外的一種改進方案: //month == 3 //month == 4 //month == 5 //month>=3 && month<=5 //用範圍也是可以改進的。 if(month<1 || month>12) { System.out.println("你輸入的月份有誤"); }else if(month>=3 && month<=5) { System.out.println("春季"); }else if(month>=6 && month<=8) { System.out.println("夏季"); }else if(month>=9 && month<=11) { System.out.println("秋季"); }else { System.out.println("冬季"); } System.out.println("--------------"); } } |
Code: 獲取三個數據中的最大值
由此案例主要是為了講解if語句是可以嵌套使用的。而且是可以任意的嵌套。
|
class IfTest4 { public static void main(String[] args) { int a = 10; int b = 30; int c = 20;
//三元實現 //int temp = (a>b)? a: b; //int max = (temp>c)? temp: c; //System.out.println("max:"+max); //System.out.println("--------");
//用if語句實現 int max; if(a > b) { if(a > c) { max = a; }else { max = c; } }else { if(b > c) { max = b; }else { max = c; } } System.out.println("max:"+max); } } |
(3)循環結構 做一些重復的代碼
java基礎:流程控制語句(選擇結構if語句)