JAVA基础(4.运算符、选择结构、循环结构)

目录

1.0 运算符

1.1 位运算【了解】

1.2 逻辑运算【掌握】

1.2.1 逻辑运算(Logical Operation)

1.2.2 逻辑运算符作用

1.2.3 逻辑运算符运算规则【掌握】

1.2.4  &&、||和 &、| 的区别?

2.0 选择结构

2.1. if选择条件语句

2.2.  if ...else双条件语句

2.3.  if ...else双条件语句

2.4.  注意事项

3.0 swtich 选择结构【掌握】

3.1 switch基本语法

3.2 注意事项

4.0 循环结构

4.1 循环概念

4.2 循环作用

4.3 循环分类

4.3.1 while循环【掌握】

4.2.2 do...while循环【掌握】

5.0 循环结构-for【重点】

1.1 for循环【重点】

5.2 循环注意事项

5.3 嵌套循环【了解】

5.4 循环控制语句【掌握】

5.4.1 概念

5.4.2 控制语句分类【掌握】



1.0 运算符

1.1 位运算【了解】

位运算:

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作

位运算符:​

~n:	按位取反,运算的规律:0 -> 1, 1 -> 0。
记住公式:n的按位取反结果是: -(n + 1)。
~3计算过程,先将3转换为二进制0000 0011,再进行位运算
0000 0011
---------	
1111 1100 => -4
			
&: 按位与,运算的规律:有0即0。
3 & 5 = 1
0011  => 3
0101  => 5
---- &
0001  => 1
		
|:按位或,运算的规律:有1即1。
3 | 5 = 7
0011  => 3
0101  => 5
---- |
0111  => 7
		
^:按位异或,运算的规律:同0异1。常常用来交换两个变量的值。
3 ^ 5 = 6
0011  => 3
0101  => 5
----  ^
0110  => 6
			
m << n: 按位左位移,运算的规律:如果m是正数,右边补0,是负数就补1  相当于* 2 ^ n 次方,有溢出风险。
3 << 2 = 12	 * 2 ^ 2
0011  => 3
----  <<
1100  => 12		
		
m >> n: 按位右位移,运算的规律:如果m是正数,左边补0,是负数就补1  相当于/ 2 ^ n 次方。
3 >> 2 = 0	/ 2 ^ 2
0011  => 3
----  >>
0000  => 0		
			
m >>> n: 无符号右位移,运算的规律:不管m是正数还是负数,左边永远补0,这样的话,负数移动后就变成了正数,失去了数学意义。

代码案例

public class _13BitOperation {

public static void main(String[] args) {
	System.out.println(~3);// -4
	System.out.println(~-4);// 3
		
	System.out.println(3 ^ 5);// 6
	System.out.println(3 & 5);// 1
	System.out.println(3 | 5);// 7
	System.out.println(3 << 2);// 12
	System.out.println(3 >> 2);
	System.out.println(3 >>> 2);
		
	// 交换变量a和b的值
	int a = 3;
	int b = 5;
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	System.out.println(a);// 5 
	System.out.println(b);// 3
		
}

}

反码和补码今天不做讨论。

1.2 逻辑运算【掌握】

1.2.1 逻辑运算(Logical Operation)

用来连接布尔类型的两个值或表达式,逻辑运算两边必须是布尔类型的值或者是布尔类型表达式。通常配合循环和条件语句使用,最终结果也位布尔类型。

1.2.2 逻辑运算符作用

应用于多个条件的组合判断。

1.2.3 逻辑运算符运算规则【掌握】

& :逻辑单与,表示并且,有假即假,没有短路功能,有位运算功能,两边都为true ,结果为true。

| :逻辑单或,表示或者,有真即真,没有短路功能,有位运算功能,只要有一边为true,结果为true。

&& :逻辑双与,表示并且,有假即假,有短路功能,没有位运算功能,两边都为true ,结果为true。

|| : 逻辑双或,表示或者,有真即真,有短路功能,没有位运算功能,只要有一边为true,结果为true。

^ : 逻辑异或,同假异真【了解 现实开发,基本不用】,两边不一样,结果为true ,否则为false。

