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

day05

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

面试题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(表达式){
				case1:
					...代码块1...
				break;
				case2:
					...代码块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.1switch分支的深入

面试题:
  1. case的值可以相同吗?

​ 不能相同

  1. default可以省略吗?

​ 可以

  1. break可以省略吗?

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

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

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

  1. 表达式值的类型可以是什么?
    byte、short、int、char、枚举(JDK1.5)、String(JDK1.7)
  1. switch底层判断的逻辑是什么?

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

  1. 判断下面的输出结果?
		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。

  1. 应用场景的区别:

​ 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("伪死循环");
			}			
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");

     }
}

学习JavaEE的日子 day05 分支语句,for循环_第1张图片

你可能感兴趣的:(学习JavaEE,学习,java-ee,java,学习方法)