从屌丝到架构师的飞越(入门篇)-选择结构

一、介绍

在Java中我们有大量的控制语句,除了一般的顺序控制语句,条件控制语句,是我们最常用的一种语句,下面我们就来介绍语句的应用。

条件语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结果为“真”或“假”时应分别执行什么样的操作(算法)。

条件语句是一种根据条件执行不同代码的语句,如果条件满足则执行一段代码,否则执行其他代码。可将条件语句认为是有点像起因和结果。一种更好的类比方式可能是,使用一些父母可能会说的话,如下面的内容:“如果你的房间是干净的,你会得到甜点。否则,你就得早点去睡觉。”

第一个起因是干净的房间,结果是可以得到甜点。第二个起因是不干净的房间,结果是必须早点上床休息。

在脚本上,可能需要创建类似的语句。可能如下面的内容一样:“如果变量mymoney的值大于1000,那么发送警告告知我的金融状况没问题。否则,发出警告,告知我需要更多钱!”

二、内容

1、概述

选择结构也被称为分支结构。

选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。

Java语言提供了两种选择结构语句

(1)if语句

(2)switch语句

2、if语句

2.1、if语句简介

在现实业务中,许多场景需要我们做出条件判断,而每一种条件对应一则业务逻辑。比如,如果考试超过60分,不需要补考,低于60分需要补考。再比如如果是管理员,则可以删除论坛帖子,而普通游客却不可以等等。

对应这样需要选择的业务场景,我们可以使用if选择结构。

2.2、if语句格式

2.2.1、单条件判断(格式1)

满足if条件即执行,不满足不执行。如年龄大于18岁可以注册婚恋网站

if语句的语法格式:

if (条件语句){

代码块

}

执行流程:

首先判断关系表达式看其结果是true还是false,如果是true就执行语句体,如果是false就不执行语句体

流程图:

/*

选择结构if语句的第一种格式,有可能一句话都不打印

格式:

if(条件语句){

code;

...

}

执行步骤:

首先判断条件语句是否成立

true:执行if{}中的代码

false:不执行if{}中的代码

*/

import java.util.Scanner;

public class Demo03If{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入您的年龄: ");

int age = sc.nextInt();

if(age >= 18){

System.out.println("年龄大于等于18岁,可以注册百合网,美女在等着你");

}

if(age < 18){

System.out.println("年龄小于18岁,不可以注册百合网,注册会员,可以放宽年龄限制");

}

}

}

2.2.2、互斥条件判断(格式2)

满足条件执行if语句体,不满足执行else语句体。如年龄大于18岁可以注册婚恋网站,小于18岁不可以注册。

if语句第二种格式:

if(关系表达式) {

语句体1;

}else {

语句体2;

}

执行流程:

首先判断关系表达式看其结果是true还是false,如果是true就执行语句体1,如果是false就执行语句体2

流程图:

/*

选择结构if语句的第二种格式:总会打印一句话

格式:

if(条件语句){

执行语句1;

...

}else{

执行语句2;

...

}

执行流程:

首先判断条件语句是否成立

true:执行if{}中的执行语句1

false:执行else{}中的执行语句2

*/

import java.util.Scanner;

public class Demo04If{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入您的年龄: ");

int age = sc.nextInt();

if(age >= 18){

System.out.println("年龄大于等于18岁,可以注册百合网,美女在等着你");

}else{

System.out.println("年龄小于18岁,不可以注册百合网,注册会员,可以放宽年龄限制");

}

}

}

2.2.3、多条件判断(格式3)

在多个条件中选择满足条件的if语句体执行。

例如,对一个学生的考试成绩进行等级的划分;

如果分数大于等于80分,小于等于100分等级为优;

如果分数大于等于70分,小于80分级为良;

如果分数大于等于60分,小于70分等级为及格;

60以下为不及格。

if语句第三种格式:

if (判断条件1) {

执行语句1

} else if (判断条件2) {

执行语句2

}

...

else if (判断条件n) {

执行语句n

} else {

执行语句n+1

}

执行流程:

首先判断关系表达式1看其结果是true还是false,如果是true就执行语句体1,如果是false就继续判断关系表达式2看其结果是true还是false,如果是true就执行语句体2,如果是false就继续判断关系表达式…看其结果是true还是false

…,如果没有任何关系表达式为true,就执行语句体n+1。

流程图:

/*

选择结构if语句的第三种格式:终究会打印一个结果

格式:

if(条件1){

条件1成立执行

}else if(条件2){

条件1不成立,条件2成立执行

}

.....

else if(条件n){

条件1,条件2...都不成立,条件n成立执行

}else{

所有条件都不满足,执行

}

需求:根据成绩判断成绩等级

90-100分:优

80-90分:良

70-80分:中

60-70分:及格

0-60分:不及格

其它成绩:非法成绩

变量的作用域:在自己所在的{}内有效

*/

