11、Java中的分支语句

352 阅读11分钟

Java中的分支语句

作者:韩茹

公司:程序咖(北京)科技有限公司

程序咖:IT职业技能评测平台

网址:www.chengxuka.com

yaya

任务

1.程序的执行结构
2.分支语句
3.if语句
4.switch语句

一、程序的执行结构

程序的执行,包括以下三种结构,默认是顺序结构。就是一行一行的逐行执行。

  1. 顺序结构
  2. 选择结构
  3. 循环结构
1.1 顺序结构
程序从上到下一行一行的执行代码,没有判断和中转。
执行完代码段1,就执行代码段2

fenzhi1

1.2 分支结构
有选择性的执行或者跳过指定代码

fenzhi2

1.3 循环结构
循环条件满足,某些代码会被反复多次的执行。

fenzhi3

二、分支结构

本小节我们主要来学习分支结构。在Java语言中,分支结构,有2种语法支持,一种是if语句,一种是switch语句。我们先来看一下if语句。

2.1 if语句

if语句有四种使用形式:

  • if(条件){…}

  • if(条件){…}else{…}

  • if(条件){…}else if(条件){…}else{…}

  • if(条件){ if(条件){...} } else {...}

2.1.1 简单if语句
if (/* 条件判断 true or false */) {
    // 条件结果为true执行大括号以内的语句
}
/*
执行流程:
	代码运行到if分支结构,首先判断if之后的条件是否为true,如果为true,执行大括号里面的语句,如果为false直接执行大括号之外的语句,
*/

流程图:

fenzhi4

示例代码:

import java.util.Scanner;

public class Demo22If {

	public static void main(String[] args) {
		/*
		 * if (条件判断 true or false ) { // 条件结果为true执行大括号以内的语句
		 * 
		 * }
		 * 
		 * 执行流程: 代码运行到if分支结构,首先判断if之后的条件是否为true,如果为true,执行大括号里面的语句,
		 * 如果为false直接执行大括号之外的语句,
		 * 
		 */
		// 1.定义一个成绩,如果大于等于60,打印及格
		int score = 88;
		if (score >= 60) {
			// 条件结果为true执行大括号以内的语句
			System.out.println("及格。。");
		}
		
		System.out.println("over....");
		
		//2.定义一个整数,如果大于0,打印正数
		
		System.out.println("请输入一个整数:");
		Scanner scan =new Scanner(System.in);
		
		int num = scan.nextInt();

		
		if(num > 0){
			System.out.println(num + ",是正数。。");
			
		}
		
		System.out.println("over.........");

	}

}


运行结果:

fenzhi5

示例代码:java成绩如果大于60,奖励一颗糖

	//简单的if语句:
	//成绩如果大于60   给奖励
	int score = 10;
	if(score>60){
		System.out.println("给颗糖");
	}	

示例代码:Java成绩大于98分,而且Html成绩大于80分,老师奖励他;或者Java成绩等于100分,Html成绩大于70分,老师也可以奖励他。

if((score1 >98 && score2 > 80 ) || ( score1 == 100 && score2 > 70 )){
    //奖励
}
2.1.2 if-else语句
if (/* 条件判断 true or false */) {
    // true语句体
} else {
    // false语句体
}
/*
执行流程:
	代码运行到if-else结构时,首先判断if之后的条件是否为true,如果为true,执行if之后大括号内容,true语句体,如果为false,执行else大括号内容,false语句体
*/

ifelse语句

示例代码:

import java.util.Scanner;

public class Demo23IfElse {

	public static void main(String[] args) {
		/*
		 * if ( 条件判断 true or false ) { //二者必选其一
		 * 
		 * // true语句体 
		 * } else { 
		 * // false语句体
		 * 
		 * }
		 * 
		 * 执行流程: 代码运行到if-else结构时,首先判断if之后的条件是否为true,如果为true,执行if之后大括号内容,true语句体,
		 * 如果为false,执行else大括号内容,false语句体
		 */
			
		int score = 88;
		
		if(score >= 60){
			System.out.println(score+",及格");
		}else{
			System.out.println(score+",不及格。。。");
		}
		
		System.out.println("over...");
		//判断性别,男就去男厕所,否则去女厕所
		
		/*
		 * 扩展:比较数值
		 * 基本数据类型:==,比较数值是否相等
		 * 	8个基本类型
		 * 
		 * 引用数据类型:equlas(),比较数据是否相等
		 * 	String
		 */
		System.out.println("请输入你的性别:");
		Scanner scan = new Scanner(System.in);
		String sex = scan.next();
		if("男性".equals(sex)){
			System.out.println(sex+",去男厕所。。");
		}else{
			System.out.println(sex+",去女厕所。。");
		}
		
		
		System.out.println("----------------");
		
		
		char sex2 = '男';
//		int sex3 = 1;//1男,2女
//		boolean sex4 = true;//true男,false女
		
		if(sex2 == '男'){
			System.out.println("去男厕所。。");
		}else{
			System.out.println("去女厕所。。。。");
		}	
	}

}


