02.選擇結(jié)構(gòu)

1.程序結(jié)構(gòu):順序結(jié)構(gòu),循環(huán)結(jié)構(gòu),選擇結(jié)構(gòu)

2.兩個(gè)變量表比較,如果變量是基本數(shù)據(jù)類型(byte,short,int,long,float,double,char,boolean)用關(guān)系運(yùn)算符(>,>=,<,<=,==,!=)表比較;如果變量是引用數(shù)據(jù)類型(String)表比較用equals()

//基本數(shù)據(jù)類型比較,用關(guān)系運(yùn)算符
        int num1=10;
        int num2=8;
        boolean result1=num1==num2;
        System.out.println(result1);
        
        //引用數(shù)據(jù)類型比較用equals()
        String s1="我是中國(guó)人";
        String s2="我是中國(guó)人";
        boolean result2=s1.equals(s2);
        System.out.println(result2);

3.從鍵盤上接收用戶的數(shù)據(jù):

3.1:在類框架上面導(dǎo)包:import java.util.Scanner;
3.2:獲得從鍵盤上接收數(shù)據(jù)的能力
Scanner input=new Scanner(System.in);
3.3:從鍵盤上接收數(shù)據(jù)

      int num1=input.nextInt();
      double num2=input.nextDouble(); 
      String num3=input.next();    

注意:鍵盤上不能接收char類型數(shù)據(jù)。

      eg://導(dǎo)包
import java.util.Scanner;
/**
public class UserInput{
/**
*程序的入口方法
*/
public static void main(String[] args){
  //獲得從鍵盤上接收數(shù)據(jù)的能力
  Scanner input=new Scanner(System.in);
      System.out.println("請(qǐng)輸入一個(gè)整數(shù)");
      //從鍵盤上接收一個(gè)整數(shù)并存在變量num1中
      int num1=input.nextInt();
      System.out.println("請(qǐng)輸入一個(gè)小數(shù):");
      //從鍵盤上接收一個(gè)double類型的數(shù)并存在變量num2中
      double num2=input.nextDouble();
      
      System.out.println("請(qǐng)輸入一個(gè)字符串:");
      //從鍵盤上接收一個(gè)String類型的數(shù)并存在變量num3中
      String num3=input.next();
      
      System.out.println("從鍵盤上接收的整數(shù)為:"+num1);
      System.out.println("從鍵盤上接收的小數(shù)為:"+num2);
      System.out.println("從鍵盤上接收的字符串為:"+num3);
  }
}

4.基本if選擇結(jié)構(gòu):解決只有一種情況的問(wèn)題

4.1:語(yǔ)法:if(條件){
代碼塊;
}

基本if選擇結(jié)構(gòu)

4.2:執(zhí)行流程:如果條件為true,就執(zhí)行大括號(hào)中的代碼塊;如果條件為false,就執(zhí)行if結(jié)構(gòu)之后的語(yǔ)句。

      eg:public static void main(String[] args){
      System.out.println("中午的歌是否唱得好?(y/n)");
      //獲得從鍵盤上接收數(shù)據(jù)的能力
      Scanner input=new Scanner(System.in);
      //從鍵盤上接收一個(gè)字符串并存在變量中
      String answer=input.next();
      //對(duì)結(jié)果判斷
      if(answer.equals("y")){
          System.out.println("給每位同學(xué)發(fā)朵大紅花");
      }
  }

5.if-else結(jié)構(gòu):解決有兩種情況,這兩情況始終要執(zhí)行其中一種

5.1:語(yǔ)法 :if(條件){
代碼塊1;
}else{
代碼塊2;
}

if-else結(jié)構(gòu)

5.2:執(zhí)行流程:如果條件為true,就執(zhí)行代碼塊1;如果條件為false,就執(zhí)行代碼塊2;

      eg:public static void main(String[] args){
      System.out.println("明天中午的歌是否唱得好?(y/n)");
      //獲得具有從鍵盤上接收數(shù)據(jù)的能力
      Scanner input=new Scanner(System.in);
      //從鍵盤上接收一個(gè)字符串并存在變量中
      String str1=input.next();
      //判斷滿足哪種情況
      if(str1.equals("y")){
          System.out.println("老師請(qǐng)大家吃飯");
      }else{
          System.out.println("大家請(qǐng)老師吃飯");
      }
  }

6.多重if選擇結(jié)構(gòu):解決有兩種及以上情況的問(wèn)題

6.1:語(yǔ)法:if(條件1){
代碼塊1;
}else if(條件2){
代碼塊2;
}else if(條件3){
代碼塊3;
}else{
代碼塊4;
}

多重if選擇結(jié)構(gòu)