public class Demo05If{

public static void main(String[] args){

int score = 55;

if(score >=90 && score <=100){

System.out.println("成绩是"+score+",等级为优!");

}else if(score >=80 && score <90){

System.out.println("成绩是"+score+",等级为良!");

}else if(score >=70 && score <80){

System.out.println("成绩是"+score+",等级为中!");

}else if(score >=60 && score <70){

System.out.println("成绩是"+score+",等级为及格!");

}else if(score >=0 && score <60){

int a = 44;

System.out.println(a);

System.out.println("成绩是"+score+",等级为不及格!");

}else{

//System.out.println(a);//错误: 找不到符号

System.out.println("成绩是"+score+",非法成绩!");

}

//System.out.println(a);//错误: 找不到符号

}

}

例题:

x和y的关系满足如下:

x>=3 y = 2x + 1;

-1<=x<3 y = 2x;

x<=-1 y = 2x – 1;

根据给定的x的值,计算出y的值并输出。

public class Demo03If {

public static void main(String[] args) {

// x和y的关系满足如下:

// x>=3 y = 2x + 1;

// -1<=x<3 y = 2x;

// x<=-1 y = 2x – 1;

// 根据给定的x的值,计算出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);

}

}

键盘录入两个数据,获取这两个数据的较大值

public class Demo04If {

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();

//采用if语句格式2实现

/*

if(a>b){

System.out.println("较大的值是:"+a);

}else {

System.out.println("较大的值是:"+b);

}

*/

//拿到较大的值之后,我未必想直接输出,所以我们定义变量接收这个较大的值

int max;

if(a>b){

max = a;

}else {

max = b;

}

//可能做其他的操作

//max += 100;

System.out.println("较大的值是:"+max);

}

}

2.2.4、多层条件判断

在复杂的业务逻辑中,可以使用多层的条件判断代码是否执行。

如:60分以下的同学不及格重考,

60分以上的同学不需要重考,

这个区间又可以分为:优秀、良好、及格三个等级。

if(第一层条件){

if(第二层条件){

真正运行逻辑

}

}

/*

多层if语句:if语句嵌套

格式:

if(条件语句){

if(条件语句){

code;

...

}

}

需求:

成绩>= 60

打印成绩合格,可以升级

90-100分:优

80-90分:良

70-80分:中

60-70分:及格

成<60

打印成绩不及格,需要补考

*/

import java.util.Scanner;

public class Demo06If{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入您的成绩: ");

int score = sc.nextInt();

if(score >= 60 && score <=100){

System.out.println("成绩合格,可以升级");

if(score >=90 && score <=100){

System.out.println("成绩是"+score+",等级为优!");

}else if(score >=80 && score <90){

System.out.println("成绩是"+score+",等级为良!");

}else if(score >=70 && score <80){

System.out.println("成绩是"+score+",等级为中!");

}else{

System.out.println("成绩是"+score+",等级为及格!");

}

}else if(score >=0 && score < 60){

System.out.println("成绩不及格,需要补考");

}else{

System.out.println("非法成绩");

}

System.out.println("程序结束");

}

}

3、switch语句

3.1、选择结构_switch概念

在现实业务中,许多场景需要我们从多个固定的值中选出一个,执行该数值对应的操作。比如,在一周七天,当输入1-7会打印不同的星期。

对应这样的业务场景,我们可以使用switch选择结构。

3.2、格式switch格式

以下为switch语句的格式:

switch (表达式){

case 目标值1:执行语句1;break;

case 目标值2:执行语句2;break;

......

case 目标值n:执行语句n;break;

default:执行语句n+1;break;

}

执行流程:

首先计算出表达式的值,其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

流程图:

在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。break的作用是跳出switch语句。

/*

需求:键盘输入对应1-7,输出对应的中文日期

*/

import java.util.Scanner;

public class Demo01Switch{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("请输入星期对应的数字:");

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("您输入的数字有误!");

break;

}

System.out.println("程序结束");

}

}

3.3、switch注意事项

switch表示这是switch语句

表达式的取值只能是:byte,short,int,char

JDK5以后可以是枚举

JDK7以后可以是String

如同if语句当中的else,default不是必须存在的

与if语句不同,switch语句只能完成具体值的选择,而不能指定取值区间

case后面跟的是要和表达式进行比较的值

语句体部分可以是一条或多条语句

break表示中断,结束的意思,可以结束switch语句

default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

case条件只判断一次,在判断完一次case条件后,所有的case判断语句将不再起作用,而剩余语句征程执行。这是switch语句的穿透。(了解)

/* 

需求:键盘输入对应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("请输入星期对应的数字:");

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("您输入的数字有误!");

break;

}

System.out.println("程序结束");

}

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,303评论 0 9
  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 370评论 0 0
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,838评论 0 2
  • Day01 class 例子{ public static void main(String[] args){ ...
    周书达阅读 1,003评论 0 0
  • 第一章 初识javaJAVA 第一讲:什么是程序?:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的...
    人子日月几点阅读 506评论 0 1