Java学习-流程控制03选择结构
选择结构
- if单分支
- if双分支
- if多分支
- if嵌套
- switch多分支
if单分支
-
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法结构:
if(布尔表达式){
//如果布尔表达式值为true执行
}
package com.struct.www; import java.util.Scanner; public class IfDemo01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String str = scanner.nextLine(); //equals判断两个字符串是否相等,不要使用== if(str.equals("hello")){ System.out.println("输入的内容是hello"); } scanner.close(); } }
if双分支
-
那现在有个需求,公司要收购一个软件,成功了,给人支付100万元,没有成功,自己找人开发。这样的需求用一个if无法搞定,我们需要两个判断,需要一个双分支结构,于是有了if-else结构。
语法结构:
if(布尔表达式){
//如果布尔表达式的值为true执行
}else{
//如果布尔表达式的值为false执行
}
package com.struct.www; import java.util.Scanner; public class IfDemo02 { public static void main(String[] args) { //考试分数大于60分,通过,否则不通过 Scanner scanner = new Scanner(System.in); System.out.println("请输入分数:"); int score = scanner.nextInt(); if(score>60){ System.out.println("通过"); }else{ System.out.println("未通过"); } scanner.close(); } }
if多分支结构
-
我们发现刚才的代码不符合现实情况,现实情况还可能存在多个等级ABCD,存在区间多判断,所以我们用多分支来解决这类问题。
语法结构:
if(){
}else if{
}else if{
}else{
}
package com.struct.www; import java.util.Scanner; public class IfDemo03 { public static void main(String[] args) { /* 1.if语句至多有一个else,else在所有if和else if之后。 2.if语句可以有else if,但是else if必须在else之前。 3.一旦其中一个else if检测为true,其它的else if和else都会被忽略。 */ //考试分数大于60分,通过,否则不通过 Scanner scanner = new Scanner(System.in); System.out.println("请输入分数:"); int score = scanner.nextInt(); if(score>=60&&score<70){ System.out.println("C"); }else if(score>=70&&score<80) { System.out.println("B"); }else if(score>80&&score<90){ System.out.println("A"); }else{ System.out.println("A+"); } scanner.close(); } }
if嵌套
-
在Java中使用嵌套if...else语句是合法的,也就是说你可以在另一个if或者else if语句中使用if或者else if,你可以像if语句一样嵌套else if ... else。
语法结构:
if(布尔表达式1){
if(布尔表达式2){
}
}
思考?我们需要查找一个数,在1-100之间。
可以使用if嵌套语句,二分法查找。
package com.struct.www;
import java.util.Scanner;
public class IfDemo04 {
public static void main(String[] args) {
//创建一个扫描器,接收键盘输入的数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数(1-100之间):");
int num = scanner.nextInt();
if(num > 50 && num < 100){
for (int i = 51; i < 100; i++) {
if(num==i){
System.out.println("输入的数字是:"+num);
break;
}
}
}else if(num < 50 && num > 0){
for (int i = 1; i <= 50; i++) {
if(num==i){
System.out.println("输入的数字是:"+num);
break;
}
}
}else{
System.out.println("输入的数字不合法");
}
}
}
switch多分支
-
多分支好似有一个实现方式就是switch case语句。
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
-
switch语句中的变量类型:
- byte、short、int 或者 char.
- 从JDK7开始支持String类型
- 支持枚举类型(enum)(后面讲解)
package com.struct.www; public class SwitchDemo01 { public static void main(String[] args) { char grade = 'C'; //注意:switch的参数只能是byte,short,char,int,enum,String类型 switch (grade){ case 'A': System.out.println("优秀"); break;//可选 case 'B': System.out.println("良好"); break; case 'C': System.out.println("及格"); break; case 'D': System.out.println("不及格"); break; default: System.out.println("输入有误,未知等级"); break; } } }可以查看一下反编译后的代码,看下底层是如何处理的
package com.struct.www; public class SwitchDemo02 { public static void main(String[] args) { String name = "二哈"; //JDK新特性,表达式结果可以是字符串! //字符本质是数字 //反编译 Java -> 字节码 -> 反编译(可以使用IDEA) switch (name){ case "二哈": System.out.println("二哈"); break; case "tom": System.out.println("tom"); break; default: System.out.println("输入有误"); } } } -
switch穿透性
package com.struct.www; public class SwitchDemo03 { public static void main(String[] args) { //switch穿透性 //注意:switch穿透性并不是一个bug(问题),在某些情况下可以利用这个现象来提高程序运行效率 //例如:有几个分支执行内容一致,那就只需要在最后一个分支加上break即可 char grade = 'C'; switch (grade){ case 'A': System.out.println("优秀"); break;//可选 case 'B': System.out.println("良好"); case 'C': System.out.println("及格"); case 'D': System.out.println("不及格"); default: System.out.println("输入有误,未知等级"); } } }以上代码运行结果
及格 不及格 输入有误,未知等级 -
case标签必须为字符串常量或字面量。
我们在学习过程中一定要多看源码,多去分析源码。
浙公网安备 33010602011771号