运行结果:

fenzhi7

扩展内容:在比较多时候,要注意数据类型。

基本数据类型的比较数值使用==运算符。

引用类型的比较实用equlas()方法。String属于引用类型的数据,所以在进行比较的时候需要使用equals()。而且建议字面常量写在前面:"王二狗".equals(name)。

示例:如果是男生就永远18岁,否则永远16岁。

		// 如果是男生   就永远18岁
		// 如果是 女生  永远16岁		
		char c = '女';
		if(c == '男'){// boolean 结果是true  执行if中   否则执行else中的
			System.out.println("永远18岁");
		}else{
			System.out.println("永远16岁");
		}

示例:买彩票

如果体彩中了500万,我买车、买房、非洲旅游

如果没中,继续买。

public static void main(String[] args){
		//1创建input对象
		Scanner input=new Scanner(System.in);
		//2提示
		System.out.println("中500万吗?Y/N");
		String answer=input.next();
		//3判断
		if("y".equals(answer)){  //字符串的判断使用equals方法 
			System.out.println("买房、买车、非洲旅游...");	
		}else{
			System.out.println("继续买....");
		}  	
	}

注意:字符串的判断使用equals方法

示例:输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,提示恭喜您中奖了,否则没中奖。

提示: int random=(int)(Math.random()*10); //随机数

注意:Math.random();产生0-1之间的一个数字,含0不含1

public static void main(String[] args){
		//创建Input对象
		Scanner input=new Scanner(System.in);
		//提示
		System.out.println("请输入四位的会员号:");
		int member=input.nextInt();

		//百位
		int bai=member/100%10;
		int ran=(int)(Math.random()*10);   //Math.random();产生0-1之间的一个数字,含0不含1 
		if(bai==ran){
			System.out.println("中奖了....旅游去吧");
		}else{
			System.out.println("好好干活...");
		}
	}

踩坑:String类型字符串比较用equlas()方法,基本数据类型使用==。

2.1.3 多重if语句

if … else if … else 语句用于对多个条件进行判断,进行多种不同的处理

if (判断条件1) {
    执行语句1;
} else if (判断条件2) {
    执行语句2;
}
......
else if (判断语句n) {
    执行语句n;
} else {
    执行语句n+1;
}

课堂画图:

9多重if语句

示例代码:

public class Demo24MulIf {

	public static void main(String[] args) {
		/*
		 * 多重if语句:多选一
		 * if(条件1){
		 * 	//条件1成立,执行此处的代码,后面的代码都不执行了
		 * 
		 * }else if(条件2){
		 * 	//条件1不成立,条件2成立,执行此处代码。。
		 * 
		 * }else if(条件3){
		 * 	//条件1,2都不成立,条件3成立,执行此处代码。。。
		 * 	
		 * }。。。
		 */
		
		String sex = "猴";
		
		if("男性".equals(sex)){
			System.out.println("男厕所。。"+sex);
		}else if("女性".equals(sex)){
			System.out.println("女厕所。。"+sex);
		}else{
			System.out.println("我也不知道了, 也许不去厕所吧。。");
		}
		
		System.out.println("over..");
	}

}


运行结果:

fenzhi9

示例:如果成绩大于90并且是男生就送个女朋友,成绩大于90并且是女生送个男朋友,否则...

	char c = '女';
	int score = 10;	
	if(score>90 && c=='男'){
			System.out.println("给送个女朋友");	
	}else if(score>90 && c=='女'){
			System.out.println("给送个男朋友");
	}else if(score<=1){
			System.out.println("你是厉害人");
	}

上机练习 :

我想买车,买什么车决定于我在银行有多少存款

如果我的存款超过500万,我就买保时捷

否则,如果我的存款超过100万,我就买宝马

否则, 如果我的存款超过50万,我就买帕萨特

否则, 如果我的存款超过10万,我就买qq

否则, 如果我的存款10万以下 ,我买捷安特

2.1.4 嵌套if语句
if(条件1) {

      if(条件2) {

              代码块1

      } else {

              代码块2

      }

} else {

      代码块3

}

示例代码:

public class Demo25If {

