(一)选择结构
①if,if..else
②switch
1.if语句
1.1 if语句四种结构:
结构一:
if(布尔表达式){
java语句
java语句
...
}
结构二:
if(布尔表达式){
java语句
java语句
...
}else{
java语句
java语句
...
}
结构三:
if(布尔表达式){
java语句
java语句
...
}else if(布尔表达式){
java语句
java语句
...
}else if(布尔表达式){
java语句
java语句
...
}
结构四:
if(布尔表达式){
java语句
java语句
...
}else if(布尔表达式){
java语句
java语句
...
}else if(布尔表达式){
java语句
java语句
...
}else{
java语句
java语句
...
}
【注意】以上的第二种形式和第四种形式都带有else分支,这两种方式可以100%保证会有分支执行。
1.2 重点:对于java语句中的if语句来说,只要有一个分支执行,整个if语句全部结束。
1.3 "所有的控制语句都可以嵌套使用"。嵌套使用的时候要保证代码格式完美
1.4 if语句的分支中只有一条java语句的话,大括号可以省略不写(不推荐这么写)。
import java.util.Scanner;
public class Test{
public static void main(String[] args){
char grade[] = {'A','B','C','D','E'};
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的分数:");
int input = sc.nextInt();
if(input > 100 | input < 0){
System.out.println("请输入的分数格式有误");
}else{
if (input>=90){
System.out.println("您的成绩等级为:"+grade[0]);
}else if(input>=80){
System.out.println("您的成绩等级为:"+grade[1]);
}else if(input>=70){
System.out.println("您的成绩等级为:"+grade[2]);
}else if(input>=60){
System.out.println("您的成绩等级为:"+grade[3]);
}else{
System.out.println("您的成绩等级为:"+grade[4]);
}
}
}
}
【练习二】
代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
System.out.println("提示信息:0表示晴天,1表示下雨;0表示男,1表示女");
String weather[] = {"晴天","下雨"};
String gender[] = {"男","女"};
Scanner sc = new Scanner(System.in);
System.out.print("请输入天气:");
String input_weather = sc.next();
if(input_weather.equals(weather[0])){
System.out.print("请输入性别:");
String input_gender = sc.next();
if(input_gender.equals(gender[0])){
System.out.println("出门不用带伞!");
}else{
System.out.println("出门记得带遮阳伞!");
}
}else{
System.out.println("出门记得带雨伞!");
}
}
}
2.switch
2.1 switch语句也属于选择结构,也是分支语句
2.2 switch语句的语法结构:
一个完整的switch语句应该这样编写:
switch(int或String类型的字面值或变量){
case int或String类型的字面值或变量:
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
...
break;
...
default:
java语句;
...
}
2.3 switch语句的执行原理:
switch后面小括号当中的"数据"和case后面的"数据"进行一一匹配(按照自上而下的顺序依次匹配),匹配成功的分支执行。
2.4 匹配成功的分支执行,分支当中最后有break语句的话,整个switch语句终止。
2.5 匹配成功的分支执行,分支当中没有"break;"语句的话,直接进入下一个分支执行(不进行匹配),这种现象被称为case的穿透现象。【提供break语句可以避免穿透】
2.6 所有分支都没有匹配成功,当有default语句的话,会执行default分支当中的程序。
2.7 switch后面和case后面只能是int或者String类型的数据,不能是探测其他类型。
当然byte、short、char也可以直接写到switch和case后面,因为他们可以进行自动类型转换。byte、short、char可以自动转换成int类型。
2.8 case可以合并:
int i = 10;
switch(i){
case 1: case 2: case 3: case 10:
System.out.println("Test Code");
}
【练习一】
代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
/*
long x = 100L;
switch(x){} //编译报错
*/
//解决上述编译报错
long x = 100L;
switch((int)x){}
byte b = 10;
switch(b){}
short s = 10;
switch(s){}
char c ='A';
switch(c){}
char cc = 97;
switch(cc){}
//编译报错
//switch(true){}
String username = "admin";
switch(username){}
/*
较完整的switch语句
*/
/*
接受用户的输入
1 表示星期一
2 表示星期二
....
*/
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期对应的数字:");
byte user_input = sc.nextByte();
switch(user_input){
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("您输入的数字不是合法的数字,请重新输入!");
}
}
}
【练习二:case穿透 & case合并】
代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入星期对应的数字:");
byte user_input = sc.nextByte();
switch(user_input){
case 0: case 1: //case合并
System.out.println("今天是星期一");
case 2:
System.out.println("今天是星期二");
case 3:
System.out.println("今天是星期三");
case 4:
System.out.println("今天是星期四");
case 5:
System.out.println("今天是星期五");
case 6:
System.out.println("今天是星期六");
case 7:
System.out.println("今天是星期日");
}
}
}
【练习三:实现计算器简单计算】
/*
实现计算器当中的:+、-、*、/、%
实现思路:
1、选择所有数据从键盘输入
2、使用switch语句进行判断
3、需要从控制台输入三次:
①第一个数字
②运算符
③第二个数字
最终在控制台上是这样的场景:
欢迎使用简单计算器系统:
请输入第一个数字:
请输入运算符:
请输入第二个数字:
运算结果:
*/
代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入第一个数字:");
int first_num = sc.nextInt();
System.out.print("请输入运算符:");
String operator = sc.next();
System.out.print("请输入第二个数字:");
int second_num = sc.nextInt();
int result = 0;
System.out.println("欢迎使用简单计算器系统!");
switch(operator){
case "+":
result = first_num + second_num;
System.out.println("运算结果:"+'\n'+first_num+" + "+second_num+" = "+result);
break;
case "-":
result = first_num - second_num;
System.out.println("运算结果:"+'\n'+first_num+" - "+second_num+" = "+result);
break;
case "*":
result = first_num * second_num;
System.out.println("运算结果:"+'\n'+first_num+" * "+second_num+" = "+result);
break;
case "/":
if(second_num == 0){
System.out.println("您输入的除数不合法!");
}else{
result = first_num / second_num;
System.out.println("运算结果:"+'\n'+first_num+" / "+second_num+" = "+result);
}
break;
case "%":
result = first_num % second_num;
System.out.println("运算结果:"+'\n'+first_num+" % "+second_num+" = "+result);
break;
default :
System.out.println("该系统只支持两个数字的加减乘除取余运算!");
}
}
}
【练习四:考生成绩评分练习】
代码如下:
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入考生的成绩:");
double score = sc.nextDouble();
int grade = (int) score/10;
switch(grade){
case 9: case 10:
System.out.println("该考生的成绩为:A");
break;
case 8:
System.out.println("该考生的成绩为:B");
break;
case 7:
System.out.println("该考生的成绩为:C");
break;
case 6:
System.out.println("该考生的成绩为:D");
break;
case 5: case 4: case 3: case 2: case 1: case 0:
System.out.println("该考生的成绩为:E");
break;
default :
System.out.println("您输入的考生成绩不合法!");
}
}
}