Java基础-控制结构
顺序控制
顺序控制其实就是我们正常程序执行的顺序,从上到下逐行执行,中间没有任何判断和跳转
分支控制if-else
分支控制有三种
- 单分支
- 双分支
- 多分支
单分支
基本语法
if(条件表达式){
执行代码块;
}
条件表达式true时,就会执行{ }的代码。为false则不执行执行代码块的语句。继续执行{ }后面的代码
import java.util.Scanner;
public class if01{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = myScanner.nextInt();
if(age >= 18){
System.out.println("你的年龄大于18,要对自己的行为负责,送入监狱");
}
}
}
流程图
双分支
基本语法
if(条件表达式){
执行代码块1;
}else{
执行代码块2;
}
条件表达式true时,就会执行代码块1的代码。为false则执行代码块2的语句。然后继续执行{ }后面的代码
import java.util.Scanner;
public class if02{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age = myScanner.nextInt();
if(age >= 18){
System.out.println("你的年龄大于18,要对自己的行为负责,送入监狱");
} else{
System.out.println("你的年龄不大,这次放过你");
}
}
}
流程图
多分支
基本语法
if(条件表达式){
执行代码块1;
}else if{
执行代码块2;
}
......
else {
执行代码块n;
}
特别说明:
- 多分支可以没else,如果所有条件表达式都不成立,则一个执行入口都没有
- 如果有else,所有条件表达式都不成立,则执行入口是else
import java.util.Scanner;
public class hello {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("保国同志,请输入你的芝麻信用分(0-100)");
int grade = myScanner.nextInt();
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("保国同志,你的信用不及格");
}
}
}
流程图
嵌套分支
注意:不要超过三层嵌套(可读性不好)
import java.util.Scanner;
public class hello {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入本月的月份:");
int month = myScanner.nextInt();
if(month >= 4 && month <= 10){
System.out.println("请输入您的年龄");
int age = myScanner.nextInt();
if(age >= 18 && age <= 60){
System.out.println("你需要支付60元票价");
}else if(age < 18){
System.out.println("你需要支付30元票价");
}else if(age > 60){
System.out.println("你需要支付20元票价");
}
}else{
System.out.println("请输入您的年龄");
int age = myScanner.nextInt();
if(age >= 18 && age <= 60){
System.out.println("你需要支付40元票价");
}else{
System.out.println("你需要支付20元票价");
}
}
}
}
switch分支
基本语法
switch(表达式){
case 常量1:
语句块1;
break;
case 常量2:
语句块2;
break;
......
default:
default语句块;
break;//有没有break都会退出了
}
Detail
- switch关键字表示switch分支
- 表达式对应一个值(但不一定需要是常量),与以下的case的常量有关,如果匹配不上case的所有常量,则执行default
- break表示退出switch
- switch中根据case顺序判断
流程图(需要注意)
break处容易出错,还有default的位置都需要注意
示例代码
import java.util.Scanner;
public class hello {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g):");
char c1 = myScanner.next().charAt(0);
switch (c1){
case 'a':
System.out.println("今天是周一");
break;
case 'b':
System.out.println("今天是周二");
break;
case 'c':
System.out.println("今天是周三");
break;
default:
System.out.println("只有abc哦!");
break;
}System.out.println("退出了switch,继续执行程序");
}
}
Detail:
- 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是 int
- switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
- case子句中的值必须是常量,而不能是变量
- default子句是可选的,当没有匹配的case时,执行default
- break语句用来在执行完一个case分支后使程序跳出switch语句块:如果没有写break,程序会顺序执行到switch结尾
switch和if的比较
- 如果判断的具体数值不多,而且符合byte、 short、int、 char、 enum[枚举]、String这6种类型。虽然两个语句都可以使用,建议使用swtich语句。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更大