	public static void main(String[] args) {
		//给定一个性别和年龄,判断是否可以结婚
		//男:不能小于22周岁
		//女:不能小于20周岁
		
		char sex = '男';
		
		int age = 23;
		
		if(sex == '男'){
			//男性,年龄
			if(age >= 22){
				System.out.println("可以娶媳妇啦。。好开心。。");
			}else{
				System.out.println("还小呢,再等等。。。");
			}
		}else if(sex == '女'){
			//女性,年龄
			if(age >= 20){
				System.out.println("可以找婆家了。。。");
			}else{
				System.out.println("太小了,不能嫁人。。。");
			}
		}else{
			System.out.println("搞不清楚性别,不能结婚。。");
		}
		
	}

}


运行结果:

fenzhi10

示例:如果成绩大于90 如果是男生 送个女朋友, 如果是女生送个男朋友

	// 如果成绩大于90   如果是男生    如果是女生
		int score = 10;
		char c = '男';
		if(score>90){
			if(c=='男'){
				System.out.println("给送个女朋友");
			}else{
				System.out.println("给送个男朋友");
			}
		}
2.1.5 特殊的if语句
		// 特殊形式
		// 必须要求   if 或者 esle 语句中只能有一条语句
			if(score>60)
				System.out.println("好学生");
			else
				System.out.println("给送个女朋友");	

上机练习:输入四个季节。

需求

春天 打印输出 春暖花开

夏天 夏天打盹

秋天 秋高气爽

冬天 冬眠

// 1
import java.util.Scanner;

class  Test
{
	public static void main(https://img.chengxuka.com/ruby0011/String[] args) 
	{

		//  == 判断基本数据类型内容是否相等
		// 引用数据类型  ==  判断内存地址 
		// 判断内容  String 类型 判断内容 equals

		Scanner sc = new Scanner(System.in);
		String str = sc.next();
		
	//	boolean falg= str.equals("春天");
      if(str.equals("春天")){
   			System.out.println("春暖花开");
   		}else if(str.equals("夏天") ){
   			System.out.println("夏天打盹");
   		}else if(str.equals("秋天")){
   			System.out.println("秋高气爽");
   		}else if(str.equals("冬天")){
   			System.out.println("穿着短袖冬眠");	
   		}
   	}
   }

2.2 switch语句

2.2.1 swtich语法规则
  1. 表达式expr的值必须是下述几种类型之一:

​ int, byte, char, short,enum;java7之后可以是String,不能用boolean,long,float,double等.

