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的使用场景:
- 在选择结构switch语句中
- 在循环语句中
-
break的作用:
跳出单层循环
跳出整个循环 -
continue的作用:
- 退出当前循环,开启下一次循环,也可带标签
- 控制跳转语句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;
}
}
}