! :逻辑非,表示取反,非真即假,非假即真 (操作一个变量/值)。

优先级问题:! > &&(&) > ||(|)

代码案例

public class _11LogicalOperation {

public static void main(String[] args) {
	// 苍苍老师,数学成绩100并且语文成绩100,奖励大飞机
	int mathScore = 99;// 声明一个int类型变量mathScore表示数学成绩,赋值100
	int chineseScore = 100;// 声明一个int类型变量chineseScore表示语文成绩,赋值100
	// 用三目运算,表示上面的关系
	String str = mathScore == 100 && chineseScore == 100 ? "奖励大飞机" : "打屁股";
	System.out.println(str);
		
	// !:逻辑非, 表示取反,非真即假,非假即真 (操作一个变量/值)
	System.out.println(!true);// false
	System.out.println(!false);// true
		
	System.out.println("================== && ====================");
	System.out.println(true && true);//true
	System.out.println(true && false);//false
	// 下面两句代码 &&前发生了短路。当整个表达式结果可以确定的时候发生短路.可以提高效率
	System.out.println(false && true);//false
	System.out.println(false && false);//false
		
	System.out.println("================== & ====================");
	System.out.println(true & true);//true
	System.out.println(true & false);//false
	// 下面两句代码 &前没有短路,后面还要计算。单与逻辑运算效率低下
	System.out.println(false & true);//false
	System.out.println(false & false);//false
		
		
	System.out.println("================== || ====================");
	System.out.println(false || true);//true
	System.out.println(false || false);//false
	// 下面两句代码 ||前发生了短路。当整个表达式结果可以确定的时候发生短路.可以提高效率
	System.out.println(true || true);//true
	System.out.println(true || false);//true
		
	System.out.println("================== | ====================");
	System.out.println(false | true);//true
	System.out.println(false | false);//false
	// 下面两句代码 |前没有短路。单或逻辑运算效率低下
	System.out.println(true | true);//true
	System.out.println(true | false);//true
		
	System.out.println("================= ^【了解】 ================");
	// ^:逻辑异或, 同假异真【用的很少】
	System.out.println(false ^ true);//true
	System.out.println(false ^ false);//false
	// 下面两句代码 |前没有短路。单或逻辑运算效率低下
	System.out.println(true ^ true);//false
	System.out.println(true ^ false);//true
		
}

}

1.2.4  &&、||和 &、| 的区别?

&&、|| :有短路功能    

&、| :没有短路功能

什么是短路?

短路问题:当逻辑运算左边能够确定整个表达式结果值的时候,就会发生短路,不会再计算后面的结果了,这样可以提供程序运算效率。

例如:

&&当左边为false时,右边的就短路了

||当左边为true时,右边的就短路了

验证代码:【了解】

public class _12LogicalOperation {

public static void main(String[] args) {
	// 验证短路,怎么验证短路?
	int a = 1;
	System.out.println(a > 2 && ++a == 2);
	System.out.println(a);// 1,说明&&后面没有运算,证明了短路。
	
	int b = 1;
	System.out.println(b > 2 & ++b == 2);
	System.out.println(b);// 2,说明&后面运算了,证明了没有短路。
	
   // 验证优先级,结果为false,表示||优先级高或者相等。true表示&&优先级高。
	System.out.println(a > 0 || true && false );// true
}

}

2.0 选择结构

概念:

选择结构就是让程序有选择的执行,满足条件就执行,不满足就不执行。根据判断的结果来控制程序的流程,是属于流程控制语句。其它两个流程控制语句是顺序结构(程序的执行是从左到右,从上到下)、循环结构(程序重复的干一件事)。

作用:

让程序有选择的执行。例如:用户登录的时候,只有用户名和密码都输入正确才能登录成功等。

2.1. if选择条件语句

基本语法:

if(判断条件) {
语句;
}

判断条件: 布尔类型的值或者表达式

执行语句:当条件满足时执行语句(可以是一条语句,也可以是一组语句)

代码案例

