第7章 三种循环
循环就是一遍又一遍的执行代码
01 作业回顾
02 while循环
while循环,先检查条件表达式的结果是否为true
如果条析表达式的结果为true,那么就执行循环代码快
当条件表达式结果为false,循环终止
int count = 0;
while (count < 5) {
// while循环,先检查条件表达式的结果是否为true
// 如果条析表达式的结果为true,那么就执行循环代码快
// 当条件表达式结果为false,循环终止
System.out.println(" *");
System.out.println(" ***");
System.out.println(" *****");
System.out.println("*******");
System.out.println(" *****");
System.out.println(" ***");
System.out.println(" *");
count++; //设置循环条件, 能循环5次
// System.out.println(count);
}
发现的一个小例子,没有终止语句而造成的无限循环
public class day052 {
public static void main(String[] args) {
int count = 0;
while (count < 5) {
System.out.println(" *");
System.out.println(" ***");
System.out.println(" *****");
System.out.println("*******");
System.out.println(" *****");
System.out.println(" ***");
System.out.println(" *");
}
}
}
小例子:
int count = 0;
while(count < 5){
System.out.println(count);
count++;
}
/*输出
0
1
2
3
4*/
例3
int x = 5;
while(x < 5){
System.out.println(x);
x++;
}
//什么也不输出
例4
int x = 5;
while(x < 5) {
System.out.println(x);
x--;
}
//什么也不输出
例5 打印从100~1
int a = 100;
while(a > 0){
System.out.println(a);
a--;
}
例6 从1~100
//从1~100
int a = 1;
while(a <= 100){
System.out.println(a);
a++;
}
也可写为:
//从1~100的另一种写法
int a = 1;
while(a <= 100) {
System.out.println(101-a);
a++;
}
03 do while循环
//do while循环先执行代码块,然后再检查条件是否满足
//do while循环至少会执行一次
//do while循环先执行代码块,然后再检查条件是否满足
//do while循环至少会执行一次
int count = 0;
do {
System.out.println(count);
count++;
} while( count < 5 );
/*
* 0
* 1
* 2
* 3
* 4
*/
例2
int count = 5;
do {
System.out.println(count);
count++;
}while(count < 5 );
//输出 5
04 for循环
//for循环包括三个部分
//初始化语句,int i = 0; 只执行一次
//条件表达式,i < 5; 每次执行代码块之前,都要检查条件表达式结果是否为true
//操作语句,i++; 每次代码块执行结束后,都要执行操作语句
for循环例1:
int x = 0;
while(x < 5) {
System.out.print(x);
x++;
}
//01234
System.out.println();//换行
//for循环包括三个部分
//初始化语句,int i = 0; 只执行一次
//条件表达式,i < 5; 每次执行代码块之前,都要检查条件表达式结果是否为true
//操作语句,i++; 每次代码块执行结束后,都要执行操作语句
for(int i = 0; i < 5; i++){
System.out.print(i);
}
//01234
System.out.println();//换行
for (int j = 9; j > 0 ; j--) {
System.out.print(j);
}//987654321
2. 循环的嵌套
//循环的嵌套
for(int i = 0; i < 3; i++){
System.out.println("开始内层循环");
for(int j = 0; j < 4; j++){
System.out.println("i = " + i +",j = " + j);//i = 0,j = 0
}
System.out.println("结束内层循环");
//一共输出几行,每行都是什么
}
开始内层循环
i = 0,j = 0
i = 0,j = 1
i = 0,j = 2
i = 0,j = 3
结束内层循环
开始内层循环
i = 1,j = 0
i = 1,j = 1
i = 1,j = 2
i = 1,j = 3
结束内层循环
开始内层循环
i = 2,j = 0
i = 2,j = 1
i = 2,j = 2
i = 2,j = 3
结束内层循环
05 嵌套的for循环
例
假期作业是将1~3课的课文抄写一遍
做4次假期作业
第1次假期作业,第1课。
第1次假期作业,第2课。
第1次假期作业,第3课。
第2次假期作业,第1课。
第2次假期作业,第2课。
第2次假期作业,第3课。
第3次假期作业,第1课。
第3次假期作业,第2课。
第3次假期作业,第3课。
第4次假期作业,第1课。
第4次假期作业,第2课。
第4次假期作业,第3课。
//循环的嵌套
for(int i = 1; i <= 4; i++){
System.out.println("第"+ i + "次假期作业开始");
for(int j = 1; j <= 3; j++){
System.out.println("第 " + j +"次课文");
}
System.out.println("第" + i + "次假期作业结整束");
}
第1次假期作业开始
第 1次课文
第 2次课文
第 3次课文
第1次假期作业结整束
第2次假期作业开始
第 1次课文
第 2次课文
第 3次课文
第2次假期作业结整束
第3次假期作业开始
第 1次课文
第 2次课文
第 3次课文
第3次假期作业结整束
第4次假期作业开始
第 1次课文
第 2次课文
第 3次课文
第4次假期作业结整束
06 break语句
- break语句可以使循环终止
for (int i = 0; i < 10; i++) {
System.out.println(i);
if(i == 5) {
break;
}
}
//012345
//上面的for本来应该执行10次,当时当i==5时,因为有break语句,导致循环提前终止
- break语句也可以再while循环中使用
int x = 0;
while( x < 10 ) {
System.out.println(x);
if(x == 5) {
break;
}
x++;
}
//012345
- break语句只会终止当前循环
//break语句只会终止当前循环
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 10; j++) {
System.out.print(i + "" + j + ",");
if(j == 5) {
break;
}
}
System.out.println();
}
//00,01,02,03,04,05,
//10,11,12,13,14,15,
07 continue语句
- continue语句会跳过循环代码后续的语句,并开始进行下一个迭代
//continue语句会跳过循环代码后续的语句,并开始进行下一个迭代
for (int i = 0; i < 10; i++) {
if(i == 5) {
continue;
}
System.out.print(i);
}
//012346789
//上面的for本来应该执行10次,但是当i==5时,因为有continue语句,导致print语句没有执行,接着执行下一个迭代。
2. continue语句也可以再while循环中使用
int x = 0;
while (x < 10) {
x++;
if (x == 5) {
continue;
}
System.out.print(x);
}
//01234678910
- continue语句只会对当前循环起作用
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 10; j++) {
if(j == 5) {
continue;
}
System.out.print(i + "" + j + ",");
}
System.out.println();
}
//00,01,02,03,04,06,07,08,09,
//10,11,12,13,14,16,17,18,19,
08 练习
- 求1~100的和。
//1.求1~100的和。
int total = 0; //
for (int i = 1; i <= 100; i++) {
total = total + i;
}
System.out.println(total);
- 打印1~100的偶数。
for(int i = 1; i <= 100; i++) {
if( i % 2 == 0 ){
System.out.println(i);
}
}
- 两个正整数m和n,求其最大公约数和最小公倍数。
Scanner s = new Scanner(System.in);
int m = s.nextInt();
int n = s.nextInt();
int min = m < n ? m : n;//最小数
int max = m < n ? n : m;//最大数
for (int i = min; i > 0; i--) {
if((m % i == 0) && (n % i == 0)) {
System.out.println("最大公约数是" + i);
break;
}
}
for (int i = max; i <= m * n; i++) {
if((i % m == 0 ) && (i % n == 0)) {
System.out.println("最小公倍数是" + i);
break;
}
}
s.close();
tip:
公式:
最小公倍数=两个数的乘(TUXV)积除以最大公约数.
- 打印1~100之间的数,其中3,5,7的倍数不打印。
for (int i = 1; i <= 100; i++) {
if((i % 3 ==0) || (i % 5 == 0) ||(i % 7 == 0)) {
continue;
}
System.out.println(i);
}