导语:
循环结构:在某些条件满足的情况下,反复执行特定代码的功能。
循环语句的四个组成部分:
①初始化部分(init_statement)
②循环条件部分(test_exp)
③循环体部分(body_statement)
④迭代部分(alter_statement)
说明:通常情况下循环结束的原因是②返回了false。
一、循环结构之:for 循环
1、for循环结构:
for(①;②;④){
③
}
执行过程:①——②——③——④——②——③——④——...——②
经典例题:
1.遍历100以内的所有偶数,记录所有偶数的和并记录所有偶数的个数
int sum = 0;
int count = 0;
for(int i = 2;i<=100;i++){
if(i%2 ==0){
sum += i;
count++;
System.out.println(i);
}
}
System.out.println("和为:" + sum);
System.out.println("共有"+ count + "个偶数");
运行结果:
二、循环结构之:while 循环
1、while循环结构
①
while(②){
③
④
}
执行过程:①——②——③——④——②——③——④——...——②
说明:while循环一定要写迭代条件,如果不写迭代条件就有可能陷入死循环。
for循环和while循环总结:
1.开发过程中一般使用for循环和while循环实现。
2.while循环和for循环可以相互转化!
区别:for循环和while循环初始化定义的变量的作用范围不一样。
3.我们写循环,要避免出现死循环。
经典例题:遍历100以内的偶数
int i=1;
while(i<=100){
if(i%2 == 0){
System.out.print(i+" ");
}
i++;
}
运行结果:
三、循环结构之:do-while 循环
1、do-while循环结构
①
do{
③;
④;
}while(②);
执行过程:①——③——④——②——③——④——...——②
说明:
①do-while循环结构至少会执行一次③、④,俗称“先爽一次”
②开发中更多地使用for和while,较少使用do-while循环。
四、“无限循环”结构
1、for(;;){
}
2、while(true){
}
总结:如何结束一个循环结构?
1.循环结构中的循环条件返回false。
2.循环语句执行到break关键字。
五、嵌套循环
1、嵌套循环:
当把循环结构A放在循环结构B的循环体中,那么形成嵌套循环。
内层循环:循环结构A
外层循环:循环结构B
2、说明:
①当内层循环遍历一遍时,外层循环循环体只循环了一次。
②如果外层循环需要循环m次,内层循环需要循环n次,那么内存循环的循环体需要循环m*n次。
③外层循环控制行数,内层循环控制列数!
六、break关键字与continue关键字
适用范围 | 含义(不同点) | 相同点 | |
break | switch—case、循环结构 | 结束当前循环 | 关键字后不能声明语句 |
continue | 循环结构 | 结束当次循环 | 关键字后不能声明语句 |
for(int i = 1;i<=10;i++){
if(i%4==0){
continue;//123567910
//break;//123
//System.out.println("*********");//错误: 无法访问的语句
}
System.out.print(i);
}
label:for(int i= 1;i<=4;i++){
for(int j= 1;j<=10;j++){
if(j%4==0){
//break;//结束此关键字最近的一层循环
//continue;
//break label;//123
continue label;//123123123123
}
System.out.print(j);
}
System.out.println();
}
七、经典练习
1.控制台输出以下结果:
******
******
******
******
for(int i = 1;i<=4;i++){
for(int j = 1;j<=6;j++){
System.out.print("*");
}
System.out.println();
}
运行结果:
2. 控制台输出以下结果:
i(行号) j(*的个数)
* 1 1
** 2 2
*** 3 3
**** 4 4
***** 5 5
for(int i=1;i<=5;i++){
for(int j=1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
运行结果:
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
Scanner scan = new Scanner(System.in);
System.out.print("请输入第一个正整数:");
int m = scan.nextInt();
System.out.print("请输入第二个正整数:");
int n = scan.nextInt();
//获取最大公约数
//获取两个数中的最小值
int min = (m<=n)?m:n;
for(int i = min;i>=1;i--){
if(m%i==0 && n%i==0){
System.out.println(m+"和"+n+"的最大公约数为:"+i);
break;//结束循环
}
}
//获取最小公倍数
//获取两个数中的最大值
int max = (m>=n)?m:n;
for(int i=max;i<=m*n;i++){
if(i%m==0 && i%n==0){
System.out.println(m+"和"+n+"的最小公倍数为:"+i);
break;
}
}
运行结果:
4.从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
Scanner scan = new Scanner(System.in);
int positiveNumber = 0;
int nagetiveNumber = 0;
while(true){
System.out.print("请输入整数:");
int m = scan.nextInt();
if(m>0){
positiveNumber++;
}else if(m<0){
nagetiveNumber++;
}else{
break;
}
//System.out.println();
}
System.out.println("正数的个数为:"+positiveNumber);
System.out.println("负数的个数为:"+nagetiveNumber);
运行结果:
5、九九乘法表
for(int i = 1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}
运行结果:
6、输出1000以内的质数。
质数:是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
boolean isFlag = true;
for(int i = 2;i<=1000;i++){
for(int j = 2;j<i;j++){//优化可以让j<i/2 或者j<Math.sqrt(i)
if(i%j == 0){
isFlag = false;
break;
}
}
if(isFlag == true){
System.out.println(i);
}
isFlag = true;
}