流程控制--分支结构

流程控制语句十用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。

三种基本流程结构:顺序、分支、循环结构
在这里插入图片描述

一、分支结构:(if-else:条件判断结构)
在这里插入图片描述
在这里插入图片描述

(一)三种结构
第一种:
if(条件表达式){
执行表达式
}

第二种:二选一
if(条件表达式){
执行表达式1
}else {
执行表达式2
}

第三种:多选一
if(条件表达式){
执行表达式1
}else {
执行表达式2
}else {
执行表达式3
}

else {
执行表达式n
}

说明:
1、else结构是可选的;
2、针对与条件表达式:
> 如果多个条件表达式之间是“互斥”关系(或没有交集关系),哪个判断和执行语句声明在上面还是下面,无所谓。
> 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
> 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没有机会执行了。

public class IfTest{
	public static void main(String[] args){
		//举例1
		int heartBeats = 79;
		if(heartBeats < 60 || heartBeats > 100){
			System.out.println("需要做进一步检查");
		}
		System.out.println("检查结束")//举例2
		int age = 23;
		if(age < 18){
			System.out.println("你还可以看动画片");
		}else {
			System.out.println("你可以看成仁电影了");
		}

		//举例3
		if(age < 0){
			System.out.println("您输入的数据非法");
		}else if(age < 18){
			System.out.println("青少年时期");
		}else if (age < 35){
			System.out.println("青壮年时期");
		}else if(age < 60){
			System.out.println("中年时期");
		}else if(age < 120){
			System.out.println("老年时期");
		}else {
			System.out.println("你要成仙了~~");
		}
	}
}

(二)键盘输入:(Scanner使用方法)
需求:如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1、导包:import java.util.Scanner;
2、Scanner的实例化(创建Scanner的对象)
3、调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量
4、对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串。

注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常:InputMisMatchException,导致程序终止。

import java.util.Scanner;

public class Scanner{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();
		System.out.println(score);

		//对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串。
		System.out.println("请输入您的性别");
		String gender = sc.next();
		char genderChar = gender.charAt(0);//获取索引位0位置上的字符
		System.out.println(genderChar);
	}
}

(三)if-else例题
例题1:
在这里插入图片描述

import java.util.*;

public class IfExer1{
	public static void main(String[] args){
		System.out.println("请您输入分数:");
		Scanner sc = new Scanner(System.in);
		int score = sc.nextInt();

		if(score < 0 || score > 100){
			System.out.println("您输入的数据非法");
		}else if(score == 100){
			System.out.println("奖励一台BWM");
		}else if(score > 80 && score <100){
			System.out.println("奖励一台iPhone x");
		}else if(score >= 60 && score < 80){
			System.out.println("奖励一个ipad");
		}else {
			System.out.println("想屁吃");
		}
	}
}

例题2:
在这里插入图片描述

说明:
1、if-else结果是可以相互嵌套的。
2、如果if-else结构中的执行语句只有一行时,对应的一对{}是可以省略的,但是不建议省略。

import java.util.*;

public class IfExer2{
	public static void main(String[] args){
		System.out.println("请您输入三个整数:");
		Scanner sc = new Scanner(System.in);
		int num1 = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();

		if(num1 > num2){
			if(num3 >= num1){
				System.out.println(num2 + "," + num1 + "," + num3);
			}else if(num3 <= num2){
				System.out.println(num3 + "," + num2 + "," + num1);
			}else{
				System.out.println(num2 + "," + num3 + "," + num1);
			}
			
		}else{
			if(num3 >= num2){
				System.out.println(num1 + "," + num2 + "," + num3);
			}else if(num3 <= num1){
				System.out.println(num3 + "," + num1 + "," + num2);
			}else{
				System.out.println(num1 + "," + num3 + "," + num2);
			}
		}
	}
}

例题3:
在这里插入图片描述
在这里插入图片描述

public class IfExer3{
	public static void main(String[] args){
		int dogAge = 6;
		if(dogAge >= 0 && dogAge <= 2){
			System.out.println("相当于人的年龄:" + dogAge * 10.5);
		}else if(dogAge > 2){
			System.out.println("相当于人的年龄:" + (2 * 10.5 + (dogAge - 2) * 4));
		}else{
			System.out.println("狗还没有出生呢!");
		}
	}
}

例题4:
在这里插入图片描述

随机数的获取:Math.random()//[0.0,1.0)
公式:[a,b] : (int)(Math.random() * (b - a + 1) + a)

源代码:
public class IfExer4{
	public static void main(String[] args){
		int value = (int)(Math.random() * 90 + 10);
		System.out.println(value);
	}
}