public class _01If {
public static void main(String[] args) {
	// 需求1:需要让智能机器人自动充电,充电条件电量低于10
	// 声明一个int类型的变量power表示电量,赋值9。
	int power = 9;
	if (power < 10) {// if条件判断,电量power < 10
		// 用一个打印语句表示,打印:主人,我被玩没电了,请插我充电!
		System.out.println("主人,我被玩没电了,请插我充电!");
	}
}
}

2.2.  if ...else双条件语句

基本语法:

if(判断条件) {
   if语句;
} else {
  else语句;
}

判断条件: 布尔类型的值或者表达式

执行语句:当条件满足时执行if中的语句,不满足则执行else中的语句

代码案例:

public class _01If {
public static void main(String[] args) {
	// 需求2:智能机器人在充电条件电量低于10的时候,自动充电。不小于10,则提醒主人,一起玩耍!
	// 声明一个int类型的变量power2表示电量,赋值11。
	int power2 = 11;
	if (power2 < 10) {// if条件判断,电量power2 < 10
		// 用一个打印语句表示,打印:主人,我被玩没电了,请插我充电!
		System.out.println("主人,我被玩没电了,请插我充电!");
	} else {// else表示power 不小于 10
		// 用一个打印语句表示,打印:主人,我们一起耍一下!
		System.out.println("主人,我们一起耍一下!");
	}
}
}

2.3.  if ...else双条件语句

基本语法:

if(判断条件1) {
​	语句1;
} else if(判断条件2) {	
​	语句2;
} else if(判断条件3) {
​	语句3;
} ...
else { 
​  else语句
}

判断条件: 布尔类型的值或者表达式

执行语句:按照从上到下顺序匹配条件,如果满足条件1,就执行语句1;如果满足条件2,就执行语句2;如果满足条件3,就执行语句3;

注意:只会执行一个满足的条件,哪怕下面有其它的满足条件的也不会执行了。所有条件都不满足就执行else语句中代码。

代码案例:

public class _01If {
public static void main(String[] args) {
/*
	 *  需求3:智能机器人在充电条件电量低于10的时候,自动充电。
	 *  power >= 10 并且< 60 提醒主人,一起看片,陶冶情操!
	 *  power >= 60 并且< 80 提醒主人,实践检验一下!
	 *  power >= 80 并且<= 100 提醒主人,我们来一点激烈的运动!
	 */
	// 声明一个int类型的变量power3表示电量,赋值69。
	int power3 = 69;
	if (power3 >= 0 &&power3 < 10) {// if条件判断,电量power3 < 10
		// 用一个打印语句表示,打印:主人,我被玩没电了,请插我充电!
		System.out.println("主人,我被玩没电了,请插我充电!");
	} else if(power3 >= 10 && power3 < 60) {// 判断条件:power3 >= 10 && power3 < 60
		// 用一个打印语句表示,打印:主人,一起看片,陶冶情操!
		System.out.println("主人,一起看片,陶冶情操!");
	} else if(power3 >= 60 && power3 < 80) {// 判断条件:power3 >= 60 && power3 < 80
		// 用一个打印语句表示,打印:主人,实践检验一下!
		System.out.println("主人,实践检验一下!");
	} else if(power3 >= 80 && power3 <= 100) {// 判断条件:power3 >= 80 && power3 <= 100
		// 用一个打印语句表示,打印:主人,我们来一点激烈的运动!
		System.out.println("主人,我们来一点激烈的运动!");
	} else {// 所有条件都不满足会执行else
		// 用一个打印语句表示,打印:主人,我被你玩坏了!
		System.out.println("主人,我被你玩坏了!");
	}
}
}

2.4.  注意事项

1. 选择结构是从上到下开始匹配,一旦匹配上一个条件后,整个条件语句就结束了,

哪怕后面也能匹配上条件也不会执行了 。

2. if 和 if else 语句,后面可以不写{},但是不建议,因为不写{} ,只能控制一行代码。

3. if(){} else if(){}后可以不写 else,一般根据业务需求决定。

代码案例:

