有三种:for,while,do...while
for循环语句:
A:格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行流程:
a:执行初始化语句
b:执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
c:执行循环体语句
d:执行控制条件语句
e:回到b
B:注意事项
a:判断条件语句无论简单还是复杂,结果是boolean类型
b:循环体语句如果是一条,可以省略大括号,但是不建议
c:有分号就没有左大括号,有左大括号就没有分号
Demo: 需求:请在控制台输出10次"HelloWorld" |
|
Code: 请在控制台输出数据1-10 |
|
Code: 求出1-10之间数据之和
分析: 0+1=1 1+2=3 3+3=6 6+4=10 10+5=15 ...
由此可见我们要定义两个变量: 一个变量用于存储第一个加数,第一个加数其实保存的是以前的所有数据和。默认初始化值应该是0。 一个变量用于存储第二个加数,第二个加数其实就是每次的数据变化的值。
|
|
Code: A:求1-100之和。 B:求出1-100之间偶数和
|
|
Code: 求5的阶乘。
什么是阶乘呢? n! = n*(n-1)! 规则 n! = n*(n-1)*(n-2)*...*3*2*1
求和思想。 求阶乘思想。
|
|
Code: 在控制台输出所有的"水仙花数" 分析: 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。 举例:153就是一个水仙花数。 153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
A:三位数其实是告诉了我们范围。 B:通过for循环我们就可以实现获取每一个三位数 但是麻烦是如何获取这个三位数的个,十,百位上的数据
我们如何获取一个数据的个,十,百呢? 假设有个一个数据:153 ge: 153%10 = 3 shi: 153/10%10 = 5 bai:153/10/10%10 = 1 qian:x/10/10/10%10 wan: x/10/10/10/10%10 ...
C:让ge*ge*ge+shi*shi*shi+bai*bai*bai和该数据比较 如果相同,就把该数据在控制台输出。
|
|
Code: 请在控制台输出满足如下条件的五位数 个位等于万位 十位等于千位 个位+十位+千位+万位=百位 分析: A:五位数就告诉了我们范围。 B:分解每一个五位数的个,十,百,千,万位上的数据 C:按照要求进行判断即可
|
|
Code: 统计"水仙花数"共有多少个 分析: A:首先必须知道什么是水仙花数 所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。 举例:153就是一个水仙花数。 153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153 B:定义统计变量,初始化值是0 C:三位数告诉了我们范围,用for循环就可以搞定 D:获取每一个三位数的个,十,百的数据 E:按照要求进行判断 F:如果满足要求就计数。
|
|
Code: 请统计1-1000之间同时满足如下条件的数据有多少个: 对3整除余2 对5整除余3 对7整除余2 分析: A:定义统计变量,初始化值是0 B:1-1000之间是一个范围,用for很容易就可以实现。 C:每个数据要同时满足如下要求 x%3==2 x%5==3 x%7==2 D:如果满足条件,统计数据++即可,最后输出统计变量
|
|
while循环语句格式:
基本格式
判断条件语句) {
循环体语句;
}
扩展格式
初始化语句;
判断条件语句) {
循环体语句;
控制条件语句;
}
Demo: |
|
Code: 求出1-100之和
初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句; }
for(初始化语句;判断条件语句;控制条件语句) { 循环体语句; }
|
|
Code: 统计水仙花数有多少个 |
|
循环结构(for循环和while循环的区别):
while循环和for循环的区别?
使用区别:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。
因为变量及早的从内存中消失,可以提高内存的使用效率。
其实还有一种场景的理解:
如果是一个范围的,用for循环非常明确。
如果是不明确要做多少次,用while循环较为合适。
class WhileDemo4 {
public static void main(String[] args) {
//for循环实现
for(int x=0; x<10; x++) {
System.out.println("11111");
}
//这里不能在继续访问了
//System.out.println(x);
//while循环实现
int y = 0;
while(y<10) {
System.out.println("11111");
y++;
}
//这里是可以继续访问的
System.out.println(y);
}
}
code: 我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度? 分析: A:定义一个统计变量,默认值是0 B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度 我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度 C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度? 折叠一次有什么变化呢?就是厚度是以前的2倍。 D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++ E:输出统计变量。
|
|
do...while循环的基本格式:
do {
循环体语句;
}while(判断条件语句);
扩展格式;
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
demo: |
|
循环语句的区别:
do...while循环至少执行一次循环体。
而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
那么,我们一般使用哪种循环呢?
优先考虑for,其次考虑while,最后考虑do...while
Demo: |
|
注意死循环:
A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
B:两种最简单的死循环格式
while(true){...}
for(;;){...}
循环嵌套:
demo: 需求:请输出一个4行5列的星星(*)图案。 结果: ***** ***** ***** *****
循环嵌套:就是循环语句的循环体本身是一个循环语句。
通过结果我们知道这样的一个结论: 外循环控制行数 内循环控制列数
|
|
|
|
code: 在控制台输出九九乘法表
我们先把这个九九乘法表看出是这样的一个形状: * ** *** **** ***** ****** ******* ******** *********
注意: '\x' x表示任意,这种做法叫转移字符。
'\t' tab键的位置 '\r' 回车 '\n' 换行
|
跳转控制语句
break:中断
continue:继续
return:返回
code: break:中断的意思 使用场景: A:switch语句中 B:循环语句中。 (循环语句中加入了if判断的情况) 注意:离开上面的两个场景,无意义。
如何使用呢? A:跳出单层循环 B:跳出多层循环 要想实现这个效果,就必须知道一个东西。带标签的语句。 格式: 标签名: 语句
|
|
code: continue:继续
使用场景: 循环中。离开此场景无意义。
测试,找到和break的区别: break:跳出单层循环 continue:跳出一次循环,进入下一次的执行
|
|
return:返回 其实它的作用不是结束循环的,而是结束方法的。 |
|
需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是, 每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱, 请问,经过多少天,小芳才可以存到100元钱。
分析: A:小芳的妈妈每天给她2.5元钱 double dayMoney = 2.5; B:她都会存起来 double daySum = 0; C:从第一天开始存储 int dayCount = 1; D:经过多少天,小芳才可以存到100元钱。 double result = 100; E:这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱, 说明要判断dayCount的值,如果对5整除就减去6元钱。 daySum -= 6; 由此还隐含了一个问题,就是如果不是5的倍数天的话,钱要累加 daySum += dayMoney; F:因为不知道是多少天,所以我用死循环,一旦超过100元我就退出循环。 |
|