一、介紹
在Java中我們有大量的控制語(yǔ)句坯沪,除了一般的順序控制語(yǔ)句绿映,條件控制語(yǔ)句,是我們最常用的一種語(yǔ)句腐晾,下面我們就來(lái)介紹語(yǔ)句的應(yīng)用叉弦。
條件語(yǔ)句又稱為分支語(yǔ)句,它通過(guò)對(duì)給定的條件進(jìn)行判斷藻糖,從而決定執(zhí)行兩個(gè)或多個(gè)分支中的哪一支淹冰。因此,在編寫(xiě)選擇語(yǔ)句之前巨柒,應(yīng)該首先明確判斷條件是什么樱拴,并確定當(dāng)判斷結(jié)果為“真”或“假”時(shí)應(yīng)分別執(zhí)行什么樣的操作(算法)。
條件語(yǔ)句是一種根據(jù)條件執(zhí)行不同代碼的語(yǔ)句洋满,如果條件滿足則執(zhí)行一段代碼晶乔,否則執(zhí)行其他代碼∥矗可將條件語(yǔ)句認(rèn)為是有點(diǎn)像起因和結(jié)果正罢。一種更好的類比方式可能是,使用一些父母可能會(huì)說(shuō)的話驻民,如下面的內(nèi)容:“如果你的房間是干凈的翻具,你會(huì)得到甜點(diǎn)。否則回还,你就得早點(diǎn)去睡覺(jué)裆泳。”
第一個(gè)起因是干凈的房間柠硕,結(jié)果是可以得到甜點(diǎn)工禾。第二個(gè)起因是不干凈的房間,結(jié)果是必須早點(diǎn)上床休息。
在腳本上帜篇,可能需要?jiǎng)?chuàng)建類似的語(yǔ)句糙捺。可能如下面的內(nèi)容一樣:“如果變量mymoney的值大于1000笙隙,那么發(fā)送警告告知我的金融狀況沒(méi)問(wèn)題。否則坎缭,發(fā)出警告竟痰,告知我需要更多錢(qián)!”
二、內(nèi)容
1掏呼、概述
選擇結(jié)構(gòu)也被稱為分支結(jié)構(gòu)坏快。
選擇結(jié)構(gòu)有特定的語(yǔ)法規(guī)則,代碼要執(zhí)行具體的邏輯運(yùn)算進(jìn)行判斷憎夷,邏輯運(yùn)算的結(jié)果有兩個(gè)莽鸿,所以產(chǎn)生選擇,按照不同的選擇執(zhí)行不同的代碼拾给。
Java語(yǔ)言提供了兩種選擇結(jié)構(gòu)語(yǔ)句
(1)if語(yǔ)句
(2)switch語(yǔ)句
2祥得、if語(yǔ)句
2.1、if語(yǔ)句簡(jiǎn)介
在現(xiàn)實(shí)業(yè)務(wù)中蒋得,許多場(chǎng)景需要我們做出條件判斷级及,而每一種條件對(duì)應(yīng)一則業(yè)務(wù)邏輯。比如额衙,如果考試超過(guò)60分饮焦,不需要補(bǔ)考,低于60分需要補(bǔ)考窍侧。再比如如果是管理員县踢,則可以刪除論壇帖子,而普通游客卻不可以等等伟件。
對(duì)應(yīng)這樣需要選擇的業(yè)務(wù)場(chǎng)景硼啤,我們可以使用if選擇結(jié)構(gòu)。
2.2锋爪、if語(yǔ)句格式
2.2.1丙曙、單條件判斷(格式1)
滿足if條件即執(zhí)行,不滿足不執(zhí)行其骄。如年齡大于18歲可以注冊(cè)婚戀網(wǎng)站
if語(yǔ)句的語(yǔ)法格式:
if (條件語(yǔ)句){
代碼塊
}
執(zhí)行流程:
首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false亏镰,如果是true就執(zhí)行語(yǔ)句體,如果是false就不執(zhí)行語(yǔ)句體
流程圖:
/*
選擇結(jié)構(gòu)if語(yǔ)句的第一種格式,有可能一句話都不打印
格式:
if(條件語(yǔ)句){
code;
...
}
執(zhí)行步驟:
首先判斷條件語(yǔ)句是否成立
true:執(zhí)行if{}中的代碼
false:不執(zhí)行if{}中的代碼
*/
import java.util.Scanner;
public class Demo03If{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入您的年齡: ");
int age = sc.nextInt();
if(age >= 18){
System.out.println("年齡大于等于18歲,可以注冊(cè)百合網(wǎng),美女在等著你");
}
if(age < 18){
System.out.println("年齡小于18歲,不可以注冊(cè)百合網(wǎng),注冊(cè)會(huì)員,可以放寬年齡限制");
}
}
}
2.2.2拯爽、互斥條件判斷(格式2)
滿足條件執(zhí)行if語(yǔ)句體索抓,不滿足執(zhí)行else語(yǔ)句體。如年齡大于18歲可以注冊(cè)婚戀網(wǎng)站,小于18歲不可以注冊(cè)逼肯。
if語(yǔ)句第二種格式:
if(關(guān)系表達(dá)式) {
語(yǔ)句體1;
}else {
語(yǔ)句體2;
}
執(zhí)行流程:
首先判斷關(guān)系表達(dá)式看其結(jié)果是true還是false耸黑,如果是true就執(zhí)行語(yǔ)句體1,如果是false就執(zhí)行語(yǔ)句體2
流程圖:
/*
選擇結(jié)構(gòu)if語(yǔ)句的第二種格式:總會(huì)打印一句話
格式:
if(條件語(yǔ)句){
執(zhí)行語(yǔ)句1;
...
}else{
執(zhí)行語(yǔ)句2;
...
}
執(zhí)行流程:
首先判斷條件語(yǔ)句是否成立
true:執(zhí)行if{}中的執(zhí)行語(yǔ)句1
false:執(zhí)行else{}中的執(zhí)行語(yǔ)句2
*/
import java.util.Scanner;
public class Demo04If{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入您的年齡: ");
int age = sc.nextInt();
if(age >= 18){
System.out.println("年齡大于等于18歲,可以注冊(cè)百合網(wǎng),美女在等著你");
}else{
System.out.println("年齡小于18歲,不可以注冊(cè)百合網(wǎng),注冊(cè)會(huì)員,可以放寬年齡限制");
}
}
}
2.2.3篮幢、多條件判斷(格式3)
在多個(gè)條件中選擇滿足條件的if語(yǔ)句體執(zhí)行大刊。
例如,對(duì)一個(gè)學(xué)生的考試成績(jī)進(jìn)行等級(jí)的劃分;
如果分?jǐn)?shù)大于等于80分,小于等于100分等級(jí)為優(yōu)盒让;
如果分?jǐn)?shù)大于等于70分,小于80分級(jí)為良伴郁;
如果分?jǐn)?shù)大于等于60分,小于70分等級(jí)為及格蛋叼;
60以下為不及格焊傅。
if語(yǔ)句第三種格式:
if (判斷條件1) {
執(zhí)行語(yǔ)句1
} else if (判斷條件2) {
執(zhí)行語(yǔ)句2
}
...
else if (判斷條件n) {
執(zhí)行語(yǔ)句n
} else {
執(zhí)行語(yǔ)句n+1
}
執(zhí)行流程:
首先判斷關(guān)系表達(dá)式1看其結(jié)果是true還是false,如果是true就執(zhí)行語(yǔ)句體1狈涮,如果是false就繼續(xù)判斷關(guān)系表達(dá)式2看其結(jié)果是true還是false狐胎,如果是true就執(zhí)行語(yǔ)句體2,如果是false就繼續(xù)判斷關(guān)系表達(dá)式…看其結(jié)果是true還是false
…薯嗤,如果沒(méi)有任何關(guān)系表達(dá)式為true顽爹,就執(zhí)行語(yǔ)句體n+1。
流程圖:
/*
選擇結(jié)構(gòu)if語(yǔ)句的第三種格式:終究會(huì)打印一個(gè)結(jié)果
格式:
if(條件1){
條件1成立執(zhí)行
}else if(條件2){
條件1不成立,條件2成立執(zhí)行
}
.....
else if(條件n){
條件1,條件2...都不成立,條件n成立執(zhí)行
}else{
所有條件都不滿足,執(zhí)行
}
需求:根據(jù)成績(jī)判斷成績(jī)等級(jí)
90-100分:優(yōu)
80-90分:良
70-80分:中
60-70分:及格
0-60分:不及格
其它成績(jī):非法成績(jī)
變量的作用域:在自己所在的{}內(nèi)有效
*/
public class Demo05If{
public static void main(String[] args){
int score = 55;
if(score >=90 && score <=100){
System.out.println("成績(jī)是"+score+",等級(jí)為優(yōu)!");
}else if(score >=80 && score <90){
System.out.println("成績(jī)是"+score+",等級(jí)為良!");
}else if(score >=70 && score <80){
System.out.println("成績(jī)是"+score+",等級(jí)為中!");
}else if(score >=60 && score <70){
System.out.println("成績(jī)是"+score+",等級(jí)為及格!");
}else if(score >=0 && score <60){
int a = 44;
System.out.println(a);
System.out.println("成績(jī)是"+score+",等級(jí)為不及格!");
}else{
//System.out.println(a);//錯(cuò)誤: 找不到符號(hào)
System.out.println("成績(jī)是"+score+",非法成績(jī)!");
}
//System.out.println(a);//錯(cuò)誤: 找不到符號(hào)
}
}
例題:
x和y的關(guān)系滿足如下:
x>=3 y = 2x + 1;
-1<=x<3 y = 2x;
x<=-1 y = 2x – 1;
根據(jù)給定的x的值骆姐,計(jì)算出y的值并輸出镜粤。
public class Demo03If {
public static void main(String[] args) {
// x和y的關(guān)系滿足如下:
// x>=3 y = 2x + 1;
// -1<=x<3 y = 2x;
// x<=-1 y = 2x – 1;
// 根據(jù)給定的x的值,計(jì)算出y的值并輸出玻褪。
// 定義變量
int x = 5;
/*
int y;
if (x >= 3) {
y = 2 * x + 1;
} else if (x >= -1 && x < 3) {
y = 2 * x;
} else if (x <= -1) {
y = 2 * x - 1;
}else {
y = 0;
}
*/
/*int y = 0;
if (x >= 3) {
y = 2 * x + 1;
} else if (x >= -1 && x < 3) {
y = 2 * x;
} else if (x <= -1) {
y = 2 * x - 1;
}*/
int y;
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);
}
}
鍵盤(pán)錄入兩個(gè)數(shù)據(jù)肉渴,獲取這兩個(gè)數(shù)據(jù)的較大值
public class Demo04If {
public static void main(String[] args) {
//創(chuàng)建對(duì)象
Scanner sc = new Scanner(System.in);
//接收數(shù)據(jù)
System.out.println("請(qǐng)輸入第一個(gè)數(shù)據(jù):");
int a = sc.nextInt();
System.out.println("請(qǐng)輸入第二個(gè)數(shù)據(jù):");
int b = sc.nextInt();
//采用if語(yǔ)句格式2實(shí)現(xiàn)
/*
if(a>b){
System.out.println("較大的值是:"+a);
}else {
System.out.println("較大的值是:"+b);
}
*/
//拿到較大的值之后,我未必想直接輸出带射,所以我們定義變量接收這個(gè)較大的值
int max;
if(a>b){
max = a;
}else {
max = b;
}
//可能做其他的操作
//max += 100;
System.out.println("較大的值是:"+max);
}
}
2.2.4同规、多層條件判斷
在復(fù)雜的業(yè)務(wù)邏輯中,可以使用多層的條件判斷代碼是否執(zhí)行窟社。
如:60分以下的同學(xué)不及格重考券勺,
60分以上的同學(xué)不需要重考,
這個(gè)區(qū)間又可以分為:優(yōu)秀灿里、良好关炼、及格三個(gè)等級(jí)。
if(第一層條件){
if(第二層條件){
真正運(yùn)行邏輯
}
}
/*
多層if語(yǔ)句:if語(yǔ)句嵌套
格式:
if(條件語(yǔ)句){
if(條件語(yǔ)句){
code;
...
}
}
需求:
成績(jī)>= 60
打印成績(jī)合格,可以升級(jí)
90-100分:優(yōu)
80-90分:良
70-80分:中
60-70分:及格
成<60
打印成績(jī)不及格,需要補(bǔ)考
*/
import java.util.Scanner;
public class Demo06If{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入您的成績(jī): ");
int score = sc.nextInt();
if(score >= 60 && score <=100){
System.out.println("成績(jī)合格,可以升級(jí)");
if(score >=90 && score <=100){
System.out.println("成績(jī)是"+score+",等級(jí)為優(yōu)!");
}else if(score >=80 && score <90){
System.out.println("成績(jī)是"+score+",等級(jí)為良!");
}else if(score >=70 && score <80){
System.out.println("成績(jī)是"+score+",等級(jí)為中!");
}else{
System.out.println("成績(jī)是"+score+",等級(jí)為及格!");
}
}else if(score >=0 && score < 60){
System.out.println("成績(jī)不及格,需要補(bǔ)考");
}else{
System.out.println("非法成績(jī)");
}
System.out.println("程序結(jié)束");
}
}
3匣吊、switch語(yǔ)句
3.1儒拂、選擇結(jié)構(gòu)_switch概念
在現(xiàn)實(shí)業(yè)務(wù)中寸潦,許多場(chǎng)景需要我們從多個(gè)固定的值中選出一個(gè),執(zhí)行該數(shù)值對(duì)應(yīng)的操作社痛。比如见转,在一周七天,當(dāng)輸入1-7會(huì)打印不同的星期蒜哀。
對(duì)應(yīng)這樣的業(yè)務(wù)場(chǎng)景斩箫,我們可以使用switch選擇結(jié)構(gòu)。
3.2凡怎、格式switch格式
以下為switch語(yǔ)句的格式:
switch (表達(dá)式){
case 目標(biāo)值1:執(zhí)行語(yǔ)句1;break;
case 目標(biāo)值2:執(zhí)行語(yǔ)句2;break;
......
case 目標(biāo)值n:執(zhí)行語(yǔ)句n;break;
default:執(zhí)行語(yǔ)句n+1;break;
}
執(zhí)行流程:
首先計(jì)算出表達(dá)式的值,其次校焦,和case依次比較,一旦有對(duì)應(yīng)的值统倒,就會(huì)執(zhí)行相應(yīng)的語(yǔ)句,在執(zhí)行的過(guò)程中氛雪,遇到break就會(huì)結(jié)束房匆。最后,如果所有的case都和表達(dá)式的值不匹配报亩,就會(huì)執(zhí)行default語(yǔ)句體部分浴鸿,然后程序結(jié)束掉。
流程圖:
在上面的格式中弦追,switch語(yǔ)句將表達(dá)式的值與每個(gè)case中的目標(biāo)值進(jìn)行匹配岳链,如果找到了匹配的值,會(huì)執(zhí)行對(duì)應(yīng)case后的語(yǔ)句劲件,如果沒(méi)找到任何匹配的值掸哑,就會(huì)執(zhí)行default后的語(yǔ)句。break的作用是跳出switch語(yǔ)句零远。
/*
需求:鍵盤(pán)輸入對(duì)應(yīng)1-7,輸出對(duì)應(yīng)的中文日期
*/
import java.util.Scanner;
public class Demo01Switch{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入星期對(duì)應(yīng)的數(shù)字:");
int week = sc.nextInt();//2
switch(week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("您輸入的數(shù)字有誤!");
break;
}
System.out.println("程序結(jié)束");
}
}
3.3苗分、switch注意事項(xiàng)
switch表示這是switch語(yǔ)句
表達(dá)式的取值只能是:byte,short,int,char
JDK5以后可以是枚舉
JDK7以后可以是String
如同if語(yǔ)句當(dāng)中的else,default不是必須存在的
與if語(yǔ)句不同牵辣,switch語(yǔ)句只能完成具體值的選擇摔癣,而不能指定取值區(qū)間
case后面跟的是要和表達(dá)式進(jìn)行比較的值
語(yǔ)句體部分可以是一條或多條語(yǔ)句
break表示中斷,結(jié)束的意思纬向,可以結(jié)束switch語(yǔ)句
default語(yǔ)句表示所有情況都不匹配的時(shí)候择浊,就執(zhí)行該處的內(nèi)容,和if語(yǔ)句的else相似逾条。
case條件只判斷一次琢岩,在判斷完一次case條件后,所有的case判斷語(yǔ)句將不再起作用膳帕,而剩余語(yǔ)句征程執(zhí)行粘捎。這是switch語(yǔ)句的穿透薇缅。(了解)
/*?
需求:鍵盤(pán)輸入對(duì)應(yīng)1-7
1-5:輸出工作日
6-7:輸出休息日
*/
import java.util.Scanner;
public class Demo02Switch{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("請(qǐng)輸入星期對(duì)應(yīng)的數(shù)字:");
int week = sc.nextInt();//2
switch(week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("您輸入的數(shù)字有誤!");
break;
}
System.out.println("程序結(jié)束");
}
}