CoreJava 分支结构
day3 分支结构
一、扫描仪与导包语句
-
扫描仪(Scanner)
扫描仪:可以在控制台接收用户输入的数据,以回车键结束输入,扫描仪开启之后可以重复使用,直至主动关闭
-
开启扫描仪
java.util.Scanner sc = new java.util.Scanner(System.in); -
数据的接收
从控制台接收数据的时候,不同的数据类型使用不同的方法:
int i = sc.nextInt(); double d = sc.nextDouble(); String s = sc.next(); char c = sc.next().charAt(0); -
关闭扫描仪
关闭的语句可以省略,代码运行结束自动关闭
sc.close();
-
-
导包语句(import)
- 语法:
- 导入某个指定类:import 包名.类名;
- 导入某个包中所有的类:import 包名.*;
- 声明的位置:在package语句之下,class声明之上,可以写入多行import语句
- 注意事项:
- 允许使用*号一次导入该包下所有的类,但是不建议使用
- *号只会导入当前包下所有的类,不会导入子包中的类
- 号不允许连用,即 import java.util..*; 这样的语句是错的
- *号可能会引起指向不明确
- java.lang包作为基础包会被默认导入,不需要导包
package day3; import java.util.Scanner;//导入指定类 import java.util.Date;//导入指定类 import java.sql.*;//导入java.sql包下所有的类 public class Test { public static void main(String[] args) { } } - 语法:
二、if分支结构
-
if分支结构
-
语法结构:
if(布尔表达式){
//代码
} -
执行顺序:先执行if中的布尔表达式,如果结果为true则进入代码区域执行代码,执行结束之后继续执行if结构之后的代码;如果结果为false则跳过代码区域,直接执行之后的代码。
package day3; public class TestIf { public static void main(String[] args) { int a = 3; if(a == 3){//判断结果为true,进入if结构 System.out.println("a的值为3");//此行会执行 } if(a != 3){//判断结果为false,跳过if结构 System.out.println("a的值不为3"); } //继续执行代码 System.out.println("代码运行结束"); } } -
-
if...else结构
-
语法结构:
if(布尔表达式){
//代码一
}else{ //代码二
}
-
执行顺序:先执行if中的布尔表达式,如果结果为true则进入if之后的代码区域执行代码,执行结束之后继续执行if..else结构之后的代码;如果结果为false则进入else之后的代码区域执行代码,执行结束之后继续执行if..else之后的代码
package day3; public class TestIfElse { public static void main(String[] args) { int a = 3; if (a == 3) { System.out.println("a的值为3"); } else { System.out.println("a的值不为3"); } System.out.println("代码运行结束"); } }
-
-
if...else if..else..结构
-
语法结构:
if(布尔表达式一){
//代码一
}else if(布尔表达式二){ //代码二
}else{
//代码三
}
public class TestIf { public static void main(String[] args) { int a = 5; if(a % 2 == 0){ System.out.println("a是偶数"); }else if(a % 2 != 0){ System.out.println("a是奇数"); }else{ System.out.println("我也不知道怎么会有这样的数"); } } } b.执行顺序:
- 先判断布尔表达式一的结果,如果表达式的的结果为true则执代码一,代码一执行结束之后直接跳出if结构,不再判断之后的表达式
- 如果布尔表达式一的结果为false,那么向下查询,去判断下一个布尔表达式,即布尔表达式二的结果,如果结果为true,则执行代码二,代码二执行结束之后直接跳出if结构。否则的话继续向下。
- 不断重复上述执行,直至所有表达式都判断结束,结果全为false的时候,进入else代码块,执行完成后会结束if结构
-
-
if嵌套
-
语法结构
if(布尔表达式一){ if(布尔表达式二){ //代码二 }else{ //代码三 } }else{ //代码三 }
-
public class TestIf {
public static void main(String[] args) {
int a = 5;
if (a <= 7 && a >= 1) {
if (a <= 5 && a >= 1) {
System.out.println("工作日");
}else{
System.out.println("双休");
}
}else{
System.out.println("上帝没创造出星期八");
}
}
}
-
执行顺序:
- 参照if结构,先判断布尔表达式一的结果,如果为true,则进入代码块
2. 进入代码块之后,判断内层if结构的结果,参照if结构的执行顺序
- 参照if结构,先判断布尔表达式一的结果,如果为true,则进入代码块
三、switch分支
-
语法:
switch(表达式){
case 值1:代码块1;
case 值2:代码块2;
case 值3:代码块3;}
注意:表达式的结果的数据类型必须是byte,short,int,char类型,JDK1.7之后支持String类型
-
case穿透:当匹配某个结果时,会向下运行之后所有的代码,而不是只执行其后的一段代码,这种现象叫做case穿透
-
break关键字:在switch结构中,使用break关键字,可以结束代码的运行,从而跳出switch结构,防止出现case穿透
-
default:当没有结果正确被匹配时,可以使用default来给switch结构一个默认的匹配结果。default的匹配时机:仅当所有结果都不匹配的时候才使用default之后的代码,这与default声明的位置无关。当default位于最后的时候,其后的break可以省略,但是不建议省略。
-
当不同的值需要匹配相同的代码时,可以省略上方case之后的代码,利用case穿透简化代码
public class TestSwitch {
public static void main(String[] args) {
int i = 3;
switch (i) {
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;
}
}
}
四、局部变量
- 概念:局部变量是定义在函数内部的变量
- 特点:
- 局部变量在声明之后,必须先赋值,然后才可以使用
- 局部变量的有效范围:从其声明的位置开始,到其所在作用域结束
- 局部变量的命名要求:在重合的作用域内,局部变量不可以重名
浙公网安备 33010602011771号