分支语句
分支语句又称选择语句,当满足某个条件时,就进行某种操作。Java中有三种选择结构:
- if…else if…else
- switch
一、java语言中的if分支语句
java语言中有if,else if和else三个if语法,与python不同的是没有elif的用法,只有else if。
/*
关于java语言中的if语句,属于选择结构,if语句又被称为分支语句/条件控制语句
1、if语句的语法结构:四种编写方式
第一种:
if(布尔表达式){
java语句;
java语句;
...
}
第二种:
if(布尔表达式){
java语句;
java语句;
...
}else{
java语句;
java语句;
...
}
第三种:
if(布尔表达式){
java语句;
java语句;
...
}else if(布尔表达式){
java语句;
java语句;
...
}else if(布尔表达式){
java语句;
java语句;
...
}else if(布尔表达式){
java语句;
java语句;
...
}......
第四种:
if(布尔表达式){
java语句;
java语句;
...
}else if(布尔表达式){
java语句;
java语句;
...
}else{
java语句;
java语句;
...
}
2、重点:对于java中的if语句来说,只要一个分支执行,整个if语句全部结束
3、注意:以上的第二种编写方式和第四种编写方式都带有else分支,
可以百分百保证一定会有分支执行。
4、所有的控制语句都是可以嵌套使用的,只要是合理嵌套都行
if(){
if(){
if(){
}
}
}else{
if(){
if(){
}
}
}
注意:嵌套使用的时候代码格式要保证完美【该缩进的时候就要缩进】
5、if语句的分支中有且只有一条语句时,大括号可以省略不写。
if(true/false){
java语句;
}
可以写成:
if(true/false) 一条java语句;
这种方式不推荐使用,能看懂就行
*/
public class iftest01
{
public static void main(String[] args){
//1、需求所在位置的五公里之内有肯德基的话,去KFC吃午饭
double distance = 4.0;
if(distance<5){
System.out.println("去吃肯德基。");
}
}
}
练习1、:用户输入年龄,判断位于哪个年龄段:
/*
需求:从键盘输入一个整数
[0-5] 幼儿
[6-10] 少儿
[11-18] 青少年
[19-35] 青年
[36-55] 中年
[56-150] 老年
*/
public class iftest02
{
public static void main(String[] args){
//1、接收键盘输入:年龄
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入您的年龄:"); //输入提示信息
int age = s.nextInt(); //停下来等待用户输入,输入之后自动换行
//2、根据需求进行业务逻辑判断
String str = "老年";
if(age<0 || age>150){
str = "您输入的年龄不合法,年龄需要在【0-150】之间";
System.out.println(str);
}else{
if(age<=5){
str = "幼儿";
}else if(age<=10){
str = "少儿";
}else if(age<=18){
str = "青少年";
}else if(age<=35){
str = "青年";
}else if(age<=55){
str = "中年";
}else if(age<=150){
str = "老年";
}
System.out.println("您现在处于"+str+"阶段");
}
}
}
练习2:输入天气和性别进行判断
/*
需求:从键盘输入一个整数
[0-5] 幼儿
[6-10] 少儿
[11-18] 青少年
[19-35] 青年
[36-55] 中年
[56-150] 老年
*/
public class iftest02
{
public static void main(String[] args){
//1、接收键盘输入:年龄
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入您的年龄:"); //输入提示信息
int age = s.nextInt(); //停下来等待用户输入,输入之后自动换行
//2、根据需求进行业务逻辑判断
String str = "老年";
if(age<0 || age>150){
str = "您输入的年龄不合法,年龄需要在【0-150】之间";
System.out.println(str);
}else{
if(age<=5){
str = "幼儿";
}else if(age<=10){
str = "少儿";
}else if(age<=18){
str = "青少年";
}else if(age<=35){
str = "青年";
}else if(age<=55){
str = "中年";
}else if(age<=150){
str = "老年";
}
System.out.println("您现在处于"+str+"阶段");
}
}
}
3、if后只有一条语句的用法
public class iftest05
{
public static void main(String[] args){
boolean sex = true;
if(sex){
System.out.println("男");
}else{
System.out.println("女");
}
sex = false;
if(sex) System.out.println("男"); else System.out.println("女");
//-----------------------------------------
//以下代码会报错:错误: 有 'if', 但是没有 'else'
//原因:if后边可以不加大括号,紧跟着的那句话包含在if里面,
//导致if跟else之间有其他语句
/*
if (sex)
System.out.println("男");
System.out.println("1111111111111");
else
System.out.println("女");
*/
}
}
二、switch语句的用法
练习1:使用switch判断日期:
/*
关于switch语句:
1、switch语句也属于选择结构,也是分支语句
2、switch语句的语法结构,case标签内容不能重复:
一个完整的switch语句应该这样编写:
switch(int或String类型的字面值或变量){
case int或String类型的字面值或变量:
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
...
break;
case int或String类型的字面值或变量:
java语句;
...
break;
default:
java语句;
....
}
3、switch语句执行原理:
switch后面小括号当中的"数据"和case后面的"数据"进行一一匹配,匹配成功的分支执行
按照自上而下的顺序依次匹配。
4、匹配成功的分支执行,分支当中有break语句时,整个switch语句终止。
5、匹配成功的分支执行,分支当中没有break语句时,直接进入下一个分支执行(不进行匹配)。
这种现象称为case穿透现象。【为防止穿透现象每个case语句都需要提供break语句】
6、所有的case都不匹配,有default时,走default分支的内容。
7、switch后面和case后面只能是int或String类型的数据,不能探测其他类型。
* byte、short、char也可以直接写到switch和case后面,因为他们可以进行自动类型转换。
byte、short、char可以自动转换成int类型。
* JDK6的,switch和case后面只能探测int类型
* JDK7之后包括7,引入新特性,switch关键字和case关键字后面可以探测int或String类型。
8、case可以合并:
int i =10;
switch(i){
case 1: case 2: case 3:
System.out.println("Hello World!")
}
*/
public class switchTest01
{
public static void main(String[] args){
//当输入10时,这种情况就是case穿透,没有遇到break时会一直向下运行
/*
java.util.Scanner i = new java.util.Scanner(System.in);
System.out.print("请输入年龄:");
int age = i.nextInt();
switch(age){
case 10:
System.out.println("未成年!");
case 20:
System.out.println("已经成年");
}
*/
//较完整的switch语句
/*
接收一个用户输入:
1表示星期一
2表示星期二
...
7表示星期日
*/
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入数字:");
int num = s.nextInt();
String str = "输入有误";
switch (num){
case 1:
str = "星期一";
break;
case 2:
str = "星期二";
break;
case 3:
str = "星期三";
break;
case 4:
str = "星期四";
break;
case 5:
str = "星期五";
break;
case 6:
str = "星期六";
break;
case 7:
str = "星期日";
break;
default:
str = "输入有误";
break;
}
System.out.println(str);
// case合并
switch (num){
case 1: case 0:
str = "星期一";
break;
case 2:
str = "星期二";
break;
case 3:
str = "星期三";
break;
case 4:
str = "星期四";
break;
case 5:
str = "星期五";
break;
case 6:
str = "星期六";
break;
case 7:
str = "星期日";
break;
default:
str = "输入有误";
break;
}
System.out.println(str);
}
}
练习2:判断String类型:
public class switchTest02
{
public static void main(String[] args){
//从键盘输入
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入星期几:");
String dayOfweek = s.next();
//可以传字符串,case和default的位置不会影响结果
switch(dayOfweek){
case "星期一":
System.out.println(1);
break;
default:
System.out.println("输入不合法");
break;
case "星期二":
System.out.println(2);
break;
}
}
}
练习3:判断字符型
public class switchTest03
{
public static void main(String[] args){
//char a = 'A';
char b = 'B';
//char c = 'C';
switch(b){
case 'A':
System.out.println("A");
break;
case 66:
System.out.println("B");
break;
case 'C':
System.out.println("C");
break;
default:
System.out.println("输入错了");
break;
}
}
}
练习4:使用switch搭建简易计算器:
/*
实现计算器当中的
+
-
*
/
%
实现思路:
1、所有数据从键盘输入
2、使用switch语句记性判断
3、需要从控制台输入三次
* 第一个数字
* 运算符
* 第二个数字
最终效果:
欢迎使用简易计算器系统:
请输入第一个数字:10
请输入运算符:+
请输入第二个数字:20
运算结果:10 + 20 = 30
*/
public class switchTest04
{
public static void main(String[] args){
System.out.println("欢迎使用简易计算机系统:");
java.util.Scanner f = new java.util.Scanner(System.in);
System.out.print("请输入第一个数字:");
int num1 = f.nextInt();
System.out.print("请输入运算符:");
String operator = f.next();
System.out.print("请输入第二个数字:");
int num2 = f.nextInt();
int result = 0;
switch(operator){
case "+":
result = num1+num2;
break;
case "-":
result = num1-num2;
break;
case "*":
result = num1*num2;
break;
case "/":
result = num1/num2;
break;
case "%":
result = num1%num2;
break;
default:
System.out.println("输入有误");
}
System.out.println(num1 + operator + num2 + "=" + result);
}
}
练习5:使用switch判断成绩区间
/*
假设系统给定考生成绩,请判断该考生的成绩等级:
1、有效成绩范围:【0-100】
2、考试成绩可能带有小数
3、考试成绩和等级之间对照关系:
[90-100] A
[80-90] B
[70-80] C
[60-70] D
[0-60] E
*/
public class switchTest05
{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入成绩:");
// 除以10得到范围
int score = s.nextInt()/10;
System.out.println(score);
String result = "输入有误";
switch(score){
case 9: case 10:
result = "A";
case 8:
result = "B";
case 7:
result = "C";
case 6:
result = "D";
default:
result = "E";
}
System.out.println(result);
}
}