public class _04If {
public static void main(String[] args) {
	/*
	 * 1. 选择结构是从上到下开始匹配,一旦匹配上一个条件后,整个条件语句就结束了,
			哪怕后面也能匹配上条件也不会执行了
	 */
	if (true) {
		System.out.println("if");
	} else if (true) {
		System.out.println("else if - 1");
	} else if (true) {
		System.out.println("else if - 2");
	}
		
	/*
	 * 2. if 和 if else 语句,后面可以不写{},但是不建议
			因为不写{} ,只能控制一行代码
	 */
	if (false) // 只能控制一行代码
		System.out.println("if true");
	System.out.println("if true  后语句");
		
	if (false) // 只能控制一行代码,并且if后不能再写其他代码,否则语法报错
		System.out.println("if true");
//	System.out.println("if true");// 破坏了if else结构,报错
	else // 只能控制一行代码
		System.out.println("if true  后语句");
		
}
}

3.0 swtich 选择结构【掌握】

先看需求:

public class _02Switch {
public static void main(String[] args) {
	/*
	 * 请设计一个一周工作计划
	 * 	周一: 好好学习
	 * 	周二:看片学习
	 * 	周三: 实践学习
	 * 	周四: 吃药补补身体!
	 * 	周五: 爬山锻炼身体!
	 * 	周六: 休息,给身体放个假
	 * 	周日:总结一周所得! 
	 */
	// 声明一个int类型变量weekDay,表示一周中的某一天。赋值4
	int weekDay = 4;
	if (weekDay == 1) {// 判断weekDay是否==1
		System.out.println("周一: 好好学习");
	} else if (weekDay == 2) {// 判断weekDay是否==2
		System.out.println("周二:看片学习");
	} else if (weekDay == 3) {// 判断weekDay是否==3
		System.out.println("周三: 实践学习");
	} else if (weekDay == 4) {// 判断weekDay是否==4
		System.out.println("周四: 吃药补补身体!");
	} else if (weekDay == 5) {// 判断weekDay是否==5
		System.out.println("周五: 爬山锻炼身体!");
	} else if (weekDay == 6) {// 判断weekDay是否==6
		System.out.println("周六: 休息,给身体放个假");
	} else if (weekDay == 7) {// 判断weekDay是否==7
		System.out.println("周日:总结一周所得!");
	} else {
		System.out.println("出错了!");
	}
}
}	

上面的需求我们可以根据学过的if结构实现,但是大家可以发现一个问题,现在上面的判断条件都是一些固定的值,并且代码可读性很差,我们有没有什么方式可以优化一下代码呢?

用switch结构

3.1 switch基本语法

声明变量
switch(变量){
	case 值1:
		功能语句1
		功能语句2...
		break;
	case 值2:
		功能语句1
		功能语句2...
		break;
	case 值3:
		功能语句1
		功能语句2...
		break;
					
	default:// 相当于条件语句中else,所有的case匹配不上执行default
		default语句
		break;
}

变量 :可以是局部变量或常量

switch中变量支持的数据类型:

byte/ short / int / char / String(JDK1.7) / 枚举类型(JDK1.5)

执行流程:

switch语句优先从case开始匹配,只有case都没有匹配上才匹配default语句,如果匹配上一个case,则会找最近的break,如果没有,则会一直向下执行,就不会匹配了,直到找到break或者到switch语句结束为止 。

代码案例:

public class _02Switch {
public static void main(String[] args) {
	// 通过switch结构优化上面案例代码
	// 声明一个int类型变量weekDay2,表示一周中的某一天。赋值4
	int weekDay2 = 4;
	switch (weekDay2) {// switch()中写变量weekDay2
		case 1: // 表示匹配weekDay的是1的情况
			System.out.println("周一: 好好学习");
			System.out.println("周一: 好好学习");
			System.out.println("周一: 好好学习");
			break;// break表示破坏,这里结束当前switch结构
		case 2: // 表示匹配weekDay2的是2的情况
			System.out.println("周二:看片学习");
			break;
		case 3: // 表示匹配weekDay2的是3的情况
			System.out.println("周三: 实践学习");
			break;
		case 4: // 表示匹配weekDay2的是4的情况
			System.out.println("周四: 吃药补补身体!");
			break;
		case 5: // 表示匹配weekDay2的是5的情况
			System.out.println("周五: 爬山锻炼身体!");
			break;
		case 6: // 表示匹配weekDay2的是6的情况
			System.out.println("周六: 休息,给身体放个假");
			break;
		case 7: // 表示匹配weekDay2的是7的情况
			System.out.println("周日:总结一周所得!");
			break;
		default: // 所有情况都不匹配会执行default
			System.out.println("出错了");
			break;
	}
}
}

