從屌絲到架構(gòu)師的飛越(入門(mén)篇)-選擇結(jié)構(gòu)

一、介紹

在Java中我們有大量的控制語(yǔ)句,除了一般的順序控制語(yǔ)句,條件控制語(yǔ)句,是我們最常用的一種語(yǔ)句,下面我們就來(lái)介紹語(yǔ)句的應(yīng)用。

條件語(yǔ)句又稱(chēng)為分支語(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í)行其他代碼??蓪l件語(yǔ)句認(rèn)為是有點(diǎn)像起因和結(jié)果。一種更好的類(lèi)比方式可能是,使用一些父母可能會(huì)說(shuō)的話,如下面的內(nèi)容:“如果你的房間是干凈的,你會(huì)得到甜點(diǎn)。否則,你就得早點(diǎn)去睡覺(jué)?!?/p>

第一個(gè)起因是干凈的房間,結(jié)果是可以得到甜點(diǎn)。第二個(gè)起因是不干凈的房間,結(jié)果是必須早點(diǎn)上床休息。

在腳本上,可能需要?jiǎng)?chuàng)建類(lèi)似的語(yǔ)句??赡苋缦旅娴膬?nèi)容一樣:“如果變量mymoney的值大于1000,那么發(fā)送警告告知我的金融狀況沒(méi)問(wèn)題。否則,發(fā)出警告,告知我需要更多錢(qián)!”

二、內(nèi)容

1、概述

選擇結(jié)構(gòu)也被稱(chēng)為分支結(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é)束");

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,115評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,577評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,514評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,234評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,621評(píng)論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,822評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,380評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,128評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,319評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,548評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,970評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,229評(píng)論 1 291
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,048評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,285評(píng)論 2 376

推薦閱讀更多精彩內(nèi)容

  • 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
    開(kāi)心的鑼鼓閱讀 3,341評(píng)論 0 9
  • 1 順序語(yǔ)句 語(yǔ)句:使用分號(hào)分隔的代碼稱(chēng)作為一個(gè)語(yǔ)句。 注意:沒(méi)有寫(xiě)任何代碼只是一個(gè)分號(hào)的時(shí)候,也是一條語(yǔ)句,...
    哈哈哎呦喂閱讀 397評(píng)論 0 0
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,890評(píng)論 0 2
  • Day01 class 例子{ public static void main(String[] args){ ...
    周書(shū)達(dá)閱讀 1,108評(píng)論 0 0
  • 第一章 初識(shí)javaJAVA 第一講:什么是程序?:為了讓計(jì)算機(jī)執(zhí)行某些操作或解決某個(gè)問(wèn)題而編寫(xiě)的一系列有序指令的...
    人子日月幾點(diǎn)閱讀 541評(píng)論 0 1