Bootstrap

分支语句if,switch,for

Day04

一、转义字符

具有特殊意义的字符本身

" 表示一个双引号字符
’ 表示一个单引号字符
\ 表示一个斜杠字符
\n 表示换行
\t 水平制表

二、常量

在程序执行过程中不可发生改变的量

分类:

1.数字字面量:程序中出现的数字
整数数字默认int类型
小数数字默认double类型

2.字面值常量:使用双引号括起来的内容

3.使用final(最终的)修饰变量
扩展命名规范:
大驼峰命名法(帕斯卡命名法):
作用:
理解:所有单词首字母大写
ps:public class StudentManagerSystem{}

小驼峰命名法:
作用:方法、变量
理解:除了第一个单词,其余单词首字母大写
ps:int curCapacity = 100;

常量命名法:
作用:常量
理解:全部单词大写,单词之间使用下划线隔开
ps:final int MAX_CAPACITY = 10000;

三、Java执行语句简介

分类:

1.顺序语句:方法里的代码从上往下执行
2.分支语句:条件成立就执行某个功能
2.1 if分支
2.2 switch分支

3.循环语句:条件成立就重复性的执行某个功能
3.1 for循环
3.2 while循环
3.3 do-while循环

4.特殊的流程控制语句
4.1 break
4.2 continue
4.3 return
4.4 label

四、if分支

语法结构1:
if(表达式){
…代码块…
}

理解:表达式的结果必须是boolean类型
true - 执行代码块
false- 跳过if分支,执行if以外的代码

​ if可以判断区间,也可以判断复杂条件,只要是表达式的结果是boolean就ok

例如:

		if((javaScore>98 && musicScore>80) || (javaScore==100 && musicScore>70)){
			...;
		}

语法结构2:
if(表达式){
…代码块…
}else{
…else代码块…
}

理解:
表达式的结果必须是boolean类型
true - 执行代码块
false- 执行else代码块

​ 二选一的情况下使用

语法结构3:

语法结构:
if(表达式1){
…代码块1…

​ }else if (表达式2){

​ …代码块2…

​ }else if (表达式n){

​ …代码块n…

​ }else{

​ …else代码块…

}

理解:
从上往下判断表达式,哪个表达式先为true,就执行对应的代码块,如果都不为true就执行else代码块
表达式的结果必须是boolean类型
true - 执行代码块
false- 执行else代码块

​ 多重if分支在多选一的情况下使用

if结构里可以无限嵌套,但嵌套最好不要超过3层,嵌套越多可读性越差。

案例:

import java.util.Scanner;
public class Test{
	/**	
	运动会,百米赛跑跑入16秒内的学生有资格进决赛,
	根据性别分别进入男子组和女子组。
	*/
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入成绩:");
		double score = scan.nextDouble();
			
		if(score>=0 && score<16){
			System.out.println("请输入性别:");
			String sex = scan.next();
				
			if(sex.equals("男")){//判断两个字符串的内容是否相同(sex和"男")
				System.out.println("恭喜进入到男子组决赛");
					
			}else if(sex.equals("女")){//判断两个字符串的内容是否相同(sex和"女")
				System.out.println("恭喜进入到女子组决赛");
					
			}else{
				System.out.println("性别异常");
			}
		}else if(score>=16){
			System.out.println("你被淘汰了,重在参与");
		}else{
			System.out.println("成绩异常");
		}
			
		
	}
}

五、switch分支

语法结构:
switch(表达式){
case 值1:
…代码块1…
break;
case 值2:
…代码块2…
break;
case 值n:
…代码块n…
break;
default:
…default代码块…
break;
}

理解:

​ 表达式的结果分别给值1、值2、值n比较,哪个相同就执行对应的代码块
​ 如果都不相同就执行default代码块
​ default代码块根据需求可写可不写
​ break表示跳出当前分支语句

​ switch是比较表达式的结果和case后面的值是否相同

深入

