概念:if语句可以根据某个条件控制程序的执行流程
基本if结构 语法:
if( 布尔表达式 ){ //当布尔表达式为true执行,否则不执行 }
例:
int a = 10; //如果a<100为true 执行{} 中的代码,执行完毕后跳出if结构继续向下执行其他代码 if( a < 100 ){ System.out.println("Hello"); } System.out.println("程序结束!");
if--else结构 语法:
if( 布尔表达式 ){ //当布尔表达式为true时执行 }else{ //当布尔表达式为false时执行 }
例:
//从控制台中接收两个整数,计算两个整数的商 //1.创建Scanner Scanner sc = new Scanner(System.in); System.out.println("请输入两个整数:"); //2.选择接收数据的方法 int a = sc.nextInt(); int b = sc.nextInt(); //计算两个整数的商 //如果b!=0时 执行a/b 否则 提示用除数不能为0! if( b!=0 ){ //b!=0 为 true 时执行 System.out.println( a/b ); }else{ //b!=0 为 false 时执行 System.out.println("除数不能为0!"); }
if-elseif -else 主要用于多条件的筛选 语法:
if( 布尔表达式1 ){ //当布尔表达式1为true时执行 }else if(布尔表达式2){ //当布尔表达式2为true时执行 }else if(布尔表达式3){ //当布尔表达式3为true时执行 }...else{ //以上表达式均为false执行 }
例:
//85以上 奖励奔驰一辆 //70-84 奖励长安奔奔一辆 //60-69 奖励电驴一辆 //低于60分 奖励富士康offer一个 import java.util.Scanner; public class TestIf3{ public static void main(String[] args){ //用户输入一个成绩,打印该成绩所对应的奖励 Scanner sc = new Scanner(System.in); System.out.println("请输入一个成绩:"); int s = sc.nextInt(); //同样的数值根据不同的条件执行不同的代码 //85以上 奖励奔驰一辆 if( s>=85 ){ System.out.println("奖励奔驰一辆!"); }else if( s>=70 && s<=84 ){ //70-84 奖励长安奔奔一辆 System.out.println("奖励长安奔奔一辆!"); }else if(s>=60 && s<=69){ //60-69 奖励电驴一辆 System.out.println("奖励电驴一辆!"); }else{ //低于60分 奖励富士康offer一个 System.out.println("奖励富士康offer一个!"); } } }
执行流程:
程序执行时依次判断if--elseif中的条件是否满足,发现满足某个条件时执行{}中的代码随后跳出if--elseif结构,如果没有满足条件的if-elseif语句则执行最后的else{}
自然语言与代码之间的关系
如果 怎么样 则做什么 ---> if(){} 如果 怎么样 否则怎么样 ---> if(){}else{} 如果 怎么样 再如果怎么样...否则怎么样 ----> if(){}elseif(){}else{}
关于if语句的补充
当if语句中只有一行代码需要执行时{}号可以省略,适用于所有结构if/if--else/if--elseif-else if( a简写形式中的唯一一行代码不能用于定义变量
本例中,内部 switch 语句中的case 1:
语句与外部 switch 语句中的case 1:
语句不冲突。变量 count 仅与外层的 case 语句相比较。如果变量 count 为 1,则变量 target 与内层的 case 语句相比较。
学到这里我们可以发现以下几点:
最后一点尤其有趣,因为它使我们知道 Java 编译器如何工作。当编译一个 switch 语句时,Java 编译器将检查每个 case 常量并且创造一个“跳转表”,这个表将用来在表达式值的基础上选择执行路径。因此,如果你需要在一组值中做出选择,switch 语句将比与之等效的 if-else 语句快得多。
编译器可以这样做是因为它知道 case 常量都是同类型的,所要做的只是将它与 switch 表达式相比较看是否相等。对于一系列的 if 表达式,编译器就无此功能。
作用:适用于等值判断,根据变量不同的值执行不同的代码
语法:
switch( 变量 ){ case 值1://当变量的值与值1相等时执行; case 值2://当变量的值与值2相等时执行; case 值3://当变量的值与值3相等时执行; //... default://当没有与变量匹配的值时执行; }
执行流程:
当程序发现变量与某个值相同时执行case后面的代码,执行完毕后无论是否与后续case匹配向下继续执行其他代码直至最后一行代码执行完毕。(落空机制)
break关键字:当程序遇到break关键字时跳出switch结构,通常情况switch配合break一起使用 例:
import java.util.Scanner; public class TestSwitch2{ public static void main(String[]args){ Scanner sc = new Scanner(System.in); System.out.println("请输入名次:"); //用户输入名次--打印名次的代称 int n = sc.nextInt(); //1----冠军 //2----亚军 //3----季军 //4----殿军 //5~n--请继续努力 switch( n ){ 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("请继续努力!"); } } }
注意:
switch中的变量支持 byte、short、int、char JDK7 后 支持String JDK12 后 switch可以生成一个结果 JDK13 后 可以在打印语句中打印switch语句生成的结果(预览版) JDK14 后 确认为最终版
public static void main(String[] args) { switch (count) { case 1: switch (target) { case 0: System.out.println("target is zero"); break; case 1: System.out.println("target is one"); break; } break; case 2: // ... } }
if 和 switch 语句都表示条件语句,可以从使用效率和实用性两方面加以区分。
1. 从使用效率上区分
从使用效率上区分,在对同一个变量的不同值作条件判断时,既可以使用 switch 语句,也可以使用 if 语句。使用 switch 语句的效率更高一些,尤其是判断的分支越多,越明显。
2. 从实用性上区分
从语句的实用性角度区分,switch 语句不如 if 条件语句,if 语句是应用最广泛和最实用的语句。
3. 何时使用 if 语句和 switch 语句
在程序开发的过程中,何时使用 if 语句和 switch 语句,需要根据实际情况而定,应尽量做到物尽其用。不能因为 switch 语句的效率高就一直使用,也不能因为 if 语句常用就不用 switch 语句。需要根据实际情况,具体问题具体分析,使用最适合的条件语句。
一般情况下,对于判断条件较少的,可以使用 if 条件语句,但是在实现一些多条件的判断中,最好使用 switch 语句