(学习笔记)控制语句—— 循环结构
循环结构分为两大类:一类是当型,一类是直到型
• 当型:当布尔表达式条件为true时,反复执行某语句,当布尔表达式的值为false时才停止循环,比如:while与for循环
• 直到型:先执行某语句,再判断布尔表达式,如果为true,在执行某语句,如此反复,直到布尔表达式条件为false时才停止循环,比如do-while循环
while循环
语法结构:
while(布尔表达式){
循环体
}
- 在循环刚开始时,会计算一次“布尔表达式”的值,若条件为真,执行循环体。而对于后来的每一次额外的循环,都会在开始前重新计算一次。
- 语句中应有使循环趋向于结束的语句,否则会出现无限循环—“死”循环。
public class TestWhile {
public static void main(String[] args){
int i = 0;
int sum = 0;
//1+2+3+···+100=?
while(i <= 100){
sum += i;
i++;
}
System.out.println("Sum= "+sum);
}
}
do-while循环
语法结构:
do{
循环体
}while(布尔表达式);
- do-while循环结构会先执行循环体,然后在判断布尔表达式的值,若条件为真,执行循环体,当条件为假时结束循环。do-while循环体至少执行一次。
public class TestDoWhile {
public static void main(String[] args){
int i = 0;
int sum = 0;
do{
sum += i;
i++;
}while(i <= 100);
System.out.println("1~100相加的和为:" + sum);
}
}
while和do-while循环的区别
public static void main(String[] args){
//while循环:先判断在执行
int a = 0;
while(a<0){
System.out.println("while循环"+a);
a++;
}
System.out.println("~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~");
//d0-while循环:先执行在判断
do{
System.out.println("dowhile循环"+a);
}while(a<0);
}
输出:~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~
dowhile循环0
for循环
语法结构:
for(初始表达式;布尔表达式;迭代因子){
循环体;
}
- for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。for循环在第一次反复之前要进行初始化,即执行初始表达式;随后,对布尔表达式进行判定,若判定结果为true,则执行循环体,否则,终止循环;最后在每一次反复,进行某种形式的“步进”,即迭代因子。
- q初始化部分设置循环变量的初值
- q条件判断部分为任意布尔表达式
public class TestFor {
public static void main(String[] args){
int sum = 0;
for(int i=1;i<=100;i++){
sum += i;
}
/**
* 1.执行初始话语句:i=1;
* 2.判断i<=100
* 3.执行循环体
* 4.步进循环;i++
* 5.回到第二部继续判断
*/
System.out.println("值为:"+sum);
for(int n=1,m=n+10;n<5;n++,m=n*2){
System.out.println("n="+n+"\t"+"m="+m);
}
}
}
java里能用到逗号运算符的地方屈指可数,其中一处就是for循环的控制表达式。在控制表达式初始化和步进控制部分,我们可以使用一系列由逗号分割的表达式而且那些表达式均会独立执行。
无限循环
编译器把for(;;)与while(true)看作同一回事,都指的是无限循环
嵌套循环
在一个循环语句内部在嵌套一个或多个循环,称为嵌套循环。while,do-while与for循环可以任意嵌套多层
public class TestQianTao {
public static void main(String[] args){
for(int n=1;n<=5;n++){
for(int m=1;m<=5;m++){
System.out.print(n+"\t");
}
System.out.println();
}
System.out.println("~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~");
//打印99乘法表
for(int i=1;i<10;i++){
for(int j=1;j<=i;j++){
//System.out.print(j+"*"+i+"="+(i*j<10?(" "+i*j):i*j)+" ");
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
break语句和continue语句
在任何循环语句的主体部分,均可用break控制循环的流程。
break用于强行退出循环,不执行循环中剩余的语句
public class TestBreak {
public static void main(String[] args){
int total = 0;//定义计数器
System.out.println("Begin");
while(true){
total ++;//每循环一次计数器加1
int i = (int)Math.round(100 * Math.random());
System.out.println(i);
if(i == 88){
break;
}
}
//输出循环的次数
System.out.println("Game over,used" + total +"times");
}
}
continue语句用在循环语句体中,用于终止某次的循环过程,及跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
• continue用在while,do-while中,continue语句立刻跳到循环首部,越过了当前循环的其他部分
• continue用在for循环中 ,跳到循环的迭代因子部分
public class TestContinue {
public static void main(String[] args){
//把100~150之间不能被3整除的数输出,并且每行输出5个
int count = 0;//定义计数器
for(int i=100;i<150;i++){
//如果是3的倍数,则跳过本次循环,继续进行下一次循环
if(i%3==0){
continue;
}
//否则,输出该数
System.out.print(i+" 、 ");
count++;//每输出一个数,计数器加1
//根据计数器判断每行是否已经输出了5个数
if(count%5==0){
System.out.println();
count = 0;
}
}
}
}
带标签的break和continue
“标签”是指后面跟一个冒号的标识符,例如“label:”。对Java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是,我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们会中断到存在标签的地方。
public class TestLabelContinue {
public static void main(String[] args){
//打印101~150之间的质数
outer:for(int i =101;i < 150;i++){
for(int j = 2;j < i/2;j++){
if(i%j ==0){
continue outer;
}
}
System.out.print(i + "\t");
}
}
}