6.2:執(zhí)行流程:如果條件1為true,就執(zhí)行代碼塊1,再執(zhí)行多重if結(jié)構(gòu)之后的語(yǔ)句;如果條件1為false,就判斷條件2,如果條件2為true,就執(zhí)行代碼塊2,再執(zhí)行多重if結(jié)構(gòu)之后的語(yǔ)句;如果條件2為false,就判斷條件3,如果條件3為true,就執(zhí)行代碼塊3,再執(zhí)行多重if結(jié)構(gòu)之后的語(yǔ)句;如果條件3為false,就執(zhí)行else塊中代碼塊4。
6.3:結(jié)構(gòu)特點(diǎn):
6.3.1:多重if選擇結(jié)構(gòu)中if塊有且僅有一個(gè),else if塊可以有0個(gè)到多個(gè),else塊可以有0個(gè)到1個(gè)。
6.3.2:多重if選擇結(jié)構(gòu)中,最多執(zhí)行一個(gè)情況(分支),最少一個(gè)情況都不執(zhí)行(沒(méi)有else塊并且前面的條件都為false);
6.3.3: 如果用多重if選擇結(jié)構(gòu)解決多種情況(分支)等值判斷問(wèn)題,分支之間可以互換置不影響結(jié)果;如果用多重if選擇結(jié)構(gòu)解決多種情況(分支)范圍判斷問(wèn)題,分支之間不一定可以互換位置。

      eg:public static void main(String[] args){
      System.out.println("今天是星期幾?(1-7):");
      //獲得具有從鍵盤上接收數(shù)據(jù)的能力
      Scanner input=new Scanner(System.in);
      //從鍵盤上接收一個(gè)字符串并存在變量中
      int today=input.nextInt();
      //判斷滿足哪種情況
      if(today==1){
          System.out.println("早餐吃包子");
      }else if(today==2){
          System.out.println("早餐吃饅頭");
      }else if(today==3){
          System.out.println("早餐吃油條豆?jié){");
      }else if(today==4){
          System.out.println("早餐吃腸粉");
      }else if(today==5){
          System.out.println("早餐吃拉面");
      }else if(today==6){
          System.out.println("早餐吃豆皮");
      }else{
          System.out.println("睡覺(jué)");
      }
  }
  public static void main(String[] args){
  System.out.println("請(qǐng)輸入成績(jī)(0-100):");
  //獲得具有從鍵盤上接收數(shù)據(jù)的能力
  Scanner input=new Scanner(System.in);
  //從鍵盤上接收一個(gè)數(shù)并存在變量中
  double score=input.nextDouble();
  
  //判斷滿足哪種情況
  if(score>=90){
      System.out.println("優(yōu)秀");
  }else if(score<80&&score>=60){
      System.out.println("合格");
  }else if(score<90&&score>=80){
      System.out.println("良好");
  }else{
      System.out.println("再接再厲");
  }

}

7.嵌套選擇結(jié)構(gòu):在一個(gè)選擇結(jié)構(gòu)的代碼塊中完整包含了另一個(gè)選擇結(jié)構(gòu)

7.1:選擇結(jié)構(gòu)之間可以任意嵌套,但是嵌套要正確。
7.2:選擇結(jié)構(gòu)之間可以多層嵌套,但是一般兩到三層嵌套。
題目:參加百米賽跑,如果跑步時(shí)間超過(guò)10秒,謝謝參與;如果跑步時(shí)間不超過(guò)10秒,恭喜你進(jìn)入決賽;進(jìn)入決賽后,輸入性別,如果性別是男,恭喜你進(jìn)入男子組決賽;如果性別是女,恭喜你進(jìn)入 女子組決賽

  eg:public static void main(String[] args){
  //獲得具有從鍵盤上接收數(shù)據(jù)的能力
  Scanner input=new Scanner(System.in);
  System.out.println("請(qǐng)輸入你百米跑步的時(shí)間:");
  //從鍵盤上接收時(shí)間,并存在變量中
  double time=input.nextDouble();
  if(time>10){
      System.out.println("謝謝參與");
  }else if(time>=0&&time<=10){
      System.out.println("請(qǐng)輸入你的性別(男/女):");
      //從鍵盤上接收性別,并存在變量中
      String sex=input.next();
      if(sex.equals("男")){
          System.out.println("恭喜你進(jìn)入男子組決賽");
      }else if(sex.equals("女")){
          System.out.println("恭喜你進(jìn)入女子組決賽");
      }else{
          System.out.println("性別輸入有誤!");
      }
  }else{
      System.out.println("時(shí)間輸入有誤!");
  }

}

