/*
for循环
1.格式:
for(初始化表达式1;布尔表达式2;步进表达式4){
循环体3;
}
其它语句;
2.执行流程:
1,2(循环条件:true),3,4 --> 2(循环条件:true),3,4 -->
... --> 直到2(循环条件:false)为false时,结束for循环,执行后面的其它语句
3.练习
(1)输出5次HelloWorld
(2)输出1-5和5-1的数字
4.注意:
(1)for和(),以及()和{}之间是没有分号的
(2)()中有3个表达式,之间用2个分号(缺一不可)隔开,第三个表达式后面没有分号
(3)第二个表达式一定是布尔类型,结果只能是true和false
(4)循环体就是一条/多条语句
5.总结
对于求和,计数的需求,解决方案:
(1)循环的前面定义求和/计数变量
(2)循环的内部完成求和/计数功能的实现
(3)循环的后面打印求和/计数变量的结果数据
*/
public class Demo03ForHello {
public static void main(String[] args) {
//(1)输出5次HelloWorld
for (int count = 1; count <= 5;count++) {
System.out.println("HelloWorld...." + count);
}
System.out.println("--------------");
for (int count = 0; count < 5; count++) {
System.out.println("HelloWorld...." + count);
}
System.out.println("--------------");
//(2)输出1-5的数字
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
System.out.println("--------------");
//(2)输出5-1的数字
for (int i = 5; i >= 1; i--) {
System.out.println(i);
}
System.out.println("game...over...");
}
}
/*
需求:
求1-5之间的数据和,并把求和结果在控制台输出
实现步骤:
1.定义int变量sum,用来累加求和,初始化值0
2.使用for循环获取1-5的数字,循环变量int类型i
3.把循环变量i中的当前数字累加到求和变量sum中
4.循环结束后,输出求和结果sum
*/
public class Demo04Sum5 {
public static void main(String[] args) {
/*
第一次: sum是0,i是1
i<=5 --> 1<=5 --> true --> 执行循环体
sum = sum + i = 0 + 1 = 1 i++ --> i:2
第二次: sum是1,i是2
i<=5 --> 2<=5 --> true --> 执行循环体
sum = sum + i = 1 + 2 = 3 i++ --> i:3
第三次: sum是3,i是3
i<=5 --> 3<=5 --> true --> 执行循环体
sum = sum + i = 3 + 3 = 6 i++ --> i:4
第四次: sum是6,i是4
i<=5 --> 4<=5 --> true --> 执行循环体
sum = sum + i = 6 + 4 = 10 i++ --> i:5
第五次: sum是10,i是5
i<=5 --> 5<=5 --> true --> 执行循环体
sum = sum + i = 10 + 5 = 15 i++ --> i:6
第六次: sum是15,i是6
i<=5 --> 6<=5 --> false --> 结束for循环,执行for后面的输出语句
*/
//1.定义int变量sum,用来累加求和,初始化值0
int sum = 1;
//2.使用for循环获取1-5的数字,循环变量int类型i
for (int i = 1; i <= 5; i++) {
//3.把循环变量i中的当前数字累加到求和变量sum中
sum = sum + i;
}
//4.循环结束后,输出求和结果sum
System.out.println("1-5的数字之和: " + sum);
}
}
/*
需求:
求1-100之间的偶数和,并把求和结果在控制台输出
实现步骤:
1.定义int变量sum,初始化值0,用来累加求和
2.使用for循环获取1到100之间的数字,循环变量int类型num
3.循环内部判断num中的当前数字如果是偶数
4.循环内部把num中当前的偶数数字累加到求和变量sum中
5.for循环结束后,输出求和结果sum
快捷键:
数字常量/变量.fori: 正着循环
数字常量/变量.forr: 倒着循环
.var --> 回车: 生成变量
*/
public class Demo05SumOu {
public static void main(String[] args) {
//1.定义int变量sum,初始化值0,用来累加求和
int sum = 0;
//2.使用for循环获取1到100之间的数字,循环变量int类型num
for (int num = 1; num <= 100; num++) {
//3.循环内部判断num中的当前数字如果是偶数
if (num % 2 == 0) {
//4.循环内部把num中当前的偶数数字累加到求和变量sum中
sum = sum + num;//等价于: sum += num
}
}
//5.for循环结束后,输出求和结果sum
System.out.println("1-100的偶数数字之和: " + sum);
System.out.println("----------------------------");
//使用for循环获取1到100之间的每个偶数数字
int sum2 = 0;
for (int num = 0; num <= 100; num += 2) {
sum2 += num;
}
System.out.println("1-100的偶数数字之和: " + sum2);
}
}
/*
需求:
在控制台输出所有的“水仙花数”
解释:什么是水仙花数?
水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
实现步骤:
1.使用for循环获取所有的三位数字,循环变量int类型num
2.在循环内部计算num中当前数字的个位十位百位,分别保存int变量ge,shi,bai中
3.在循环内部计算num中当前数字的个位十位百位的立方和,保存int变量sum
4.在循环内部判断如果立方和 等于 num中的数字本身,说明该数字是水仙花数字
5.在循环内部输出当前水仙花数字
*/
public class Demo06ForSXH {
public static void main(String[] args) {
//1.使用for循环获取所有的三位数字,循环变量int类型num
for (int num = 100; num < 1000; num++) {
//2.在循环内部计算num中当前数字的个位十位百位,分别保存int变量ge,shi,bai中
int ge = num % 10;//个位
int shi = num / 10 % 10;//十位
int bai = num / 100 % 10;//百位
//3.在循环内部计算num中当前数字的个位十位百位的立方和,保存int变量sum
int sum = ge * ge * ge + shi * shi * shi + bai * bai * bai;
//4.在循环内部判断如果立方和 等于 num中的数字本身,说明该数字是水仙花数字
if (sum == num) {
//System.out.println(num + "的个位: " + ge + ", 十位: " + shi + ", 百位: " + bai + ", 立方和: " + sum);
//5.在循环内部输出当前水仙花数字
System.out.println(num);
}
}
}
}
/*
需求:
在控制台输出所有的“水仙花数”及个数
解释:什么是水仙花数?
水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 27 + 125 + 1 = 153
实现步骤:
0.定义int变量count,初始值0,用来统计水仙花数字的个数
1.使用for循环获取所有的三位数字,循环变量int类型num
2.在循环内部计算num中当前数字的个位十位百位,分别保存int变量ge,shi,bai中
3.在循环内部计算num中当前数字的个位十位百位的立方和,保存int变量sum
4.在循环内部判断如果立方和 等于 num中的数字本身,说明该数字是水仙花数字
5.在循环内部输出当前水仙花数字
6.在循环内部把计数器count的值增加1
7.循环结束后,输出计数结果count
*/
public class Demo07ForSXHCount {
public static void main(String[] args) {
//0.定义int变量count,初始值0,用来统计水仙花数字的个数
int count = 0;
//1.使用for循环获取所有的三位数字,循环变量int类型num
for (int num = 100; num < 1000; num++) {
//2.在循环内部计算num中当前数字的个位十位百位,分别保存int变量ge,shi,bai中
int ge = num % 10;//个位
int shi = num / 10 % 10;//十位
int bai = num / 100 % 10;//百位
//3.在循环内部计算num中当前数字的个位十位百位的立方和,保存int变量sum
int sum = ge * ge * ge + shi * shi * shi + bai * bai * bai;
//4.在循环内部判断如果立方和 等于 num中的数字本身,说明该数字是水仙花数字
if (sum == num) {
//System.out.println(num + "的个位: " + ge + ", 十位: " + shi + ", 百位: " + bai + ", 立方和: " + sum);
//5.在循环内部输出当前水仙花数字
System.out.println(num);
//6.在循环内部把计数器count的值增加1
count++;
}
}
//7.循环结束后,输出计数结果count
System.out.println("以上水仙花数字的个数: " + count + "个");
}
}
//统计1到10之间的偶数的个数
public class Demo08ForCount {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i);
count++;
}
}
System.out.println("以上偶数总共有: " + count + "个");
}
}
/*
while循环
1.格式:
初始化表达式1;
while(布尔表达式2){
循环体3;
步进表达式4;
}
其它语句;
2.执行流程:
1,2(循环条件:true),3,4 --> 2(循环条件:true),3,4 -->
... --> 直到2(循环条件:false)为false时,结束for循环,执行后面的其它语句
3.练习
输出5次HelloWorld
4.注意:
(1)while和(),以及()和{}之间是没有分号的
(2)()中的表达式必须是布尔类型
(3)循环体就是一条/多条语句
*/
public class Demo04WhileHello {
public static void main(String[] args) {
//输出5次HelloWorld
int count = 1;//初始化表达式1;
//布尔表达式2
while (count <= 5) {
System.out.println("HelloWorld...." + count);//循环体3;
count++;//步进表达式4: 修改循环变量的值的
}
System.out.println("game...over...");
}
}
/*
需求:
世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
折纸(折叠后的厚度是原有厚度的2倍,而不是平方的关系):
原来: 0.1 paper
第一次: 0.1*2: 0.2 paper = paper * 2
第二次: 0.2*2: 0.4
第三次: 0.4*2: 0.8
第四次: 0.8*2: 1.6
...
实现步骤:
1.定义int变量count,初始值0,用来统计折叠纸张的次数
2.定义两个double变量zf和paper代表珠峰的高度和纸张的厚度,并根据题目需求进行初始化
3.因为到底折叠多少次纸张可以达到珠峰的高度,是不确定的,建议使用while循环
3.1 循环条件: 纸张的厚度(循环变量) < 珠峰的高度
3.2 循环体: 折叠一次纸张 paper = paper * 2
3.3 步进表达式: 计数器count的值增加1
3.while循环结束,输出count的值
*/
public class Demo05WhileZF {
public static void main(String[] args) {
//1.定义int变量count,初始值0,用来统计折叠纸张的次数
int count = 0;
//2.定义两个double变量zf和paper代表珠峰的高度和纸张的厚度,并根据题目需求进行初始化
double zf = 8844430, paper = 0.1;
//3.因为到底折叠多少次纸张可以达到珠峰的高度,是不确定的,建议使用while循环
//3.1 循环条件: 纸张的厚度(循环变量) < 珠峰的高度
while (paper < zf) {
//3.2 循环体: 折叠一次纸张 paper = paper * 2
paper = paper * 2;
//3.3 步进表达式: 计数器count的值增加1
count++;
System.out.println("第" + count + "次折叠后,纸张高度: " + paper);
}
//3.while循环结束,输出count的值
/*
发现最终纸张厚度:
1.34217728E7 科学计数法 1.34217728 × 10的7次方 --> 13421772.8
分析发现:
最终厚度大约是珠峰的两倍(不到两倍),因为少折叠一次都不到高度(差了一点点),
所以需要再折叠一次
*/
System.out.println("总共折叠" + count + "次,可以达到珠峰的高度,最后纸张的厚度" + paper);
}
}/*
do-while循环:
1.格式:
初始化表达式1;
do {
循环体3;
步进表达式4;
} while(布尔表达式2);
其它语句;
2.执行流程:
1,3,4 --> 2(循环条件:true),3,4
-->2(循环条件:true),3,4
...
-->直到2(循环条件:false)时,结束do-while循环,执行后续其它语句
3.练习:
输出5次HelloWorld
4.注意:
(1)do和{},{}和while,以及while后()之间都是没有分号的
(2)()中的表达式必须是布尔类型,而且()后面必须写一个分号,不写是语法格式错误
(3)循环体就是一条/多条语句
(4)代码从上到下依次执行,它是先执行循环体,再进行条件判断,所以对于do-while而言,循环体至少执行一次
*/
public class Demo06DoWhile {
public static void main(String[] args) {
int count = 1;
do {
System.out.println("HelloWorld..." + count);
count++;
} while (count <= 3);
System.out.println("game...over...");
}
}
/*
死循环
1.概念: 用不停止的循环,又叫做永真循环
2.分类:
(1)for循环的死循环格式: for芬芬
for (; ; ) {
...
}
(2)while循环的死循环格式:
while (true) {
...
}
(3)do-while循环的死循环格式:
do {
...
} while (true);
*/
public class Demo07DeadLoop {
public static void main(String[] args) {
//for的死循环
//不写布尔表达式: 默认是true
/*for (; ;) {
System.out.println("HelloWorld...");
}*/
//while的死循环
/*while(true) {
System.out.println("HelloWorld...");
}*/
//do-while的死循环
do{
System.out.println("HelloWorld...");
}while (true);
}
}
/*
三种循环的区别总结
1.建议使用的顺序: for,while,do-while
2.循环次数确定的话,建议使用for,循环次数不确定建议使用while 【先了解: 后面有使用场景】
循环次数不确定需要先写成死循环的格式【while好看】 --------明天讲解
3.do-while循环来讲的话,至少执行一次
for/while: 循环体可以一次都不执行 原因: 先判断条件,后执行循环体
do-while: 循环体至少执行一次 原因: 先执行循环体,后判断条件
4.while和do-while循环而言,循环结束后,初始化条件中定义的变量可以继续使用,
但是for循环的不能使用(在for循环内部定义初始化语句)
以下说法正确的是: ABCEF
A: for循环是先判断条件,后执行循环体
B: while循环是先判断条件,后执行循环体
C: do-while循环是先执行循环体,后判断条件
D: for和while至少执行一次
E: for和while可以一次都不执行
F: do-while而言至少执行一次
*/
public class Demo08LoopDiff {
public static void main(String[] args) {
/*
//演示do-while循环: 循环体至少执行一次
for (int i = 5; i < 0; ) {
System.out.println("HelloWorld");
}
int j = 5;
while (j < 0) {
System.out.println("HelloWorld");
}
int k = 5;
do {
System.out.println("HelloWorld");
} while (k < 0);*/
for (int i = 1; i <= 3; i++) {
System.out.println("HelloWorld...for...in..." + i);
}
//错误: i是在for内部定义的,只能在for内部使用
//System.out.println("HelloWorld...for...out..." + i);
int j = 1;
while (j <= 3) {
System.out.println("HelloWorld...while...in..." + j);
j++;
}
//正确: j是在while循环外面定义的,是在main方法中定义的,只要在main方法中都是有效的
System.out.println("HelloWorld...while...out..." + j);
int k = 1;
do {
System.out.println("HelloWorld...do...while...in..."+k);
k++;
} while (k <= 3);
//正确: k是在do-while循环外面定义的,是在main方法中定义的,只要在main方法中都是有效的
System.out.println("HelloWorld...do...while...out..."+k);
System.out.println("game...over...");
}
}