/*面试题:
			case的值可以相同吗?
				不允许相同
			
			default可以省略吗?
				可以省略(相当于多重if里的else{})
			
			break可以省略吗?
				可以
			
			default的位置一定要在最后吗?
				不一定,但是为了可读性最好放在最后
			
			表达式值的类型可以是什么?
				byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)
				
			表达式值为什么只支持byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)?
				switch底层只识别int值
				byte --> int 自动转型
				short -> int 自动转型
				int  --> int 直接使用
				char --> int 获取字符的码值
				String-> int 获取字符串的hash码(获取字符串中多个字符的码值 + 散列算法,算出来的结果就是hash值)
				枚举 --> int 获取枚举对象的编号
*/
/**
案例:输入年和月,输出当月的天数
		分析:
			1、3、5、7、8、10、12月 - 31天
			4、6、9、11月 - 30天
			2月 - 平年28天、闰年29天
			年份被4整除并且不能被100整数 或者 被400整除的年份就是闰年
*/
public static void main(String[] args){
		
	//功能和展示分离思想
    Scanner scan = new Scanner(System.in);
	System.out.println("请输入年:");
	int year = scan.nextInt();
	System.out.println("请输入月:");
	int month = scan.nextInt();
			
	int day = 0;
	switch(month){
		case 1:case 3:case 5:case 7:case 8:case 10:case 12:
			day = 31;
		break;
		case 4:case 6:case 9:case 11:
			day = 30;
		break;
		case 2:
			if(year%4==0 && year%100!=0 || year%400==0){
				day = 29;
			}else{
				day = 28;
			}
		break;
	}
			
	System.out.println(year + "年" + month + "月的天数为:" + day + "天");
		
}

知识点:if vs switch
表达式的区别:
if:boolean类型
switch:byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)
应用场景的区别:
if:判断区间、判断复杂条件
switch:判断单个值是否相同

六、for循环

语法规则:
for(表达式1;表达式2;表达式3){
…代码块/循环体…
}

理解:
表达式1 - 初始化变量
表达式2 - 判断条件
表达式3 - 更新变量

执行步骤:
1.初始化变量
2.判断条件 - 结果必须是boolean类型
2.1 true - 执行代码块,更新变量,重复第2个步骤
2.2 false - 直接跳出循环体

/*
for循环变形记:
			int i = 0;
			for(;i<5;){
				System.out.println("用良心做教育 -- " + i);
				i++;
			}
			System.out.println(i);
死循环:
			for(;;){
				System.out.println("死循环");
			}
			
			for(;true;){
				System.out.println("死循环");
			}
		
伪死循环:
			for(int i = 0;i>=0;i++){
				System.out.println("伪死循环");
			}
*/

小结:
1.初始化变量不一定从0开始
2.更新变量不一定++
3.在for循环中声明的变量只能在当前for循环里使用
4.for循环里的更新变量中编写i++和++i没有区别

for循环嵌套

/*需求1:打印以下图形
			****
			****
			****
*/
	for(int i = 0;i<3;i++){
		for(int j = 0;j<4;j++){
			System.out.print("*");
		}
		System.out.println();
	}
			
/*需求2:打印以下图形
			*
			**
			***
			****
			*****
*/	

	for(int i=0;i<5;i++){
		for(int j=0;j<i+1;j++){
			System.out.print("*");
		}
		System.out.println();
	}	
/*		需求3:打印以下图形
			    *
			   **
			  ***
			 ****
			*****
*/	
	for(int i=1;i<=5;i++){
        for(int j=1;j<=5-i;j++){
            System.out.print(" ");
        }
        for(int k=1;k<=i;k++)
            System.out.print("*");
        System.out.println();
    }	
/*		需求4:打印以下图形
			*****
			****
			***
			**
			*
*/	

	for(int i=0;i<5;i++){
    	for(int j=0;j<5-i;j++){
        	System.out.print("*");
   	 	}
    	System.out.println();
	}	

/*		需求5:打印以下图形
			*****
			 ****
			  ***
			   **
			    *
*/			
    for(int i=1;i<=5;i++){
        for(int j=1;j<=i-1;j++){
            System.out.print(" ");
        }
        for(int k=1;k<=6-i;k++)
            System.out.print("*");
        System.out.println();
    }	
/*		需求6:打印以下图形
			   *
			  ***
			 *****
			*******
*/		
	for(int i=1;i<=4;i++){
        for(int j=1;j<=4-i;j++){
            System.out.print(" ");
        }
        for(int k=1;k<=2*i-1;k++)
            System.out.print("*");
        for(int j=1;j<=4-i;j++){
            System.out.print(" ");
        }
        System.out.println();
    }	
