1,循环的初步了解
什么是循环:
重复的执行某件事情。
在循环的时候要注意的东西:
- 循环的开始条件
- 循环开始后,重复执行什么
- 循环的结束条件
2,for循环
格式:
for(初始化语句;条件判断语句;条件控制语句){
循环体;
}
执行流程:
首先执行一次初始化语句。
然后执行条件判断语句,如果为false,那么整个循环停止。
如果为true,执行循环体。
循环体执行完毕,执行条件控制语句。再回到条件判断处,进行判断。
案例1:
for(int i = 1 ; i <=3 ; i++){
System.out.println("小菜同学篮球场往返跑");
}
案例2:
for(int i = 1 ; i <=3 ; i++){
System.out.println(i);
}
第一次循环:首先执行初始化语句 int i = 1。
执行 判断语句 i <= 3 。结果为true。
所以,进入循环体,打印 1.
执行条件控制 i ++。
-------------------现在第一次循环结束,i = 2 --------------------------------------------------
第二次循环:不会从初始化语句开始
执行 i <= 3。此时2<=3。结果为true。
所以,进入循环体,打印 2.
执行条件控制i++。
-------------------现在第二次循环结束,i = 3 --------------------------------------------------
第三次循环:不会从初始化语句开始
执行 i <= 3。此时 3<=3。结果为true。
所以,进入循环体,打印3。
执行条件控制i++。
-------------------现在第三次循环结束,i = 4 --------------------------------------------------
第四次循环:不会从初始化语句开始
执行 i <= 3。此时 4<=3。结果为false。
所以,本次循环不会执行。停止for这个整体。
问:在上面的过程中,四条语句分别执行多少次?
初始化语句:1次。
条件判断语句:4次。
循环体:3次。
条件控制语句:3次。
案例3:
//利用for循环输出1-5
//1,循环什么时候开始: 从1开始
//2,循环什么时候结束: 到5结束
//3. 循环的时候重复执行什么: 打印数字
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
案例4:
//利用for循环打印5-1
for (int i = 5 ; i >=1 ; i--){
System.out.println(i);
}
案例5:
//定义一个求和的变量 sum
int sum = 0;
//偷懒:次数点fori --- 快速生成for循环
for (int i = 1; i <= 5; i++) {
sum = sum + i;//sum += i;
}
System.out.println(sum);
案例6:
public class ForDemo5 {
public static void main(String[] args) {
//题目:求1-100之间的偶数和
//1.求1-100之间所有数字的和
int sum = 0;
for (int i = 1; i <= 100; i++) {
//i 依次表示1~100之间的每一个数
//System.out.println(i);
//2.对i进行判断,如果为偶数,才累加,如果为奇数,就不累加
if (i % 2 == 0) {
sum = sum + i;
}
}
System.out.println(sum);
}
}
案例7:
public class ForDemo6 {
public static void main(String[] args) {
//求1-100之间的奇数和
//定义了一个求和变量
int sum = 0;
//写一个for循环得到1-100之间的每一个数
for (int i = 1; i <= 100; i++) {
//i 就依次表示1~100之间的每一个数
//对i进行判断
if(i % 2 == 1){
sum = sum + i;
}
}
System.out.println(sum);
}
}
案例8:
public class ForDemo7 {
public static void main(String[] args) {
//求1~100中,既能被3整数,又能被5整数的数字和。
//定义一个求和变量
int sum = 0;
//写一个循环,得到1~100之间的每一个数
for (int i = 1; i <= 100; i++) {
//i依次表示1~100之间的每一个数
//满足什么条件,才算是被3整数? % 3 == 0
//满足什么条件,才算是被5整数? % 5 == 0
if (i % 3 == 0 && i % 5 == 0) {
sum = sum + i;
}
}
System.out.println(sum);
}
}
案例9:
public class ForDemo8 {
public static void main(String[] args) {
//在1~100中,打印个位数是7的所有数字.
//复习:
//获取个位: number % 10; 举例: 123 % 10
//获取十位: number /10 % 10 举例: 123 / 10 % 10
//获取百位: number /100 % 10
//获取千位: number /1000 % 10
//...
//还要再写一个循环,1~100
for (int i = 1; i <= 100; i++) {
//i依次表示1~100之间的每一个数。
//判断当前数字的个位数是否为7
if (i % 10 == 7) {
System.out.println(i);
}
}
}
}
案例10:
//前置知识点,判断一个数是否为水仙花数
public class ForDemo9 {
public static void main(String[] args) {
//定义一个变量,赋值为任意一个三位数,判断这个数是否为水仙花数
int number = 371;
int ge = number % 10;
int shi = number / 10 % 10;
int bai = number / 100 % 10;
//小括号优先于所有
if(((ge * ge * ge) + (shi * shi * shi) + (bai * bai * bai)) == number){
System.out.println(number + "是水仙花数");
}else{
System.out.println(number + "不是水仙花数");
}
}
}
public class ForDemo10 {
public static void main(String[] args) {
//打印出每一个水仙花数
//确定范围:100 ~999
for (int i = 100; i <= 999; i++) {
//i依次表示这个范围中的每一个数字
//获取这个数字的个位,十位,百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
System.out.println(i);
}
}
}
}
案例11:统计思想
public class ForDemo11 {
public static void main(String[] args) {
//统计有多少个水仙花数?
//定义一个变量,表示计数器。
//当满足条件的时候,count++
//表示,满足条件的数又多了一个。
int count = 0;
//确定范围:100 ~999
for (int i = 100; i <= 999; i++) {
//i依次表示这个范围中的每一个数字
//获取这个数字的个位,十位,百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
//如果当前的数是水仙花数,那么计数器就要自增
//表示水仙花数多了一个。
count++;
}
}
//当循环结束之后,就表示100~999这个范围中,所有的水仙花都已经找到了
System.out.println(count);
}
}
案例12:
public class ForDemo12 {
public static void main(String[] args) {
//统计 1 ~ 1000 之间。满足要求的数有多少个?
//1,十位数为7
//2,是一个偶数
//3,能被5整除
//技巧:
//只要需要使用统计个数。那么一定使用计数器思想。
int count = 0;
//写一个循环得到这个范围中的数字
for (int i = 1; i <= 1000; i++) {
//i依次表示1~1000之间的每一个数
if (i / 10 % 10 == 7 && i % 2 == 0 && i % 5 == 0) {
//只要满足条件,那么计数器自增
System.out.println(i);
count++;
}
}
System.out.println(count);
}
}
3,while循环
基本格式:
while(条件判断语句){
循环体;
}
完整格式:
初始化语句;
while(条件判断语句){
循环体;
条件控制语句;
}
执行流程:
首先执行初始化语句。
再执行条件判断语句,如果结果为false,不进入大括号,直接停止。
如果判断结果为true,才进入大括号执行循环体和条件控制语句。
执行完毕之后,再次回到上面,进行判断。
核心:
只有大括号中的结果为真,那么才会进入循环体。
案例:
public class WhileDemo1 {
public static void main(String[] args) {
//表示折叠的次数
int count = 0;
//定义一个变量表示珠穆朗玛峰的高度
int height = 8844430;
//定义一个变量表示纸张的厚度
double paper = 0.1;
//当纸张的厚度 < 珠穆朗玛峰的高度时,我才折叠
//当纸张的厚度 >= 珠穆朗玛峰的高度时,我就不折叠了 --- 循环停止
//2.只有纸张的厚度小于高度的时候,我才进入到循环体去折叠纸张。
while(paper < height){
//1,循环体里面做什么?折叠纸张的动作 ---> 纸张的厚度变成了原来的两倍。
paper = paper * 2;//折叠 paper*=2;
//每折叠一次,计数器就要自增一次。
count++;
}
System.out.println(count);
}
}
4,for循环和while的使用区别
-
在语法当中,for循环跟while循环几乎是没有区别的。
-
在语法当中,能用for的地方,一定能用while。
-
在语法当中,能用while的地方,一定能用for。
注意:在使用习惯上会有区别。
for:当我们能明确知道循环次数的时候。
while:当不知道循环次数,但是我们可以确定循环的停止条件。
举例:
1,我想要打印 1 - 100 之间所有的偶数。用for更方便一些。因为用for循环,我们可以清晰的看出循环的开始和结束标记。
//清晰的看到循环从1开始,到100结束。
for (int i = 1; i <= 100; i++) {
添加判断的代码...
System.out.println(i);
}
int i = 1;
//我们发现循环开始的位置,跟循环结束的位置,没有在一行。
.....//其他的代码。。。。
while(i <= 100){
添加判断的代码...
System.out.println(i);
i++;
}
2,折叠纸张,当厚度超过珠穆朗玛峰的时候就停止。
因为在做题目的时候,我也不知道到底折叠多少次,纸张的厚度才能超过珠穆朗玛峰。
所以,此时我们用while循环。
案例1:
猜数字小游戏
//有一个筛子 妹子摇了摇筛子
//重复的,循环的开始猜到底是多少?
//问:用for,还是用while更方便?
使用while更方便。
因为,我也不知道要猜多少次,才能猜中到底多少点数。
但是,如果我猜中了,那么这个游戏就停止
。
案例2:
登录的时候,输入用户名和密码。
当用户名和密码全部输入正确时,才能认为登录成功。
如果用户名和密码输入错误,那么认为登录失败。
如果失败了,让用户再次重新输入,重新登录。(假设此时,没有登录次数的限制)
请问,此时用for循环实现,还是用while循环实现。
答案:此时肯定使用while,因为此时,我不知道用户登录第几次的时候,才能输入正确。
5,do…while循环
掌握:
不管条件判断语句是真,还是假,循环体至少执行一次。
在以后,几乎是不用的。最为常用的循环,就是for和while循环。
格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
6,无限循环
-
又名:死循环。
-
特点:循环一直继续,无法停下来。
for循环的死循环:
for(;;){
System.out.println("看看我执行了吗?");
}
- 初始化语句是空着不写的,表示不需要初始化任何变量。
- 条件判断语句是空着不写的,表示这里默认为true。
- 条件控制语句是空着不写的,表示不需要进行任何的条件控制。
- 此时程序运行之后,会无限的执行循环体内容。
while循环的死循环:
while(true){
System.out.println("看看我执行了吗?");
}
注意点:
while格式的死循环中,小括号里面的true必须要手动的写出来。否则会报错。
do…while的死循环:
了解一下就可以,不需要记忆。
do{
System.out.println("看看我执行了吗?");
}while(true);
7, 问:for循环格式的死循环、while循环格式的死循环。在以后,通过使用谁会更方便一些。
while会更方便一些。
无限循环,我们只不知道循环的次数的。所以使用while循环会更多一些。
掌握程度:
到目前为止,只要大家能把for格式的,还有while格式的无限循环能写出来就可以了。
具体无限循环的使用场景,我们到后天学习完循环控制语句之后,就能知道。