3.2 注意事项

1. 每个case之间顺序可以交换,不影响代码运行。

2. default不一定放在末尾 在所有case失效的时候就会被执行到。

3. case中值与 key类型必须一致。

4. 最后一个break可以省略,但不建议。

5. break可以省略,但会导致后续case条件判断失效,按照从上到下顺序执行,直到找到第一个break跳出switch结构,如果没有找则执行到末尾后结束switch结构

4.0 循环结构

为什么要学习循环?

先来看一个需求:

// 请打印10句,我爱Java,Java让我快乐!
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");
System.out.println("我爱Java,Java让我快乐!");

很明显这样写代码,非常浪费时间,可读性也不好,所以,我们要学习循环解决这样的问题。

4.1 循环概念

定义:循环结构是指在程序中需要重复执行某个功能的一种结构,是一种常见的控制流程。

循环结构需要有一个结束条件,否则会形成死循环,导致内存溢出。

4.2 循环作用

循环结构可以复用代码。

4.3 循环分类

4.3.1 while循环【掌握】

特点:先判断,如果满足条件再循环。

基本语法:

1.初始化条件(根据条件判断是否要写)
while(2.循环条件判断){
   3.循环体(重复干的事)
   4.循环控制(根据条件判断是否要写)
}

循环条件判断:布尔类型的值或者表达式。

循环体:当循环条件为true时执行循环体,当为false时终止循环,不执行循环体

执行流程:

第1次:1. 初始化条件语句 => 2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

第2次:2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

第3次:2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

...

最后1次: 2.条件判断语句

代码案例:

// 请打印10句,我爱Java,Java让我快乐!
// 声明一个int类型变量count表示次数,赋值1
int count = 1;// 1. 初始化条件
while (count <= 10) {// count <= 10是 2.循环条件判断
	// 打印:我爱Java,Java让我快乐!
	System.out.println("我爱Java,Java让我快乐! : " + count);// 3.循环体 【重复干的事】
	count++;// 次数count+1 4.循环控制语句
}
		

4.2.2 do...while循环【掌握】

特点:先执行一次循环体,然后再判断,如果满足条件再循环,只会预执行一次

一般用在扫雷、获取连接数据库、远程控制、坦克大战、打飞机游戏等场景。

基本语法:

1.初始化条件(根据条件判断是否要写)
do {
	3.循环体(重复干的事)
4.循环控制(根据条件判断是否要写)
} while (2.条件判断);// 注意分号

循环条件判断:布尔类型的值或者表达式。

循环体:当循环条件为true时执行循环体,当为false时终止循环,不执行循环体

执行流程:

第1次:1. 初始化条件语句 => 3. 循环体 => 4. 循环控制语句

第2次:2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

第3次:2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

...

最后1次: 2.条件判断语句

代码案例:

public class _05While {
public static void main(String[] args) {
		// 请打印10句,我爱Java,Java让我快乐!
// 声明一个int类型变量count2表示次数,赋值1
	int count2 = 1;// 1. 初始化条件
	do {
		// 打印:我爱Java,Java让我快乐!
		System.out.println("我爱Java,Java让我快乐! : " + count2);// 3.循环体 【重复干的事】
		count2++;// 次数count+1 4.循环控制语句
	} while (count2 <= 10);// ()后的分号必须写。
}
}

练习:

1. 输出 1-10的所有的数。

2. 求出 1-10的所有偶数的和。

3. 求出1-10中2的倍数的数字和个数。

答案代码如下:

