循环:
1.概念: 将重复的操作反复在一个地方执行。
2.作用: 简化代码,减少代码的冗余,提高可读性。
3.分类:
while、do…while、for
while 当型循环
语法:
while语法:
while(循环条件){
语句体;
}
案例: 求1~100之间 偶数出现的次数
//定义变量用来统计次数
int count = 0;
int i = 1;
while(i <= 100) {
//当i为偶数数进入循环
if(i%2 == 0) {
//if语句进来一次就代表出现了一次偶数,我们把这个次数进行累加
count = count + 1;
}
i++;
}
//输出
System.out.println(count);
do…while 直到型循环
语法:
do {
语句体;
}while(条件);
while跟do-while的区别:
- while循环先判断再执行
- do-while是先执行再判断,就算条件不成立也会执行一次
for循环
for是对while循环的升级,把循环的三要素放在一起,便于管理,并且提高了代码的可读性。
语法:
for(第一要素;第二要素;第三要素) {
需要重复执行的代码;
}
案例:
1.使用for循环打印0-100之间所有的数字。
2.用for循环求0-100之间所有数字的和。
3.使用for循环求5的阶乘 5!=54321。
// 1.使用for循环打印0-100之间所有的数字。
for(int i =0;i<=100;i++) {
System.out.println(i);
}
// 2.使用for循环求0-100之间所有数字的和
// 定义变量存储累加和
int sum = 0;
// 累加求和
for(int i = 0;i<=100;i++) {
sum+=i;
i++;
}
System.out.println(sum);
// 思考题:使用for循环求5的阶乘 5!=5*4*3*2*1
int temp =1;
for (int i = 5;i>0;i--) {
temp *=i;
}
System.out.println(temp);
案例4: 求 1! + 4! + 7! + 10! + 13! + 16!
// 定义变量sum,用来存储所有数字的阶乘的和
long sum = 0;
//外层循环获取1 4 7 ....16
for(int i =1;i<=16;i=i+3) {
long result =1;
for(int j =i;j>=1;j--) {
// 定义变量result,来存储阶乘的值,因为16!超过了int的取值范围,所以这里用long
result = result*j;
}
sum =sum+result;
}
System.out.println("1! + 4! + 7! + 10! + 13! + 16!="+sum);
前面我们讲过变量名不能重复定义,但我们发现上面的案例中我们每一个for循环中都定义了一个变量i,由此可见变量只在for循环的内部有效,在循环的外部无效。不同的for循环里面的变量名可以重复。但是当同一段代码用了多个for循环,这里我们为了方便区分变量和提高代码可读性,建议在不同的for循环中尽量避免使用同一个变量名。
流程控制语句
流程控制语句 用来控制代码的执行过程。
break
- break用于switch语句中,表示终止switch语句。
- break用于循环语句中,表示循环停止,跳出循环,不再进行下面的循环(多与死循环搭配使用)。
- break用于其他位置,毫无意义。
而switch中的break是switch语法的一部分,不可缺少。相比循环中的break,两者是两个独立的语法。
案例: 输出1-10中的前4个数
// break语句
for(int i = 1;i<=10;i++) {
if(i==5) {
break;
}
System.out.println(i);
}
continue
在一个循环里面遇到continue,跳过本次循环,继续下一次循环。
与break不同,continue只能在循环中使用。
案例: 输出1-10中5以外的9个数
// continue
for(int i=1;i<=10;i++) {
if(i==5) {
continue;
}
System.out.println(i);
}
循环嵌套
循环的嵌套:
在循环里面再添加循环。
案例1:
使用循环打印一个9*9的正方形,要求每一个输出语句只输出一个星。
// 定义一个变量i,来代表行数
for(int i =1;i<=9;i++) {
// 定义一个变量j,来代表列数
// 循环嵌套中不能定义重复的变量
for(int j=1;j<=9;j++) {
System.out.print("* ");
}
// 换行
System.out.println();
}
案例2: 用*打印等腰直角三角形 。
// 变量i代表行数,变量j代表列数。
// 观察图形,发现每一行*的最大个数都等于行数i,即每一行的列数都等于改行的行数(j<=i)。
// 外层循环控制行数
for(int i = 1;i<=9;i++) {
// 内层循环控制每行的列数
for(int j=1;j<=i;j++) {
System.out.print("* ");
}
System.out.println();
}
案例3: 打印九九乘法表
// 可以把九九乘法表看做是一个九成九的等腰直角三角形
//外层循环控制行数,内层循环控制列数。
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(j+"*"+i+"="+(i*j)+" ");
}
//换行
System.out.println();
}
总结
- 在企业级项目开发中,for循环是使用最多的循环,while循环其次,而do…while循环几乎不会用到。
- 如果不知道循环的次数,优先选择while循环。
案例:
有一张1mm厚的白纸,折叠多少次超过100mm(这里没有告诉我们循环的具体次数,因此优先选择while)
//有一张1mm厚的白纸,折叠多少次超过100mm
//定义变量land,用来存储白纸的厚度
int land = 1;
//定义变量count,用来存储折叠次数
int count =0;
// 方法一:
while(land<=100) {
land = land*2;
count+=1;
}
System.out.println(count);
// 方法二:
while(true) {
land *= 2;
count +=1;
if (land>100) {
break;
}
}
System.out.println(count);
- 如果知道循环的次数,优选选择for循环。
案例:
有1万元,存入银行,年利率是3%,求10年后的本息和。(我们知道具体的循环次数为10,因此优先选择for)
//for循环
double money = 10000;
for (int i=1;i<=10;i++) {
money = money+0.03*money;
System.out.println("第"+i+"年本息和为:"+money);
}