小白自学笔记——JAVA基础 2.8分支结构

名词解释

  • 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
  • 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
    • 顺序结构
      • 程序从上到下逐行地执行,中间没有任何判断和跳转。
    • 分支结构
      • 根据条件,选择性地执行某段代码。
      • 有if…else和switch-case两种分支语句。
    • 循环结构
      • 根据循环条件,重复性的执行某段代码。
      • 有while、do…while、for三种循环语句。
      • 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素

顺序结构

在这里插入图片描述

分支结构

if-else(条件判断)

if语句三种格式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
eg:

class IfTest{
	public static void main(String[] args) {
		//System.out.println("Hello World!");
		//举例1
		int heartBeats = 79;
		if(heartBeats < 60 || heartBeats > 100){
			System.out.println("需要进一步检查");
		}
		System.out.println("检查结束");

		//举例2
		int age = 23;
		if(age < 19){
			System.out.println("你还可以看动画片");
		}else{
			System.out.println("你可以看成人电影");
		}

		//举例3
		age = 135;
		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("你是要成仙啊!");
		}
	}
}

if语句例题1
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断


eg:

import java.util.Scanner;
class IfTest2{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
				
		System.out.println("请输入岳小鹏期末成绩");
		int score = scan.nextInt();
		if(score == 100){
			System.out.println("奖励一辆BMW");
		}else if(score > 80 && score <= 99){
			System.out.println("奖励一台iPhone XS MAX");
		}else if(score >= 60 && score <= 80){
			System.out.println("奖励一个ipad");
		}else{//这一步没有也可以编译。
			System.out.println("什么奖励也没有");
		}
	}
}

总结:

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

if语句例题2
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。
eg:

import java.util.Scanner;

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

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

总结:

  1. if-else可以相互嵌套。
  2. 当执行语句只有一行,对应的“{}”可以省略。(但不建议省略)

if语句练习1——若有输出,指出输出结果
【1】

1)对下列代码,若有输出,指出输出结果。
int x = 4;
int y = 1;
if (x > 2) {
	if (y > 2) 
		System.out.println(x + y);
		System.out.println("atguigu");
} else
System.out.println("x is " + x)

【1改】

class IfExer{
	public static void main(String[] args){
		int x = 4;
		int y = 1;
		if (x > 2) 
			if (y > 2) 
				System.out.println(x + y);
		else
			System.out.println("x is " + x);
	}
}

【2】

boolean b = true;
if(b == false) 
	System.out.println("a");
else if(b)
	System.out.println("b");
else if(!b)
	System.out.println("c");
else
	System.out.println("d");

【2改】

boolean b = true;
if(b = false) 
	System.out.println("a");
else if(b)
	System.out.println("b");
else if(!b)
	System.out.println("c");
else
	System.out.println("d");

答案:
【1】输出:atguigu
【1改】 输出:x is 4(else/就近原则,与if (y > 2)配对)
【2】 输出:b (else if(b)执行这一条。因为b=true)
【2改】输出:c (else if(!b)执行这条。因为!b=true)

if语句练习2
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人类的年龄。如果用户输入负数,请显示一个提示信息。

int dogAge = 6;
if (dogAge >= 0 && dogAge <= 2){
	System.out.println("相当于人类:" + (dogAge * 10.5));
}else if (dogAge >2){
	System.out.println("相当于人类:" + ((dogAge - 2) * 4 + 21));
}else{
	System.out.println("狗狗还没出生呢!");
}

if语句练习3
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入
一个两位数,然后按照下面的规则判定用户是否能赢。
1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
提示:使用(int)(Math.random() * 90 + 10)产生随机数。

import java.util.Scanner;
class TestCaiPiao{
	public static void main(String[] args) {
		//1、随机产生一个两位数
		//System.out.println(Math.random());//产生[0,1)
		int number = (int)(Math.random()*90 + 10);//[0.0,1.0)-->[0.0,90.0)-->[10.0,100.0)-->[10,99]
		//System.out.println(number);
		
		int numberShi = number/10;
		int numberGe = number%10;
		
		//2、用户输入一个两位数
		Scanner input = new Scanner(System.in);
		System.out.print("请输入一个两位数:");
		int guess = input.nextInt();
		
		int guessShi = guess/10;
		int guessGe = guess%10;
		
		if(number == guess){
			System.out.println("奖金10 000美元");
		}else if(numberShi == guessGe && numberGe == guessShi){
			System.out.println("奖金3 000美元");
		}else if(numberShi==guessShi || numberGe == guessGe){
			System.out.println("奖金1 000美元");
		}else if(numberShi==guessGe || numberGe == guessShi){
			System.out.println("奖金500美元");
		}else{
			System.out.println("没中奖");
		}
		
		System.out.println("中奖号码是:" + number);
	}
}

if语句练习4
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”

import java.util.Scanner;
class  IfExer1{
	public static void main(String[] args) {
 		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入你的身高:(CM)");
		int height = scan.nextInt();
		System.out.println("请输入你的财富:(千万)");
		double wealth = scan.nextDouble();
		/*方式一:
		System.out.println("请输入你是否帅:(true/false)");
		boolean isHandsome = scan.nextBoolean();
	
		if (height >= 180 && wealth >= 1 && isHandsome){
			System.out.println("我一定要嫁给他!!!");
		}else if (height >= 180 || wealth >= 1 || isHandsome){
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
			System.out.println("不嫁!");
		}
		*/

		//方式二:
		System.out.println("请输入你是否帅:(是/否)");
		String isHandsome = scan.next();
	
		if (height >= 180 && wealth >= 1 && isHandsome.equals("是")){
			System.out.println("我一定要嫁给他!!!");
		}else if (height >= 180 || wealth >= 1 || isHandsome.equals("是")){
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
			System.out.println("不嫁!");
		}
	}
}

switch-case结构

在这里插入图片描述

  • 1.根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句。直到遇到break关键字或此switch-case结构末尾结束为止。
  • 2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构。
  • 3.switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 ,String
  • 4.case之后只能声明常量,不能是声明范围。
  • 5.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
  • 6.default类似if-else结构中的else。default结构是可选的,位置是灵活的。

eg:

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;
		default:
			System.out.println("other");
	
		}
	}
}

switch-case练习1
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

class SwitchCaseTest1{
	public static void main(String[] args) {
		int score = 78;
		/*
		//方式一:
		switch(score/10){
		case 0://无执行语句,无break,执行下一个case。
		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;
		}

	}
}

switch-case练习2
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

import java.util.Scanner;
class SwitchCaseTest2{
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入2019年的month");
		int month =scan.nextInt();
		System.out.println("请输入2019年的day");
		int day =scan.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;
		case 2: 
			sumDays += 31;
		case 1: 
			sumDays += day;
		}
		System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");

		/*使用if-else冗余
		if (month == 1){
			sumDay = day;
		}else if (month == 2){
			sumDay = 31+ day;
		}
		......
		*/
	}
}

说明:break是可选的。

switch-case练习2变题
从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除。或 2)可以被400整除

import java.util.Scanner;
class SwitchCaseExer {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入year");
		int year =scan.nextInt();
		System.out.println("请输入month");
		int month =scan.nextInt();
		System.out.println("请输入day");
		int day =scan.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;
			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 + "天");
	}
}

说明:执行语句可以嵌套if-else结构。

switch和if语句的对比

if和switch语句很像,具体什么场景下,应用哪个语句呢?

  • 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
  • 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值