public class _06While {
public static void main(String[] args) {
	// 1.输出 1-10的所有的数
	/*
	 *  while(条件判断){
			循环体(重复干的事)
		}
			
		do{
			循环体(重复干的事)
		}while(条件判断);//注意分号
	 */
	int num = 1;
	while (num <= 10) {
		System.out.println(num);
		num++;
	}
		
	// 2.输出 1-10的所有偶数
	/*
	 * 思路:
	 * 	1. 先输出1-10所有数字
	 *  2. 在循环体中判断这个数字是否为偶数,如果是才输出
	 */
	int num2 = 1;
	while (num2 <= 10) {
		// 判断当前num2是否是偶数
		if (num2 % 2 == 0) {
			System.out.println(num2);
		}
		// 循环控制语句:num2++
		num2++;
	}
		
	int num3 = 1;
	do {
		// 判断当前num2是否是偶数
		if (num3 % 2 == 0) {
			System.out.println(num3);
		}
		// 循环控制语句:num2++
		num3++;
	} while (num3 <= 10);
		
		
	// 3.求出 1-10的所有偶数的和
	int num4 = 1;
	int sum = 0;// 声明一个int类型变量sum赋值0,保存和。
	while (num4 <= 10) {
		// 判断当前num4是否是偶数
		if (num4 % 2 == 0) {
			// 如果是偶数,将所有偶数累加到和sum中
			sum += num4;
		}
		// 循环控制语句:num4++
		num4++;
	}
	System.out.println("和:" + sum);
		
	int num5 = 1;
	int sum2 = 0;// 声明一个int类型变量sum赋值0,保存和。
	do {
		// 判断当前num是否是偶数
		if (num5 % 2 == 0) {
			// 如果是偶数,将所有偶数累加到和sum中
			sum2 += num5;
		}
		// 循环控制语句:num++
		num5++;
	} while (num5 <= 10);
	System.out.println("和:" + sum2);
	
}
}
for(1.初始化条件语句;2.条件判断语句;4.循环控制语句) {
    3. 循环体
}

5.0 循环结构-for【重点】

1.1 for循环【重点】

for循环结构,其实就是对while循环的一种特殊简化。在实际开发中使用非常多,必须掌握扎实。

基本语法:

for(1.初始化条件语句;2.条件判断语句; 4.循环控制语句) {
    3. 循环体
}

执行流程:【重点】

第1次:1. 初始化条件语句 => 2.条件判断语句 => 3. 循环体 => 4. 循环控制语句

第2次:2. 条件判断语句 => 3. 循环体 => 4. 循环控制语句

第3次:2. 条件判断语句 => 3. 循环体 => 4. 循环控制语句

...

最后1次: 2.条件判断语句

代码案例:

public class _05While {
public static void main(String[] args) {
	    // 请打印10句,我爱Java,Java让我快乐!
// 声明一个int类型变量count表示次数,赋值1
//	int count = 1;// 1. 初始化条件
//	while (count <= 10) {// count <= 10是 2.循环条件判断
// 打印:我爱Java,Java让我快乐!
//	System.out.println("我爱Java,Java让我快乐! : " + count);// 3.循环体 【重复干的事】
//	count++;// 次数count+1 4.循环控制语句
//	}
// for循环就是将while循环中部分条件移动到()中
for (int count = 1; count <= 10; count++) {
		// 打印:我爱Java,Java让我快乐!
		System.out.println("我爱Java,Java让我快乐! : " + count);// 3.循环体 【重复干的事】
	}
 }
}

注意事项:

  1. 特殊写法:
  2. 初始条件中变量的作用域

练习:

1. 输出 1-10的所有的数。
2. 输出 1-10的所有偶数。
3. 求1-10的所有偶数和。
4. 分析题
int i = 0;
for(;i++ < 10;i += 2){
System.out.println(++i);
}
System.out.println("i = " + i);
上面的代码打印的值?
循环了几次?
判断了几次?
最后i的值是多少?
5. 用for循环计算1-10的积。
6. 求1-10的阶乘和(1! + 2! + 3! + 4! + 5! +...)。
7. 求出20以内3的倍数的数字和个数。

代码实现:

