顺序控制
程序从上到下逐行的执行,中间没有任何判断和跳转。
-
注意事项
Java中定义变量时采用合法的前向引用。
public class Test{ int num1 = 12; int num2 = num1 + 2; }
分支控制(if,else,switch)
分支控制if-else介绍
单分支
-
基本语法
if(条件表达式){ 执行代码块;(可以有多条语句) }
说明:当条件表达式为true时,就会执行{ }的代码。如果为false,就不执行。
特别说明:如果{ }中只有一条语句,则可以不用{ }。
-
案例说明
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
/*可以输入人的年龄,如果年龄大于18岁,
则输入:“你年龄大于18,要对自己的行为负责,送入监狱”
思路分析:
1. 接收输入的年龄,定义一个Scanner对象*/
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
//2.把年龄保存到一个变量 int age
int age = myScanner.nextInt();
//3.使用if判断,输出对应信息
if(age > 18){
System.out.println("你年龄大于18,要对自己的行为负责,送入监狱");
}
System.out.println("程序继续...");
/*请输入年龄
21
你年龄大于18,要对自己的行为负责,送入监狱
程序继续...*/
}
}
双分支
-
基本语法
if(条件表达式){ 执行代码块;(可以有多条语句) }else{ 执行代码块; }
说明:当条件表达式成立,即执行代码块1,否则执行代码块2。
特别说明:如果{ }中只有一条语句,则可以不用{ }。
-
案例演示
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
/*可以输入人的年龄,如果年龄大于18岁,
则输入:“你年龄大于18,要对自己的行为负责,送入监狱”,
否则“不符合法定年龄,请监护人加强教育。”
思路分析:
1. 接收输入的年龄,定义一个Scanner对象*/
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
//2.把年龄保存到一个变量 int age
int age = myScanner.nextInt();
//3.使用if-else判断,输出对应信息
if(age > 18){
System.out.println("你年龄大于18,要对自己的行为负责,送入监狱");
}else{
System.out.println("不符合法定年龄,请监护人加强教育。");
}
System.out.println("程序继续...");
/*请输入年龄
18
不符合法定年龄,请监护人加强教育。
程序继续...*/
}
}
单/双分支练习题
1.
//练习1
public class Homework01{
public static void main(String[] args){
int x = 7;
int y = 4;
if(x > 5){
if(y > 5){
System.out.println(x + y);
}
System.out.println("易十六~");
}else{
System.out.println("x is" + x);
}//易十六~
}
}
2.
//练习二
/*声明两个double型变量并赋值。判断第一数大于10.0,且第二个
数小于20.0,打印两束之和*/
double a = 11.0;
double b = 32.0;
if(a > 10.0 && b > 20.0){
System.out.println("两数之和为:" + (a + b));
}
多分支
-
基本语法
if(条件表达式1){ 执行代码块1; }else if(条件代码块2){ 执行代码块2; } ………… else{ 执行代码块n; }
说明:
- 当条件表达式1成立,即执行代码块1
- 如果条件表达式1不成立,才去判断表达式2是否成立
- 如果条件表达式2成立,就执行代码块2
- 以此类推,如果所有的表达式都不成立
- 则执行else的代码块,注意,只能有一个执行入口
特别说明:
- 多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有
- 如果有else,如果所有的条件表达式都不成立,则默认执行else代码块
案例演示
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
/*输入报国同志的芝麻信用分:如果:
1.信用分为100时,输出 信用极好;
2.信用分为(80,99]时,输出 信用优秀;
3。信用分为[60,80]时,输出 信用一般;
4.其他情况,输出 信用不及格
5.请从键盘输入报国的芝麻信用分,并加以判断*/
Scanner myscanner = new Scanner(System.in);
//接收用户输入
System.out.println("请输入信用分1-100分:");
//先对输入的信用分,进行一个范围的有效判断1-100,否则提示输入错误
int grade = myscanner.nextInt();
if(grade >= 1 && grade <= 100){
if(grade == 100){
System.out.println("信用良好");
}else if(grade > 80 && grade <= 99){
System.out.println("信用优秀");
}else if(grade >= 60 && grade <= 80){
System.out.println("信用一般");
}else{
System.out.println("信用不及格");
}
}else{
System.out.println("信用分需要在1-100之间,请重新输入");
}
/*请输入信用分1-100分:
1023
信用分需要在1-100之间,请重新输入
请输入信用分1-100分:
98
信用优秀*/
}
}
练习题
public class Homework01{
public static void main(String[] args){
boolean b = true;
if(b = false){
System.out.println("a");//b = flase
}else if(b){
System.out.println("b");//不会执行
}else if(!b){// 取反
System.out.println("c");// c
}else{
System.out.println("d");
}
}
}
嵌套分支
-
基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构成为内层分支,外面的分支结构称为外层分支。
🌻 规范:不要超过3层(可读性不好)
-
基本语法
if(){
if(){
//if-else...
}else{
//if-else...
}
}
switch分支结构
-
基本介绍
- switch关键字,表示switch分支
- 表达式对应一个值
- case常量1:当表达式的值等于常量1,就执行语句块1
- break:表示退出switch
- 如果和case常量1匹配,就执行语句块1,如果没有匹配,就继续匹配case常量2
- 如果一个都没有匹配上,执行default
-
基本语法
switch(表达式){
case 常量1: //当……
语句块1;
case 常量2;
语句块2;
break;
……
case 常量n;
语句块n;
break;
default;
default 语句块;
break;
}
快速入门
//该程序可以接收一个字符,比如:a,b,c,d,e,f,g
//a表示星期一,b表示星期二
//根据用户的输入显示相应的信息
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
/*思路分析
1.接受一个字符,创建Scanner对象
2.使用switch来完成匹配,并输出信息。*/
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g)");
char c1 = myScanner.next().charAt(0);
//在java中,只要是有值返回,就是一个表达式
switch(c1){
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
//……
default:
System.out.println("您输入的字符没有所匹配的内容");
}
System.out.println("推出了switch,继续执行程序");
}
}
//请输入一个字符(a-g)
//c
//星期三
//退出了switch,继续执行程序
————————————————————————————
//请输入一个字符(a-g)
//k
//您输入的字符没有所匹配的内容
//推出了switch,继续执行程序
-
细节
-
表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int
public class Homework01{ public static void main(String[] args){ char c = 'a'; switch(c){ case 'a': System.out.println("ok1");/*ok1*/ break; case 20 : System.out.println("ok2");//可编译通过 break; default: System.out.println("ok3"); } } }
-
switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举],String)
double c = 1.1; switch(c){//错误 case 1.1;//错误 System.out.println("ok3"); break; }
-
case子句中的值必须是常量或常量表达式,而不能是变量
-
default子句是可选的,当没有匹配的case时,执行default
-
break语句用来执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行到switch结尾,除非遇到break
public class Homework01{ public static void main(String[] args){ char c = 'a'; switch(c){ case 'a': System.out.println("ok1"); //break; case 20 : System.out.println("ok2"); break; default: System.out.println("ok3"); } System.out.println("退出了switch,继续执行……"); // ok1 // ok2 // 退出了switch,继续执行…… } }
-
-
练习题
使用switch把小写类型的char型转为大写(键盘输入),只转换a,b,c,d,e,其他输出”other。
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入a-e");
char c1 = input.next().charAt(0);
switch(c1){
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("请重新输入");
}
}
}//请输入a-e
//a
//A
- 对学生成绩大于60分的,输出“合格”。低于60分的,输出不合格。(注:输入的成绩不能大于100,提示:成绩/60)
-
❗思路分析
- 这道题可以使用分支来完成,但要求使用switch
- 这里我们需要进行一个转换:
- 如果成绩在[60,100],(int)(成绩/60) = 1
- 如果成绩在[0,60),(int)(成绩/60) = 0
则我们通过计算来和0、1比较
-
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入你的成绩:");
double score = input.nextInt();
if(score >= 0 && score <= 100){
switch((int)(score / 60)){
case 0:
System.out.println("不合格");
break;
/*请输入你的成绩:
57
不合格*/
case 1:
System.out.println("合格");
break;
/*请输入你的成绩:
80
合格*/
}
}else{
System.out.println("请重新输入,需要在0-100之间");
}
}
}
- 根据用户指定月份,打印该月份所属的季节。3,4,5春季;6,7,8夏季;9,10,11秋季;12,1,2冬季(提示:使用穿透)
- ❗思路分析:
- 创建Scanner对象,接收用户输入
- 使用int month 接收
- 使用switch 来匹配,使用穿透来完成
- ❗思路分析:
import java.util.Scanner;
public class Homework01{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入月份:");
int month = input.nextInt();
switch(month){
case 3:
case 4:
case 5: //穿透
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
default:
System.out.println("请重新输入,需要在0-100之间");
}
/*请输入月份:
2
冬季*/
}
}
-
switch和if的比较
1.如果判断的具体数值不多,而且符合byte、short、int、char、enum[枚举]、String这6种类型。虽然两个语句都可以使用,建议使用switch语句。
2. 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。