/*		需求7:打印以下图形
			   *
			  * *
			 *   *
			*******
*/		
	for(int i=1;i<=4-1;i++){
        for(int j=1;j<=4-i;j++){
            System.out.print(" ");
        }
        System.out.print("*");
        for(int j=1;j<=2*i-3;j++){
            System.out.print(" ");
        }
        if(i!=1){
            System.out.print("*");
        }
        for(int j=1;j<=4-i;j++){
            System.out.print(" ");
        }
        System.out.println();
    }
	for(int k=1;k<=2*4-1;k++){
    	System.out.print("*");
	}
/*		需求8:打印以下图形
			*******
			 *****
			  ***
			   *
*/		
	for(int i=1;i<=4;i++){
        for(int j=1;j<=i-1;j++){
            System.out.print(" ");
        }
        for(int k=1;k<=9-2*i;k++)
            System.out.print("*");
        for(int j=1;j<=i-1;j++){
            System.out.print(" ");
        }
        System.out.println();
    }
/*		需求9:打印以下图形
			*******
			 *   *
			  * *
			   *
*/
	for(int k=1;k<=2*4-1;k++){
        System.out.print("*");
    }
	System.out.println();
	for(int i=2;i<=4;i++){
        for(int j=1;j<=i-1;j++){
            System.out.print(" ");
        }
        	System.out.print("*");
        for(int j=1;j<=7-2*i;j++){
            System.out.print(" ");
        }
        if(i!=4){
            System.out.print("*");
        }
        for(int j=1;j<=4-i;j++){
            System.out.print(" ");
        }
        System.out.println();
    }
/*		需求10:九九乘法表
			正三角:*/
				for(int i = 1;i<=9;i++){	
					for(int j = 1;j<=i;j++){
						System.out.print(j + "x" + i + "=" + (i*j) + "\t");
					}
					System.out.println();
				}
		
/*			倒三角:*/
				for(int i = 1;i<=9;i++){
					for(int k = 1;k<i;k++){
						System.out.print("\t");
					}
					for(int j = i;j<=9;j++){
						System.out.print(i + "x" + j + "=" + (i*j) + "\t");
					}
					System.out.println();
				}

上次练习答案

//1.
import java.util.Scanner;
public class Work01{
	/**
		1.键盘输入两个数字,获取出最大值
	*/
	public static void main(String[] args){
		
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入第一个数字:");
		int a = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int b = scan.nextInt();
		
		int max = (a>b)?a:b;
		System.out.println("最大值为:" + max);
	}
}
//2.
public class Work02{
	/**
		2.用最有效率的方式计算出4*8的结果
		
		考点:位运算
	*/
	public static void main(String[] args){
		
		System.out.println(4<<3);
	}
}
//3.
public class Work03{
	/**
		3.int a = 21,获取出(a++) + (--a) * (a+=2)的结果 
	*/
	public static void main(String[] args){
		
		int a = 21;
		int b = (a++) + (--a) * (a+=2);
		//a - 23
		//b - 21 + 21 * 23
		
		System.out.println(b);//504
	}
}

练习

  1. 某朋友说,如果存款超过100万,则入手宝马X5,否则超过50万,则入手奥迪A6,否则超过20万,则入手比亚迪,否则超过10万则玩玩极品飞车游戏,请为他编写一个购车选择程序,根据输入的金额,提示可以购买的车型。
  1. 设计一个考试奖励神器,根据录入学员的分数x给予奖励,如果分数x小于等于80分的则不予奖励并罚一个iphone6s,如果分数81<=x<=90则奖励一个iphone4,如果分数91<x<=100则奖励一个iphone4,再奖励一个ipad
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  1. 从键盘录入输入3 个数a,b,c,按从大到小进行输出
    在这里插入图片描述
  1. 计算个人所得税,关乎大家的生计

要求使用程序实现个人所得税计算器,实现从键盘录入当月工资收入,输出应缴个人所得税。
在这里插入图片描述
工资个税的计算公式为:

应纳税额=(工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数

扣除标准:个税按3500元/月的起征标准算

*我们此处简化五险一金,假设为0*,则

如果某人的工资收入为5000元,他应纳个人所得税为:(5000—3500)×3%—0=45(元)。

税率表如下:
在这里插入图片描述

5.张三为他的手机设定了自动拨号(switch)

按1:拨爸爸的号

按2:拨妈妈的号

按3:拨爷爷的号

按4:拨奶奶的号

;