public class _08For {
public static void main(String[] args) {
	// 1.输出 1-10的所有的数
	for (int i = 1; i < 11; i++) {
		System.out.println(i);
	}
		
	// 2.输出 1-10的所有偶数
	for (int i = 1; i < 11; i++) {
		if (i % 2 == 0) {
			System.out.println(i);
		}
	}
		
	// 3.求 1-10的所有偶数和
	int sum = 0;// 声明一个int类型变量,赋值0,保存和
	for (int i = 1; i < 11; i++) {
		if (i % 2 == 0) {
			sum += i;
		}
	}
	System.out.println("和:" + sum);
		
	// 4. 
	int i = 0;
	for(;i++ < 10;i += 2){
		System.out.println(++i);
	}
	System.out.println("i = " + i);
	// 上面的代码打印的值?2、6、10
	// 循环了几次?3
	// 判断了几次?4
	// 最后i的值是多少?13
		
	// 5.用for循环计算1-10的积
	int product = 1;// 声明一个int类型变量product,赋值1,表示乘积
	for (int j = 1; j < 11; j++) {
		// 将每一个数字j累乘到product中。
		product *= j;// j = 1
	}
	System.out.println("乘积:" + product);
		
	// 6.求1-10的阶乘和(1! + 2! + 3! + 4! + 5! +...)
	int product2 = 1;// 声明一个int类型变量product2,赋值1,表示乘积
	int sum2 = 0;// 声明一个int类型变量sum2,赋值0,表示和
	for (int j = 1; j < 11; j++) {
		// 将每一个数字j累乘到product中。
		product2 *= j;// product就是当前j的阶乘
		// 将每一个j的阶乘product2累加到sum2中
		sum2 += product2;
	}
	System.out.println("阶乘和:" + sum2);
		
	// 7.求出20以内3的倍数的数字和个数。
	int count = 0;// 声明一个int类型变量count,赋值0,计数个数
	for (int j = 1; j <= 20; j++) {
		// 判断j是否是3的倍数
		if (j % 3 == 0) {
			System.out.println(j);
			// 计算器+1
			count++;
		}
	}
	System.out.println("个数:" + count);
		
}
}

5.2 循环注意事项

/**
  * 循环注意事项测试:(了解)
	1. while(false){}语法错误
	2. 死循环后面不能紧跟任何代码
		while(true){}
		for(;;){}
	
	3. while(条件判断);可以不写循环体
	4. for循环
		4.1 for(){}中的条件都可以拿到外部,且可以不写{}
		4.2 for(){}死循环是第二个条件判断不写,就是死循环
		4.3 for(); 可以不写循环体
*/
public class _11ForWhile {
public static void main(String[] args) {
	//1. while(false){}语法错误
		//	while (false) {}
		
	//2. 死循环后面不能紧跟任何代码
	//	while(true){}
	//	for (;;) {}
		
	//3. while(条件判断);可以不写循环体
//	while(true);
//	for (;;);
	int i = 1;
	for (; i < 11; ) {
		System.out.println(i);
		i++;
	}
  }
}

5.3 嵌套循环【了解】

顾名思义,嵌套循环指的是循环中嵌套一个循环【其实就是外层循环循环体是另外一个循环而已】,但最好嵌套不要超过3层,否则效率太低。

双层循环总结的规律:(当成是轮子,可以直接使用)

外层循环执行一次,内层循环执行所有次

外层循环负责行数,内层负责每一行中列数

循环可以是while、 do while、 for循环任意一种,下面以for循环举例

