代码执行顺序之循环执行
循环执行的分类
for
循环while
循环dowhile
循环
for循环
语法:
for(循环初始化表达式;循环条件表达式;循环后的操作表达式){
// 循环体
}
执行步骤分析:
-
循环初始化表达式最先执行,并且只执行一次
-
当循环条件表达式为
true
时,则执行循环体当循环条件表达式为
fasle
时,则跳出循环,执行循环外的语句 -
当循环体执行完毕,立刻执行循环后的操作表达式
-
当循环后的操作表达式执行完毕,立刻执行循环条件表达式,判断成不成立
画图分析:
总结:
-
循环初始化表达式中声明的变量,称为循环变量
-
循环条件表达式返回结果必须是
boolean
类型,如果省略循环条件表达式,默认值为ture
-
循环初始化表达式和循环后的操作表达式没要求,语法编译能通过即可
代码展示:
public class ForTest{public static void main(String[] args){int i = 0;for(System.out.println("A");i < 3;System.out.println("C")){System.out.println("B");}} }
代码展示:
public class ForTest{public static void main(String[] args){for(int i = 1,j = 5;j > -1;i += 2,j -= 3){System.out.println("i = " + i + "j = " + j);}} }
练习:
-
输出[1,100]之间的所有整数
代码展示:
public class ForTest{public static void main(String[] args){for(int i = 1;i <= 100;i++){System.out.println(i);}} }
-
输出0(包含)到100(包含)之间的数, 分别以递增和递减的方式实现
代码展示:
public class ForTest{public static void main(String[] args){// 递增for(int i = 0;i<=100;i++){System.out.println(i);}// 递减for(int i = 100;i>=0;i--){System.out.println(i);}} }
-
输出1到100之间的奇数和偶数;
代码展示:
public class ForTest{public static void main(String[] args){for(int i = 1;i <= 100;i++){if(i % 2 == 0){continue;}System.out.println("奇数i = " + i);}for(int i = 2;int i <= 100;i+=2){System.out.println("偶数i = " + i);}} }
-
输入一个正整数n,计算1+2+3+…+n的和
代码实现:
public class ForTest{public static void main(String[] agrs){java.util.Scanner input = new java.util.Scanner(System.in);System.out.print("请输入一个正整数:");int n = input.nextInt();int sum = 0;for(int i = 1;i<=n;i++){sum += i;}System.out.println(sum);} }
-
输入一个正整数n,计算1-2+3-4+5-6+…-(n-1)+n的和
代码展示:
public class ForTest{public static void main(String[] args){java.util.Scanner input = new java.util.Scannner(System.in);System.out.print("请输入一个正整数:");int n = input.nextInt();int sum = 0;for(int i = 1;i<=n;i++){if(i % 2 == 0){sum -= i;}else{sum += i;}}System.out.println(sum);} }
-
输出1到1000之间既能被5整除又能被3整除的数,并且每行输出5个。
代码展示:
public class ForTest{public static void main(String[] args){int count = 0;for(int i = 1;i<=1000;i++){if(i % 5 == 0 && i % 3 == 0){System.out.print(i + "\t");count++;if(count % 5 == 0){System.out.println();}}}} }
-
请问以下代码执行完,循环后i的值是多少?
public class ForTest{public static void main(String[] args){int i = 1;for(;i <= 3;i++){System.out.println(i);}System.out.println(i); // 4} }
答:循环后的i的结果是4
while循环
语法:
while(循环条件表达式){
// 循环体
}
执行:
- 判断循环条件表达式是否成立,如果成立就执行循环体,否则跳出循环,执行循环外的语句
- 当循环体执行完毕,再次去判断循环条件表达式是否成立
注意:循环后的操作表达式放在循环体前|后有本质区别,使用时一定切忌
代码展示:
public class ELTest{public static void main(String[] args){int i = 1;while(i<=10){System.out.println(i);i++;}}
}
代码展示
public class ELTest{public static void main(String[] args){int i = 1;while(i <= 10){i++;System.out.println(i);}}
}
练习:
-
输出1到1000之间既能被5整除又能被3整除的数,并且每行输出5个
代码展示:
public class ElTest{ public static void main(String[] args){int count = 0;int i = 1;while(i<=1000)){if(i % 5 == 0 && i % 3 == 0){System.out.println(i + "\t");count++;if(count % 5 ==0){System.out.println();}}i++;} }}
dowhile
循环
语法:
do{
// 循环体
}while(循环条件表达式);
注意:“循环后的操作表达式”在“循环体”的前|后面有本质区别,谨慎使用
实例:类似生活中的先学习后考试,考试通过才能到下一阶段学习
while
和dowhile
循环的区别
:
while
:先判断后执行,循环体可能一次也不会执行
dowhile
:先执行后判断,循环体至少会被执行一次
循环执行的总结
:
for循环最常用,while其次,dowhile
几乎不用
循环需要循环变量
- 循环变量需参与运算,
一定
要设置好初始值 - 循环变量不需要参与运算,只用于控制循环次数
死循环不需要循环变量
代码展示:
public class DoWhileTest{public static void main(String[] args){int i = 1;do{System.out.println(i);i++;}while(i <= 10);}
}
练习:
-
输入[1,100]间的所有正整数
代码展示:
public class ShowNumTest{public static void main(String args[]){int i = 1;do{System.out.println(i);i++;}while(i<=100);} }
关于死循环的讲解
死循环:循环体始终执行,终止不了程序的运行
死循环的分类:
- 对程序
有害
的死循环 - 对程序
有利
的死循环
对程序有害
的死循环:
起因:每趟循环执行完毕都离循环的终止条件越来越远,属于逻辑错误
代码展示:
public class ForTest{public static void main(String[] args){for(int i = 1;i<=100;i--){System.out.println(i);}}
}
对程序有利
的死循环:
需求:不明确循环次数时,可使用死循环
注意:死循环一般配合break关键字使用
代码展示:
public class Test{public static void main(String[] args){int i = 0;do{i++;if(i == 3){break;}System.out.println(i);}while(i < 10);}
}
死循环的用法
针对for循环的死循环,省略“循环条件表达式”,默认为true(使用较少
)
语法:
for( ; ;){
// 循环体
}
代码展示:
public class ForTest{public static void main(String[] args){for(;;){System.out.println("哈哈");}}
}
针对while循环的死循环,可读性强,语法便捷(最常用
)
语法:
while(true){
// 循环体
}
代码展示:
public class WhileTest{public static void main(String[] args){while(true){System.out.println("嘻嘻");}}
}
break关键字(最常用)
使用场合:
- 循环(for、while{} 、do{}while();)
- switch语句
作用:
- 若作用于switch语句,用于结束switch语句,执行switch语句外的代码
- 若作用于循环,用户结束当前循环,执行循环外的语句
代码展示:
// Switch
public class SwitchTest{public static void main(String[] args){java.util.Scanner input = new java.util.Scanner(System.in);int month = input.nextInt();switch(month){case 1:case 2:case 12:System.out.println("冬季");break;case 3:case 4:case 5:System.out,println("春季");break;case 6:case 7:case 8:System.out.println("夏季");break;case 9:case 10:case 11:System.out.println("秋季");break;default:System.out.println("季节不存在");}}
}
// for
public class ForTest{public static void main(String[] args){for(int i = 1;i<=10;i++){if(i == 3){break;}System.out.println(i);}System.out.println("over");}
}
// dowhile
public class DowhileTest{public static void main(String[] args){int i = 0;do{i ++ ;if(i == 3){break;}System.out.println(i);}while(i <= 9);}
}
// while
public class WhileTest{public static void main(String[] args){int i = 0;while(i<=9){i++;if(i==3){break;}System.out.println(i);}System.out.println("over");}
}
注意:break作用于离其最近的循环语句|switch语句
画图分析:
return关键字
使用场合:
只能
在方法中使用
作用:
结束当前方法
return
和break
区别:
break
可用于结束当前
循环,循环后的代码会正常执行
return
用于结束当前
方法,循环后的代码将不会 被执行
代码展示:
public class ReturnTest{public static void main(String[] agrs){for(int i = 0;i< 9 ;i++){if(i == 3){return;}System.out.println(i);} System.out.println("over");}
}
注意:在return
&break
之后不要书写任何代码,因为这些代码是死代码,永远不会被执行
练习:
-
韩信点兵,三人一组余两人,五人一组余三人,七人一组余四人,请问需要多少士兵?
代码展示:
public class ForTest{ public static void main(String[] args){for(int i = 1;;i++){if( i % 3 == 2 && i % 5 == 3 && i % 7 == 4){System.out.println("韩信点兵需要的人数为"+ i);break;}}} }
总结:“死循环”一般和“break”关键字一起使用,当不明确循环次数时,建议直接使用死循环
-
输入一个任意整数,判断它是否为质数,如果是质数就输出“是质数”,否则输出‘不是质数’。
质数:除了1和它本身之外,不能被其他数整除的正整数称质数。
代码展示:
// 方式一: public class MethodOne{public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个正整数:");int num = input.nextInt();boolean flag = true;for(int i = 2;i< num;i++){if(num % i == 0){flag = false;break;}}if(flag){System.out.println("num 是一个质数,num = " + num);}else{System.out.println("num不是一个质数,num = " + num);}} }
// 方式二: public class MethodTWo{ public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个正整数:");int num = input.nextInt();int i = 2;for(;i < num;i++){if(num % i == 0){break;}}if(num == i){System.out.println("num 是一个质数,num = " + num);}else{System.out.println("num不是一个质数,num = " + num);} } }
continue关键字(使用较少
)
作用:
结束
当次
或本次
循环,继续
执行下一次
循环
使用场合:
只能
在循环中使用
注意:在return、continue和break之后,不要写代码,因为这些是死代码,永远不会执行
代码展示:
public class ContinueTest{public static void main(String[] args){for(int i = 0;i<=10;i++){if(i == 2){continue;}System.out.println(i);}}
}
public class ContinueTest{public static void main(String[] args){int i = 10;while(i<=20){if(i==15){continue;}System.out.println(i);i++;}}
}
画图分析:
练习:
-
使用continue关键字实现输出1到100之间能被5整除的数
代码展示:
public class ContinueTest{public static void main(String[] args){if(int i = 1; i <= 100;i++){if(i % 5 != 0){continue;} System.out.println(i);}} }
嵌套循环
特点:外出循环变量变化一次,内侧循环的循环变量完整执行一整遍
注意:外侧循环用来控制行数,内侧循环用来控制空格数和星星数
练习:
-
在控制台先打印矩形
如图所示:
代码展示:
public class Demo{public static void main(String[] args){for(int i = 0;i < 3;i++){for(int j = 1;j < 10;j++){System.out.prnt("*")}System.out.println();}} }
-
打印平行四边形
如图所示:
代码展示:
public class Test{public static void main(String[] args){for(int i = 0;i < 4;i++){// 内侧循环:用来控制空格数for(int j = 0;j < i;j++){System.out.print(" ");}// 内侧循环:用来控制星星数for(int j = 0;j < 9;j++){System.out.print("*");}System.out.println();}} }
-
打印等腰三角形
如图所示:
代码展示:
import java.util.Scanner; public class DouleLoopTest{public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入行数");int num = input.nextInt();// 外侧循环用来控制行数for(int i = 0;i<num;i++){// 内侧循环用来控制空格数for(int j = 0;j< num - i - 1;j++){System.out.print(" ");}// 内侧循环用来控制星星数for(int j = 0;j < 2 * i + 1;j++){System.out.print("*");}System.out.println();}} }
-
打印菱形
如图所示:
代码展示:
import java.util.Scanner; public class DoubleLoopTest{public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.print("请输入菱形的行数:");int length = input.nextInt();// 外侧循环 : 用来控制行数for(int i = 0;i < length / 2 + 1; i++){// 内侧循环1:用于控制空格数for(int j = 0; j < length/2+1 - i - 1; j++) {System.out.print(" ");}// 内侧循环2:用于控制星星数for(int j = 0; j < 2 * i + 1; j++) {System.out.print("*");}System.out.println();}// 外侧循环用来控制行数for(int i = 0;i < length / 2;i++){// 内侧循环用来控制空格数for(int j = 0;j < i + 1;j++){System.out.print(" ");}// 内侧循环用来控制星星数for(int j = 0;j < 2 * (length / 2 - i -1) + 1;j++){System.out.print("*");}System.out.println();}} }
-
打印空心菱形
如图所示:
代码展示:
import java.util.Scanner; public class DoubleLoopTest{public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入菱形的行数:");int length = input.nextInt();for(int i = 0 ;i < length / 2 + 1;i++){for(int j = 0;j < length / 2 + 1 - i - 1;j++){System.out.print(" ");}for(int j = 0;j < 2 * i + 1;j++){if(j == 0 || j == 2 * i){System.out.print("*");}else{System.out.print(" ");}}System.out.println();}for(int i = 0; i < length / 2 ;i ++ ){for(int j = 0;j < i + 1;j++){System.out.print(" ");}for(int j = 0;j < 2 * (length/2-i-1) + 1;j++){if(j == 0 || j == 2 * (length/2-i-1)){System.out.print("*");}else{System.out.print(" ");}}System.out.println();}} }
-
打印乘法口诀表
如图所示:
代码展示:
public class NineNineTable {public static void main(String[] args) {// 打印九九乘法口诀表// 外侧循环控制行数for(int i = 1;i <= 9;i++){ for(int j = 1 ;j <= i;j++){System.out.print(j+ "*" + i + "=" + (j*i)+"\t");}System.out.println();}} }
-
输入[0,9]之间的一个数,输出数字构成的1~5位整数的和,如输入2,则计算出2 + 22 + 222 + 2222 + 22222之和
代码展示:
import java.util.Scanner; public class DoubleLoopTest01 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("请输入[0,9]之间的整数:");int num = input.nextInt();int result = 0;int sum = 0;for(int i = 0;i < 5;i++){result *= 10;result += num;sum += result;}System.out.println(sum);} }
-
搬砖问题:36块砖,36个人搬,男搬4块,女搬3块,两个小孩搬1块,要求一次搬完,问需要男、女、小孩各多少人?
代码展示:
public class DoubleLoopTest01{public static void main(String[] args){for(int x = 0;x < 9 ;x++){for(int y = 0 ;y < 12;y++){for(int z = 0;z < 36;z += 2){if(x+y+z == 36 && x * 4 + y * 3 + z / 2 == 36){System.out.println("男人:" + x + " 女人:" + y + " 小孩:" + z);}}}}} }
此文章于11月25日编辑完毕,小编也是个初学者,或许有些内容写的有错误的,我对自己的要求是:有错改之,无错加勉。还望大家能在评论区指点迷津,不胜感激,同时也希望大家口下留情!!
-