学习JavaEE的日子 day05 分支语句,for循环

day05

补:位运算符的面试题(位运算符见day04)

面试题1:使用最有效率的方式计算出4*8

//考点:位运算
//System.out.println(4<<3);

//面试题2:描述出下列代码的运行过程

//向上转型:使用符号位补位,补到最高位
//向下转型:从最高位开始舍弃
//考点:char类型取值范围没有负数,向上转型是使用0补位
//-1 -- int:1111,1111,1111,1111,1111,1111,1111,1111
//   (byte):1111,1111
//   (char):1111,1111,1111,1111
//	  (int):0000,0000,0000,0000,1111,1111,1111,1111
System.out.println((int)(char)(byte)-1);//65535	

1.转义字符

含义:具有特殊意义的字符本身

分类:

\" 表示一个双引号字符
\' 表示一个单引号字符
\\ 表示一个斜杠字符
\n 表示换行
\t 表示水平制表
//案例:	
    System.out.println("\"好好学习\"");
	System.out.println("\'好好学习\'");
	System.out.println("\\好好学习\\");
	
	println(); 表示输出 + 换行
	print(); 表示输出
	System.out.print("好好学习吧\n");
	System.out.print("做真实的自己");
	
	System.out.println("3*3=9\t3*4=12\t3*5=15\t3*6=18");
	System.out.println("4*3=12\t4*4=16\t4*5=29\t4*6=24");

2.常量

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

分类:

1.数字字面量:程序中出现的数字

整数数字默认int类型

小数数字默认double类型

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

   ps:"好好学习"
   3.final(最终的)修饰变量
//案例:       
final int NUM = 100;
System.out.println(NUM);//100

注:

字符常量:必须使用单引号,有且仅能一个字符 ‘A’,‘0’

字符串常量:必须使用双引号,内容可有可无 “HelloWorld”

只要用双引号引起来的,不管里面的内容是什么,不管里面有没有内容,都是字符串类型的字面量。

字符类型的字面量必须用单引号引起来,不管内容是什么,但是个数有且只能有一个。

3.命名规范

大驼峰命名法/帕斯卡命名法:
作用:类名、接口名
规则:单词首字母大写
ps:
public class HelloWorld{}

小驼峰命名法:
作用:方法名、变量名
规则:除了第一个单词,其余单词首字母大写
ps:
String stuName = “小明”;

常量命名法:
作用:常量
规则:所有字母大写,单词与单词之间使用下划线隔开
ps:
final int MAX_VALUE = 100;

4.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

4.1 简单的if分支

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

理解:表达式必须是boolean值
true - 执行代码块

false - 跳过if分支,执行分支以外的代

//案例:如果小明的Java考试成绩大于98分,小明就能获得一辆法拉利作为奖励
	Scanner scan = new Scanner(System.in);
		
	System.out.println("请输入Java考试成绩:");
	double score = scan.nextDouble();
				
	if(score > 98){
		System.out.println("奖励小明法拉利玩具赛车一辆");
		}

注:

1.如果大括号省略了,那么if只能控制距离他最近的那一条语句。

2.if可以判断区间,判断复杂的条件,只要结果是boolean值就可以了

4.2 简单的if…else…分支

if(表达式){
…代码块…
}else{
…else代码块…
}

if…else…在二选一的情况下使用

4.3 复杂的if分支

if(表达式1){
…代码块1…
}else if(表达式2){
…代码块2…
}else if(表达式n){
…代码块n…
}else{
…else代码块…
}

从上往下判断表达式,哪个表达式先为true,就执行对应的代码块
表达式的结果必须是boolean
true - 执行对应的代码块
false - 往下判断剩余的表达式
如何表达式都不为true,就执行else代码块
注意:else{}根据需求可写可不写

4.4 嵌套if分支

案例:学校举行运动会,百米赛跑跑入16秒内的学生有资格进决赛,根据性别分别进入男子组和女子组。

	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("成绩异常");
	} 

小结:if可以无限嵌套

经验:if最好不要嵌套3层以上,因为可读性会降低

5.switch分支的使用

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

理解:

表达式的结果分别于值1,值2,值n比较

哪个相同就执行对应的代码块

如果都不相同就执行default代码块

break表示跳出整个分支语句

		    案例:小美参加计算机编程大赛
			如果获得第一名,将参加个月马尔代夫旅游
			如果获得第二名,将奖励苹果Pro笔记本电脑一部
			如果获得第三名,将奖励移动硬盘一个
			否则,晚上通宵学习
			Scanner scan = new Scanner(System.in);
			System.out.println("请输入比赛名次:");
			String str = scan.next();
			
			switch(str){
				case "第一名":
					System.out.println("参加1个月马尔代夫旅游");
				break;
				case "第二名":
					System.out.println("奖励苹果Pro笔记本电脑一部");
				break;
				case "第三名":
					System.out.println("奖励移动硬盘一个");
				break;
				default:
					System.out.println("晚上通宵学习");
				break;
			}