例题5:
在这里插入图片描述


import java.util.*;

public class IfExer5{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);

		System.out.println("请输入你的身高:(cm)");
		int height = sc.nextInt();
		System.out.println("请输入你的财富:(千万)");
		double wealth = sc.nextDouble();
		System.out.println("请输入你的帅气:(是/否)");
		boolean isHandsome = sc.nextBoolean();

		if(height >=180 && wealth >= 1 && isHandsome == true){
			System.out.println("我要嫁给他生猴子~~~");
		}else if(height >=180 || wealth >= 1 || isHandsome == true){
			System.out.println("嫁吧,感觉还行~~~");
		}else {
			System.out.println("不嫁,屌丝~~");
		}
	}
}

典型代码:
		System.out.println("请输入你的帅气:(是/否)");
		String isHandsome = sc.next();
		if(height >=180 && wealth >= 1 && isHandsome.equals("是")){
			System.out.println("我要嫁给他生猴子~~~");
		}

二、分支结构(switch-case)
在这里插入图片描述

结构:
switch(表达式){
case 常量1:
语句1;
//break;
case 常量2:
语句2;
//break;
case 常量3:
语句3;
//break;

case 常量n:
语句n;
//break;
default:
语句;
//break;
}

说明:
①根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或者次switch-case结构末尾结束为止。
②break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出。switch-case结构
③switch结构中的表达式,只能是如下的6种数据类型之一:byte、short、char、int、枚举类型(JDK5.0)、String类型(JDK7.0)
④case之后只能声明常量,不能声明范围。
⑤break关键字在switch-case结构中是可选的。(绝大部分需要加)
⑥default:相当于if-else结构中的else;default结构是可选的;而且位置是灵活的(其他位置需要加break)。

public class SwitchCaseTest{
	public static void main(String[] args){

		int number = 2;
		switch(number){

		case 0:
			System.out.println("Zero");
			break;
		case 1:
			System.out.println("One");
			break;
		case 2:
			System.out.println("Two");
			break;
		case 3:
			System.out.println("Three");
			break;
		case 4:
			System.out.println("Four");
			break;
		case 5:
			System.out.println("Five");
			break;
		default:
			System.out.println("Other");
		}
	}
}

例题1:
在这里插入图片描述

说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

public class SwitchCaseTest1{
	public static void main(String[] args){


		//较复杂方式:(输出一样,可以考虑合并)
		int score = 78;
		switch(score / 10){
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			System.out.println("不及格");
			break;
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
			System.out.println("及格");
			break;
		}

		//优化方法:
		switch(score / 60){
		case 0:
			System.out.println("不及格");
			break;
		case 1:
			System.out.println("及格");
			break;
		}


		//简单方法:
		int score = 78;
		if(score >= 60){
			System.out.println("及格");
		}else{
			System.out.println("不及格");
		}
	}
}

例题2:
在这里插入图片描述

说明:break在switch-case结构中是可选的

import java.util.*;
public class SwitchCaseTest2{
	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入2019年的month:");
		int month = sc.nextInt();
		System.out.println("请输入2019年的day:");
		int day = sc.nextInt();

		//定义一个变量来保存总天数
		//方式一:(不要了)
		/*
		int sumDays = 0;
		if(month == 1){
			sumDays = day;
		}else if(month ==2){
			sumDays = 31 + day;
		}else if(month == 3){
			sumDays = 31 + 28 + day;
		}else if(month ==4){
			sumDays = 31 + 28 + 31 + day;
		}else if(month ==){

		}else if(month ==)
		}else if(month ==){

		}else if(month ==)

		*/

		//方式二:switch-case结构和if-else也一样。


		//倒着写
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			sumDays += 28;
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println("2019年" + month + "月" + day + "日是当年的第几" + sumDays + "天");

	}
}

例题3:
在这里插入图片描述

说明:
①凡是可以使用switch-case的结构,都可以转换为if-else,反之;不成立。
②当我们写分支结构时,当发现既可以使用switch-case(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。
原因:switch-case执行效率稍高。

import java.util.*;
public class SwitchCaseTest2{
	public static void main(String[] args){

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入year:");
		int year = sc.nextInt();
		System.out.println("请输入month:");
		int month = sc.nextInt();
		System.out.println("请输入day:");
		int day = sc.nextInt();

		//定义一个变量来保存总天数
		int sumDays = 0;
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			//sumDays += 28;判断year是否是否闰年
			if((year % 4 ==0 && year % 100 != 0)|| year % 400 == 0){
				sumDays += 29;
			}else{
				sumDays += 28;
			}
			
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值