  1. case子句中的值const 必须是常量值(img.chengxuka.com/ruby0011/或f…
  2. case语句是无序的。
  3. default子句是可选的(不必要)
  4. break语句用来在执行完一个case分支后使程序跳出switch语句块;否则会继续执行下去
2.2.2 语法格式
   switch(表达式expr){
   		case const1:
   			statement1;
   			break;
   		case const2:
   			statement2;
   			break;
   			… …
   		case constN:
  			statementN;
   			break;
   		default:
   			statement_dafault;
   			break;
   	} 
2.2.3 执行流程和注意点:

执行流程:

进入switch语句后,从上向下匹配case。匹配上哪个case就执行哪个分支语句。
所有的 case 都不满足需求的时候  执行default中的内容
break 帮助跳出switch 语句的, 如果执行过程中 没有遇到  break 继续向下执行直到遇到break为止

注意事项:

switch-case语句的注意点:
1switchif不同:
	if作用在boolean类型上。
	switch作用在intcharbyteshortenumString这些类型上。
2default语句,是可选的。
3case后的数值,必须是唯一的。
4case是没有顺序的。
5break语句:词义"打破,打碎,破坏"的意思。用于防止switch的穿透。

示例代码:

public class Demo26Switch {

	public static void main(String[] args) {
		/*
		 * switch-case	语句:选择结构,多个分支选择一个执行。
		 * 
		 * 语法结构:
		 * switch(表达式/变量){//byte,short,int,char,enum,String
		 * 
		 * case 数值1:分支1;
		 * 	break;
		 * 
		 * case 数据2:分支2;
		 * 	break;
		 * 
		 * case 数值3:分支3;
		 * 	break;
		 * 。。。
		 *  default:最后一个分支;
		 *  break;
		 * }
		 * 
		 */
		/*
		 * 题目:一周的食谱,每天吃啥
		 * 周一:麻辣烫
		 * 周二:红烧肉
		 * 周三:热干面
		 * 周四:炸酱面
		 * 周五:烤冷面
		 * 周六:方便面
		 * 周日:火锅
		 */
		
		int weekDay = 3;
		
		switch(weekDay){
		
		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:
			//最后的操作:前面的case如果都没有匹配上,那么执行最后的这个default语句。
			System.out.println("信息有误。。");
			break;
		
		}
		
		System.out.println("over....");
	}

}


运行结果:

fenzhi11

练习: 简单实现switch语句

	   int i = 1;
	   switch(i){
   			case 1:
   				System.out.println("熊大");
   				break;
   			case 2:
   				System.out.println("熊二");
          break;
   			case 3:
   				System.out.println("光头强");
   				break;
   			default:
   				System.out.println("Haaaa");
   				break;
   		}

练习: 判断 春夏秋冬

Scanner sc = new Scanner(System.in);
		String str = sc.next();
		switch(str){
			case "春天":
				System.out.println("春暖花开");
				break;
			case "夏天":
				System.out.println("闷热");
				break;
			case "秋天":
				System.out.println("秋高气爽");
				break;
			case "冬天":
				System.out.println("滴水成冰");
				break;
			default:
				System.out.println("火星的");
				break;
		}

练习: 需求: 利用switch实现一个计算器操作

			Scanner  sc = new Scanner(System.in);
   		System.out.println("请输入第一个操作数:");
   		int a = sc.nextInt();
   		System.out.println("请输入运算符");
   		String str = sc.next();
   		int b = 0;

   		// 利用了一个    if语句 帮助控制 如果是 ++ 或者是 -- 就不输入第二个操作数

   		if("++".equals(str)|| "--".equals(str)){
   		}else{
   			System.out.println("请输入第二个操作:");
   			b = sc.nextInt();
   		}
   		switch(str){
   			case "+":
   				System.out.println(a+"+"+b+"="+(a+b));
   				break;
   			case "-":
   				System.out.println(a+"-"+b+"="+(a-b));
   				break;
   			case "*":
   				System.out.println(a+""+b+"="+(ab));
   				break;
   			case "/":
   				System.out.println(a+"/"+b+"="+(a/b));
   				break;
   			case "%":
   				System.out.println(a+"%"+b+"="+(a%b));
   				break;
   			case "++":
   				System.out.println("++"+a+"= "+(++a));
   				break;
   			case "--":
   			     System.out.println("--"+a+"= "+(--a));
   				break;
   			}
2.2.4 特殊用法 :case穿透

case穿透: 产生这种现象的原因:由于某个case语句中缺少或者漏写break语句所导致的结果.

踩坑:switch的穿透:某个case匹配成功之后,执行该case后的内容,遇到break结束。但是如果没有break语句,那么后面的case不再匹配了,直接执行,这个现象就叫做switch的穿透。。

示例代码:

public class Demo27Switch {

	public static void main(String[] args) {
		/*
		 * switch-case语句的注意点:
		 * 1、switch和if不同:
		 * 		if作用在boolean类型上。
		 * 		switch作用在int,char,byte,short,enum,String这些类型上。
		 * 
		 * 2、default语句,是可选的。
		 * 
		 * 3、case后的数值,必须是唯一的。
		 * 
		 * 4、case是没有顺序的。
		 * 
		 * 5、break语句:词义"打破,打碎,破坏"的意思。用于防止switch的穿透。
		 * 
		 * 		switch的穿透:某个case匹配成功之后,执行该case后的内容,遇到break结束。
		 * 		但是如果没有break语句,那么后面的case不再匹配了,直接执行,这个现象就叫做switch的穿透。
		 * 	
		 */
		/*
		 * 周1、3、5:方便面
		 * 周2、4、6:喝粥
		 * 周7:不吃
		 */
		
		int weekday = 1;
		
		switch (weekday) {
		case 1:
		case 3:
		case 5:
			System.out.println("方便面");
			break;
		case 2:
		case 4:
		case 6:
			System.out.println("喝粥");
			break;
		case 7:
			System.out.println("不吃");
			break;
		default:
			System.out.println("信息有误");
			break;
		}
	}

}


运行结果:

fenzhi12

上机练习:

// 需求:  打印输出指定的月份的天数

   		Scanner sc = new Scanner(System.in);

   		int month = sc.nextInt();

   		switch(month){

   			case 1:			

   			case 3:				

   			case 5:				

   			case 7:				

   			case 8:				

   			case 10:				

   			case 12:

   				System.out.println("31天");

   				break;

   			case 2:

   				System.out.println("28天/29天");

   				break;

   			case 4:				

   			case 6:				

   			case 9:				

   			case 11:

   				System.out.println("30天");

   				break;		

   		}

   		System.out.println("over!");

   	}