5.1 switch分支的深入

面试题:

1.case的值可以相同吗?

 不能相同

2.default可以省略吗?

可以

3.break可以省略吗?

可以,但是不写break会引发case穿透现象

4.default的位置一定要在最后吗?

不一定。最后放在后面,因为考虑代码的可读性。

5.表达式值的类型可以是什么?
byte、short、int、char、枚举(JDK1.5)、String(JDK1.7)

6.switch底层判断的逻辑是什么?

switch底层判断的逻辑是什么?
switch底层判断的都是int类型,因为switch底层有个字节码命令,必须接受int类型的值
byte --> int 自动转型
short --> int 自动转型
int --> int 直接使用
char --> int 获取的是字符的Unicode码
枚举 --> int 获取枚举对象的编号
String --> int 获取的字符串的hash码(hash码:字符的Unicode+散列算法得到的一个数字)

7.判断下面的输出结果?

		switch(1000){
			case 10:
				System.out.println("10");
			break;
			default:
				System.out.println("default代码块");
			
			case 50:
				System.out.println("50");
			
			case 80:
				System.out.println("80");
			break;
			case 100:
				System.out.println("100");
			break;
			
		}

default代码块 50 80

注:if vs switch

同:都是选择分支语句。

异:

1.表达式的区别:

if表达式值的类型是boolean。

switch分支表达式值的类型是byte,char,int,枚举,String。

2.应用场景的区别:

if:判断区间和复杂添加

switch:判断单个值是否相同

/**
需求:输入年和月,输出当月的天数
		分析:
			1/3/5/7/8/10/12月 -- 31天
			4/6/9/11月 -- 30天
			2月 -- 闰年29天、平年28天
			注意:年份被4整除且不能被100整除 或者 年份被400整数都为润年
*/
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;
	}
			
	if(month>=1 && month<=12){
		System.out.println(year + "年" + month + "月的天数为:" + day + "天");
	}else{
		System.out.println("数据错误");
	}

6.Java的循环

分类:
1.for循环(重点)
2.while循环
3.do-while循环
好处:减少了代码的冗余(减少重复性的代码)

6.1 for循环

语法结构:

for (初始化;条件判断;更新变量) {

​ 循环体语句;

}

执行顺序:

1.初始化变量

2.判断条件 – 结果必须是boolean类型

true – 执行代码块,更新变量,重复第2个步骤

false – 跳出整个循环语句

//需求1:循环输出1~10的数字
for(int i = 1;i<=10;i++){
	System.out.println(i);
}
			
//需求2:循环输出1~10的奇数数字
for(int i = 1;i<=10;i+=2){
	System.out.println(i);
}
			
//需求3:循环输出10~1的数字
for(int i = 10;i>=1;i--){
	System.out.println(i);
}
			
//需求4:循环输出10~1的偶数数字
for(int i = 10;i>=1;i-=2){
	System.out.println(i);
}
			
for循环变形记:
int i = 1;
for(;i<=5;){
	System.out.println("用良心做教育 -- " + i);
		//i++;
		++i;
}
System.out.println(i);
			
死循环:该循环永远不可能跳出
for(;;){
	System.out.println("死循环");
}
			
伪死循环:该循环一直++,循环了21亿多次,再++就超出了int类型的最大取值范围,i就变为负数了,这时就跳出了该循环
for(int i = 0;i>=0;i++){
	System.out.println("伪死循环");
}						

小结:

1.初始化变量不一定每次都是从0开始,也可以从1,也可以从10开始

2.更新变量不一定每次都是++,也可以+=2,也可以–,也可以-=2

3.在for循环内声明的变量只能在循环中使用

4.for循环中的更新变量i++和++i没有区别

案例:循环录入5次int类型的数字,输出最大值

Scanner scan = new Scanner(System.in);
	
//假设第一个数字为最大值
System.out.println("请输入第1个数字:");
int max = scan.nextInt();
			
for(int i = 2;i<=5;i++){
	System.out.println("请输入第" + i + "个数字:");
	int num = scan.nextInt();
				
	//录入的数字比max更大,就将录入的数字赋值给max
	if(max < num){
		max = num;
		}
	}
			
System.out.println("最大值为:" + max);

6.2 for循环嵌套

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

两重循环,外循环控制行数,内循环控制列数

//九九乘法表
for(int i=1;i<=9;i++){  //外循环控制行数

  for(int j=1;j<=i;i++){  //内循环控制列数

  System.out.print(j+"x"+i+"="+(j*I)+"\t");

     }
}

总结

1.转义字符:具有特殊意义的字符本身

2.常量:程序在执行过程中不可发生改变的量
2.1 数字字面量
2.2 字面值常量
2.3 final修饰的变量
扩展:驼峰命名法

3.分支语句
3.1 if分支
3.2 switch分支(注重底层)
3.3 if vs switch(表达式的区别、应用场景的区别)

4.for循环
4.1 使用
4.2 for循环嵌套

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值