8.switch結(jié)構(gòu):解決多種情況等值判斷問(wèn)題

8.1:語(yǔ)法:switch(表達(dá)式){
case 常量1:
代碼塊1;
break;
case 常量2:
代碼塊2;
break;
...
default:
default中的代碼塊;
break;
}
8.2:執(zhí)行流程:如果表達(dá)式的結(jié)果等于常量1,就執(zhí)行代碼塊1,遇到break或者結(jié)尾}就跳出switch結(jié)構(gòu),執(zhí)行之后語(yǔ)句;如果表達(dá)式的結(jié)果等于常量2,就執(zhí)行代碼塊2,遇到break或者結(jié)尾}就跳出switch結(jié)構(gòu),執(zhí)行之后語(yǔ)句;如果表達(dá)式不等于case后面的任意一個(gè)常量值,就執(zhí)行default中的代碼塊遇到break或者結(jié)尾}就跳出switch結(jié)構(gòu)。
8.3:結(jié)構(gòu)特點(diǎn):
8.3.1:switch結(jié)構(gòu)中的表達(dá)式和常量,在jdk1.5前,支持byte,short,int,char類型
在jdk1.5后,支持枚舉類型
在jdk1.7后,支持String類型。
8.3.2:switch結(jié)構(gòu)中,case塊可以有0個(gè)到多個(gè),default塊可以有0個(gè)到1個(gè)。
8.3.3:在同一個(gè)switch結(jié)構(gòu)中,case后面的常量值必須不同。
8.3.4:switch結(jié)構(gòu)中,case塊中break可以省略,但是省略break后,如果表達(dá)式等于當(dāng)前case塊的常量,執(zhí)行完這個(gè)case塊中的}代碼后,沒(méi)有遇到break和結(jié)尾會(huì)繼續(xù)往下執(zhí)行并且不再判斷,直到遇到break和}結(jié)尾才會(huì)跳出switch結(jié)構(gòu).
一般情況下,case塊中break不要省略。
8.3.5:switch結(jié)構(gòu)中,default塊可以放在switch結(jié)構(gòu)的大括號(hào)任何地方,不影響程序的 執(zhí)行。
8.3.6:switch結(jié)構(gòu)中,case塊之間可以互換位置,不影響程序的執(zhí)行。
8.3.7:switch結(jié)構(gòu)中,可以執(zhí)行0個(gè)到多個(gè)情況。

  eg:public static void main(String[] args){
  System.out.println("今天是星期幾?(1-7):");
  //獲得具有從鍵盤上接收數(shù)據(jù)的能力
  Scanner input=new Scanner(System.in);
  //從鍵盤上接收一個(gè)字符串并存在變量中
  int today=input.nextInt();
  switch(today){
      case 1:
          System.out.println("早餐吃包子");
          break;
      case 2:
          System.out.println("早餐吃饅頭");
          break;
      case 3:
          System.out.println("早餐吃油條豆?jié){");
          break;
      case 4:
          System.out.println("早餐吃腸粉");
          break;
      case 5:
          System.out.println("早餐吃拉面");
          break;
      case 6:
          System.out.println("早餐吃豆皮");
          break;
      case 7:
          System.out.println("睡覺(jué)");
          break;
      default:
          System.out.println("你的輸入有誤!");
          break;
  }
}

9.switch結(jié)構(gòu) VS 多重if選擇結(jié)構(gòu)

9.1:相同點(diǎn):
9.1.1:都可以解決多種情況等值判斷問(wèn)題,首選switch結(jié)構(gòu);
9.1.2:在解決多種情況等值判斷問(wèn)題時(shí),分支之間可以互換位置。
9.1.3:都是最少一種情況(分支)都不執(zhí)行。
9.2:不同點(diǎn):
9.2.1:作用不同:switch結(jié)構(gòu)只能解決多種情況等值判斷問(wèn)題;
多重if選擇結(jié)構(gòu)既可以解決多種情況等值判斷問(wèn)題,又可以解決多種情況范 圍判斷問(wèn)題。
9.2.2:條件不同:switch結(jié)構(gòu)中的表達(dá)式和常量有類型限制;
多重if選擇結(jié)構(gòu)的條件是關(guān)系表達(dá)式,條件的結(jié)果是boolean.
9.2.3:執(zhí)行不同:switch結(jié)構(gòu)可以執(zhí)行多個(gè)分支的代碼塊;多重if選擇結(jié)構(gòu)最多只能執(zhí)行一個(gè)分支的代碼塊。
9.2.4:break不同:switch結(jié)構(gòu)中可以用break跳出結(jié)構(gòu),多重if選擇結(jié)構(gòu)不能單獨(dú)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容