4.循环

4.1 while循环

  • while循环语句格式
    1
while(循环继续条件){
循环体语句
}

2

循环初始化语句
while(循环继续条件){
循环体语句
步长

注意

  • 保证循环继续条件最终变为false,使程序结束
  • 在命令窗口运行程序,若产生无限循环,按Ctrl+c结束
  • 差一错误(期望输出100次)
int count=0;
while(count<=100){//实际输出101次,应改为count<100
	System.out.println("HALLO,WORLD");
	count++;
}
  • while循环结构
    在这里插入图片描述

  • 使用标记值控制循环

  • 输入输出重定向

输入重定向:java SentinelValue < input.txt
若要输入大量数据,可将这些数据用空格隔开,保存在一个input.txt文本文件中,用命令运行这个程序

输出重定向:java ClassName > output.txt
将输出发送给文件output.txt

可在同一命令中同时使用输入输出重定向
eg:从input.txt获得输入,将输出发送给output.txt
java SentinelValue <input.txt> output.txt
练习:

/*
找出n*n大于12000的最小正整数,n*n*n小于12000的最大整数

数据:
n,i
操作:
1. n=1,i=1;
2. while循环,n++,找n^2<12000的数,输出n(n^2>12000的正整数)
3. while循环,i++,找n^3<12000的数,输出i-1(i^3<12000的数)

*/
class For3_14{
	public static void main(String[] args){
		int n=1;
		while(n*n<12000){
			n++;
		}
		System.out.println("n^2大于12000的最小正整数:"+n);
		
		int i=1;
		while(i*i*i<12000){
			i++;
		}
		System.out.print("n^3小于12000的最大正整数:"+(i-1));
	}
}

4.2 do-while循环

  • do-while循环语句格式
do{
	//循环体
	语句;
}while(循环继续条件)
  • do-while循环结构循环体至少执行1次
    在这里插入图片描述
    先执行循环体,然后计算循环继续条件,若为true,继续执行循环体,若为false,终止循环

4.3 for循环

  • for循环语句格式:
for(初始化语句;继续条件;步长){
	循环体;
}
  • 执行流程:
    A.执行初始化语句(只执行1次
    B.执行继续条件判断
    如果是true,继续执行
    如果是false,循环结束
    C.执行循环体语句
    D.执行步长
    E.回到B继续
  • for循环结构
    -在这里插入图片描述
    注意
  • 控制变量必须在循环控制结构体内或循环前说明
  • 若循环控制变量只在for循环内使用,可在初始化动作中声明它,循环外不能引用它
  • for循环中的初始动作可以是0或多个以,隔开的变量声明语句或赋值表达式
for(int i = 0,int j = 1;i+j<10;i++.j++){
.......
}

for循环中隐含的循环继续条件是true,下面是无限循环
在这里插入图片描述
练习:打印空心菱形

/*
                        i         j
        *               1         1
       * *              2        1 2
      *   *             3       1 2 3
     *     *            4      1 2 3 4
    *       *           5     1 2 3 4 5
     *     *            6      1 2 3 4
      *   *             7       1 2 3
       * *              8        1 2
        *               9         1


*/	class test{
	public static void main(String[] args){
		for(int i=1;i<=9;i++){
			//空格
			for(int k=1;k<=Math.abs(i-5);k++){ 
				System.out.print(" ");
			}
			//*
			for(int j=1;j<=i&&j+i<=10;j++){
				if(j==1||j==i||i+j==10){//满足1个条件即可输出*
					System.out.print("* ");
				}else{                  //否则输出空格
					System.out.print("  ");
				}
			}
			System.out.println();
		}
	}
}

4.4 循环结构while语句和for语句的区别

for循环语句和while循环语句可以等价转换
最大区别:

  • for循环针对一个范围判断进行操作
  • while循环适合判断次数不明确操作

4.5 关键字break和continue

  • break的使用场景
  1. 在选择结构switch语句中
  2. 在循环语句中
  • break的作用
    跳出单层循环
    跳出整个循环

  • continue的作用:

  1. 退出当前循环,开启下一次循环,也可带标签
  • 控制跳转语句return
    return关键字不是为了跳转出循环体,更常用的功能是结束一个函数,也就是退出一个方法。
    跳转到上层调用的方法。
    本质上就是结束当前函数。

练习:输出2~1000之间的素数

/*
显示2~1000之间的素数
1. 循环显示2~1000的数i,定义count=0;
2. 判断每个数是否可以被2~(i/2)整除
3. 不能整除的输出,count+1;
4. count%8==0;换行
*/
class For3_18{
	public static void main(String[] args){
		int count=0;
		boolean flag=true;//true代表是素数的数
		for(int i=2;i<=1000;i++){
			for(int j=2;j<=(i/2);j++){
				if(i%j==0){//不是素数
					flag=false;//false代表不是素数
					break;     //跳出内循环
				}
			}
			//flag=true,是素数时
			if(flag==true){
				System.out.printf("%4d",i);
				count++;
					if(count%8==0){
						System.out.println();
					}
			}
			//将不是素数的flag值由false换成true,
			//使程序继续进行
			flag=true;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43498251/article/details/86619354