public class _10ForFor {
public static void main(String[] args) {
	/*
	 * 请打印如下图案:5 * 5 的星星
	 * 	*****
	 * 	*****
	 * 	*****
	 * 	*****
	 * 	*****
	 */
//	for (int i = 1; i <= 5; i++) {
//		System.out.println("*****");
//	}
	/*
	// 每次只能打印一个*
	// 第1行: *****
	for (int i = 1; i <= 5; i++) {
		// 打印一行中 的每一个 星星
		System.out.print("*");
	}
	// 换行
	System.out.println();
		
	// 第2行: *****
	for (int i = 1; i <= 5; i++) {
		// 打印一行中 的每一个 星星
		System.out.print("*");
	}
	// 换行
	System.out.println();
		
	// 第3行: *****
	for (int i = 1; i <= 5; i++) {
		// 打印一行中 的每一个 星星
		System.out.print("*");
	}
	// 换行
	System.out.println();
		
	// 第4行: *****
	for (int i = 1; i <= 5; i++) {
		// 打印一行中 的每一个 星星
		System.out.print("*");
	}
	// 换行
	System.out.println();
		
	// 第5行: *****
	for (int i = 1; i <= 5; i++) {
		// 打印一行中 的每一个 星星
		System.out.print("*");
	}
	// 换行
	System.out.println();
	用循环继续优化代码
	*/
	// 外层循环控制总行数
	for (int j = 1; j <= 5; j++) {
		// 内存for循环控制列数,负责 每一行中 列的输出: *****
		for (int i = 1; i <= 7; i++) {
			// 打印一行中 的每一个 星星
			System.out.print("*");
		}
		// 换行
		System.out.println();
	}
		
	/*
	 *	利用好总结出来的规律
	 *		外层循环执行一次,内层循环执行所有次
			外层循环负责行数,内层负责每一行中列数		
		 * 		 	行i	 列j	
		 **		    1	  1
		 ***		2	  2
		 ****		3	  3
		 *****		4	  4
		 ******	    5	  5
	 */
	for (int i = 1; i < 6; i++) {
		for (int j = 1; j <= i; j++) {
			System.out.print("*");
		}
		System.out.println();
	}		
}
}

执行流程分析图:

5.4 循环控制语句【掌握】

5.4.1 概念

对整个循环流程进行控制,可提前终止或跳出循环

5.4.2 控制语句分类【掌握】

5.4.2.1 break

作用表示结束当前层循环

5.4.2.2 continue

作用:表示跳过当前次循环,继续下一次循环

 

5.4.2.3 return

作用:表示结束的当前方法

代码案例:

public class _09ForControl {
public static void main(String[] args) {
	// 1. 请打印1-200所有6的倍数中前7个
	int count = 0;// 声明一个int类型计算器count赋值0
	for (int i = 1; i <= 200; i++) {
		if (i % 6 == 0) {
			System.out.println(i);
			// 每次找到一个6的倍数计算器+1
			count++;
			// 判断当前计算器count是否==7,如果是则停止循环
			if (count == 7) {
				break;// 表示结束当前层循环
			}
		}
	}
	System.out.println("===============================");

	// continue使用跳过当前i=5这一次的打印,继续后面的打印
	for (int i = 1; i <= 10; i++) {
		if (i == 5) {
//			continue;
			return; // 表示结束的当前方法
//			int a = 1;// 在以上三个控制语句后,不能紧跟任何代码,因为永远执行不到
		}
		System.out.println(i);
	}
	System.out.println("循环外部的代码");
		
	// 2. 求1—100之间不能被3整除的数之和大于(或等于)100的第一个数字 continue/break
	int sum = 0;// 声明一个int类型变量sum,赋值0,保存和
	for (int i = 1; i <= 100; i++) {
		if (i % 3 != 0) {
			// 打印不是3的倍数的数字i
			System.out.println(i);
			// 累加到sum中
			sum += i;
			if (sum >= 100) {// 判断sum>=100的时候结束循环
				// 打印当前结束的时候i的值
				System.out.println("最后:" + i);
				break;
			}
		}
	}
	System.out.println("和:" + sum);
		
	int sum2 = 0;// 声明一个int类型变量sum2,赋值0,保存和
	for (int i = 1; i <= 100; i++) {
		// 判断当前i是否是3的倍数,如果是,则跳过这一次循环
		if (i % 3 == 0) {
			continue;
		}
		// 打印不是3的倍数的数字i
		System.out.println(i);
		// 累加到sum2中
		sum2 += i;
		if (sum2 >= 100) {// 判断sum2>=100的时候结束循环
			// 打印当前结束的时候i的值
			System.out.println("最后:" + i);
			break;
		}
	}
	System.out.println("和:" + sum2);
	
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值