文章目录
- 一、选择结构语句
- (一)if条件语句
- 1、if语句
- 2、if...else语句
- if...else语句具体语法格式如下:
- 3、if...else if...else语句
- if...else if...else语句具体语法格式如下:
- (二)三元运算符
- 三元运算符语法格式如下:
- (四)switch条件语句
- switch语句的基本语法格式如下:
- 案例1:构建可进不可退的多级菜单系统
一、选择结构语句
- 在实际生活中经常需要做出一些判断,例如:开车开到一个十字路口,就需要对红绿灯进行判断,若前面是红灯,就停车等候;若是绿灯,就通行。Java中有一种特殊的语句称为选择语句,他也需要对一种条件做出判断,从而决定执行哪一段代码。选择语句分为if条件语句和switch条件语句。
(一)if条件语句
- if条件语句分为三种语法格式
1、if语句
- if语句是指如果满足某种条件,就进行某种处理。例如:花花妈妈跟花花说“如果你考试得了100分,周末就带你去游乐园玩。”这句话可以通过以下代码来描述:
如果花花考试得了100分
妈妈周末就带花花去游乐园玩
- 在上述代码中,
如果
就相当于Java中的if
关键字,“花花考试得了100分”是判断条件,需要用()括起来,“妈妈周末就带花花去游乐园”是执行语句,需要放在{}中。修改后代码如下:
if (花花考试得了100分) {
妈妈周末就带花花去游乐园
}
在Java中,if语句具体格式如下:
if (条件语句)
{
代码块
}
- 在上述格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执行。
- if语句执行流程图如下:
- 下面通过一个案例来学习if语句的具体用法:
public class p39 {
public static void main(String[] args) {
int x = 5;
if (x < 10) {
x++;
}
System.out.println("x=" + x);
}
}
- 运行结果如下:
- 在上述代码第三行定义了一个变量x,初始值为5。在第四至六行代码
if
语句中判断x的值是否小于10,如果x小于10,就会执行x++。由于x值为5,x<10条件成立,{}中的语句会被执行,变量x的值进行自增。从运行结果来看x的值已经从5变成6了。
2、if…else语句
- if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如:要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。
if…else语句具体语法格式如下:
if (判断条件)
{
执行语句1
...
}
else
{
执行语句2
...
}
- 上述格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会执行。当判断条件为false时,else后面{}中的执行语句2会执行。
- if…else语句执行流程图如下:
- 判断奇偶数的案例:
public class p39_2{
public static void main(String[] args) {
int num = 19;
if (num % 2 == 0) {
// 判断条件成立,num被2整除
System.out.println("num是一个偶数");
} else {
System.out.println("num是一个奇数");
}
}
}
- 运行结果如下:
- 上述实例中,第三行代码定义了变量num,num初始值为19;第4~9行代码判断num%2的值是否为0,如果为0则输出"num是一个偶数",否则输出"num是一个奇数"。由于num的值为19,与2取模的结果为1,不等于0,判断条件不成立。因此程序执行else后面{}中的语句,打印"num是一个奇数"。
3、if…else if…else语句
- if…else if…else语句用于对多个条件进行判断,根据判断结果进行多种不同的处理。
if…else if…else语句具体语法格式如下:
if (判断条件1)
{
执行语句1
}
else if (判断条件2)
{
执行语句2
}
...
else if (判断条件n)
{
执行语句n
}
else
{
执行语句n+1
}
- 上述格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件为false时,会继续执行判断条件
,如果判断条件2为true则执行语句2…,以此类推,如果所有的判断条件都为false,则意味着所有判断条件都不满足,else后面{}中的执行语句n+1会执行。 - if…else if…else语句的执行流程图如下:
- 下面通过一个案例演示if…else if…else语句的用法,该案例实现对学生考试成绩进行等级划分的程序:
public class p41 {
public static void main(String[] args) {
int grade = 75; // 定义学生成绩
if (grade > 80) {
// 满足条件 grade > 80
System.out.println("优秀");
} else if (grade >70) {
// 不满足条件 grade > 80,但是满足条件grade>70
System.out.println("良好");
} else if (grade >60) {
// 不满足条件 grade >70,但是满足条件 grade > 60
System.out.println("中等");
} else {
// 不满足条件 grade >60
System.out.println("差");
}
}
}
- 运行结果如下:
- 上述代码中第三行代码定义了学生成绩grade为75.grade=75不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“良好”。
(二)三元运算符
- Java提供了一个三元运算符,可以同时操作三个表达式
三元运算符语法格式如下:
判断条件 ? 表达式1 : 表达式2
- 在上述语法格式中,当判断条件成立时,计算表达式1的值作为整个表达式的结果,否则计算表达式2的值作为整个表达式的结果。
- 三元运算符的功能与if…else语法相同,但是使用三元运算符可以简化代码。例如,求两个数x、y中的较大者。
- 如果用if…else语句来实现,具体代码如下:
int x =0;
int y = 1;
int max;
if (x > y) {
max = x;
} else {
max = y;
}
System.out.println(max);
- 用三元运算方法的具体代码如下:
int x =0;
int y = 1;
max = x > y? x : y;
System.out.println(max);
- 两段代码运行结果都会得到max=1.
- 使用三元运算符时要注意:
- (1)条件运算符“?”和“:”是一对运算符,不能分开单独使用。
- (2)条件运算符的优先级低于关系运算符和算术运算符,但高于赋值运算符。
- (3)条件运算符可以进行嵌套,结合方向自右向左。例如:a>b?a:c>d?c:d应该理解为a>b?a: (c>d?c:d),也是条件运算符的嵌套情形,即三元表达式中的表达式2又是一个三元表达式。
(四)switch条件语句
- switch条件语句也是一种很常用的选择语句,与if条件语句不同,他只能对某个表达式的值做出判断,从而决定程序执行哪一段代码。
- 例如:在程序中使用数字1~7表示星期一到星期天,如果想根据输入的数字去输出对应中文格式的星期值,代码如下:
用于表示星期的数字
如果等于1,则输出星期一
如果等于2,则输出星期二
如果等于3,则输出星期三
如果等于4,则输出星期四
如果等于5,则输出星期五
如果等于6,则输出星期六
如果等于7,则输出星期天
switch语句的基本语法格式如下:
switch (表达式) {
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
...
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
- 在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,则执行对应case后面的语句;如果没找到任何匹配的值,则执行default 后的语句。switch 语句中的break关键字将在后面的章节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。
- 案列演示switch语句的用法:
public class p43 {
public static void main(String[] args) {
int week = 5;
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;
}
}
}
- 运行结果如下:
- 若将第三行代码替换为 int week = 8;运行结果如下:
- 在使用switch语句时,如果多个case条件后面的执行语句是一样的, 则执行语句只需书写-次即可。 例如,要判断一周中的某一天是否为工作日, 同样使用数字1~7表示星期一到星期天, 当输人的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。具体代码如下:
public class p44 {
public static void main(String[] args) {
int week = 2;
switch (week) {
case 1:
case 2:
case 3:
case 4:
case 5:
// 当week满足值1、2、3、4、5中任意一个时,处理方式相同
System.out.println("今天是工作日");
break;
case 6:
case 7:
// 当week满足值6、7中任意一个时,处理方式相同
System.out.println("今天是休息日");
break;
}
}
}
- 运行结果如下:
- 当变量week的值为1、2、3、4、5中任意一个时,处理方式相同,都会打印“今天是工作日”;当变量week的值为6、7中任意一个时,打印“今天是休息日”。
案例1:构建可进不可退的多级菜单系统
public class XExercise02 {
public static void main(String[] args) {
//声明部分
int mc1, mc2;
Scanner sc = new Scanner(System.in);
// 绘制一级菜单
System.out.println("名片管理系统");
System.out.println("==================");
System.out.println(" 1.登录");
System.out.println(" 0.退出");
System.out.println("==================");
System.out.print("输入菜单选项[1,0]:");
// 根据用户选择执行相应操作
mc1 = sc.nextInt();
switch (mc1) {
case 1:
// 调用登录方法
login();
break;
case 0:
System.out.println("谢谢使用~再见~");
break;
default:
System.out.println("输入的菜单编号有误!");
}
}
private static void login() {
String username,password;
Scanner sc = new Scanner(System.in);
System.out.print("用户名:");
username = sc.next();
System.out.print("密 码");
password = sc.next();
if (username.equals("Hflower") && password.equals("123456")) {
System.out.println("登录成功~");
// 名片管理方法
cardManagement();
} else {
System.out.println("用户们或密码有误,登录失败~");
}
}
private static void cardManagement() {
int mc2;
Scanner sc = new Scanner(System.in);
// 绘制二级菜单
System.out.println("======名片管理======");
System.out.println("1.添加名片");
System.out.println("2.修改名片");
System.out.println("3.查询名片");
System.out.println("4.删除名片");
System.out.println("==================");
System.out.print("输入菜单编号[1,2,3,4]:");
mc2 = sc.nextInt();
switch (mc2) {
case 1:
System.out.println("执行添加名片功能~");
break;
case 2:
System.out.println("执行修改名片功能~");
break;
case 3:
System.out.println("执行查询名片功能~");
break;
case 4:
System.out.println("执行删除名片功能~");
break;
default:
System.out.println("输入的菜单编号有误!");
}
}
}
- 运行结果如下: