:当重复执行相同的代码或者是相似的代码时。
循环三要素:
1): 循环变量的声明:用于控制循环次数的循环因子
2): 循环条件: 用于判断是否执行相同或相似内容(循环体)的条件
3):循环变量的改变方向:
向着循环结束的方向改变。
(1)for循环:
语法:
for(变量的声明和初始化;循环条件;变量的改变方向){
循环体;
}
执行逻辑:
程序遇到for时,一定执行 变量的声明和初始化
然后执行循环条件的判断
如果为false,会跳过循环结构,执行后续代码。
如果为true,执行循环体,然后再执行变量的改变
再执行循环条件的判断,
.......
循环体:是要重复执行的相同或相似逻辑
break关键字:用在循环结构中时,表示结束/打断循环
continue关键字:用在循环结构中,表示结束当次循环体,继续
下一次循环
双层for循环
外层变量执行一次,内层变量执行一遍
或
外层变量控制行数,内层变量控制列数
经典案例,打印、等腰三角形和菱形
public static void main(String[] args){
/* 练习2: 打印等腰三角形
* i=0, j = 5
*** i=1, j = 4 5 6
***** i=2, j = 3,4,5,6,7
******* i=3, j = 2,3,4,5,6,7,8
********* i=4, j = 1~9
开始打印*时,j与i的关系
i+j = 5;
j>=5-i;
结束打印*时,j与i的关系
i+5 =j;
打印*的j的范围
j<=i+5;
* i=1, * 1 j = 4
*** i=2, * 3 j = 3;
***** i=3, * 5 j = 2;
******* i=4, * 7 j = 1;
********* i=5, * 9 j = 0
*的个数与行号的关系
count = 2*i-1;
打印空格的关系:
j <= 5-i;
*/
for(int i=0;i<5;i++){
for(int j = 0;j<9;j++){
if(j>=4-i&&j<=i+4){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
for(int i=1;i<6;i++){
for(int j=1;j<6-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
for(int i=0;i<5;i++){
for(int j=0;j<4-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
/* 打印菱形,找出j的位置与i的关系
* i=0 j=4
*** i=1 j=3,4,5
***** i=2 j=2,3,4,5,6,
******* i=3 j=1,2,3,4,5,6,7
********* i=4 j=0,1,2,3,4,5,6,7,8
******* i=5 j=1,2,3,4,5,6,7
***** i=6 j=2,3,4,5,6,
*** i=7 j=3,4,5
* i=8 j=4
上一部分:
j>=4-i;
j<=i+4;
下一部分:
j>=i-4;
j<=12-i;
*/
for(int i=0;i<9;i++){
if(i<5){
for(int j=0;j<9;j++){
if(j>=4-i&&j<=i+4){
System.out.print("*");
}else{
System.out.print(" ");
}
}
}else{
for(int j=0;j<9;j++){
if(j>=i-4&&j<=12-i){
System.out.print("*");
}else{
System.out.print(" ");
}
}
}
System.out.println();
}
/*第二种 找到龙哥与*号的关系,循环控制什么时候打红歌或者*
* i=0 *1 j=4
*** i=1 *3 j=3,4,5
***** i=2 *5 j=2,3,4,5,6,
******* i=3 *7 j=1,2,3,4,5,6,7
********* i=4 *9 j=0,1,2,3,4,5,6,7,8
******* i=5 *7 j=1,2,3,4,5,6,7
***** i=6 *5 j=2,3,4,5,6,
*** i=7 *3 j=3,4,5
* i=8 *1 j=4
上一部分:
i+j=4;
j<4-i;打印空格
count < 2*i+1;
下一部分:
i-4=j;
j<i-4;打印空格
count <17-2*i
*/
for(int i=0;i<9;i++){
if(i<5){
for(int j=0;j<4-i;j++){
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++){
System.out.print("*");
}
}else{
for(int j=0;j<i-4;j++){
System.out.print(" ");
}
for(int j=0;j<17-2*i;j++){
System.out.print("*");
}
}
System.out.println();
}
}
(2)while循环
语法:
while(循环条件){
循环体
}
执行逻辑:
当程序遇到while时,一定执行循环条件,
如果判断结果为false,就结束循环结构,执行后续代码
如果判断结果为true,就执行循环体,
然后再判断循环条件......
通常不会使用while,因为缺少变量的声明,初始化和变量的改变
一般多用在死循环,只有达成条件才可能结束,用于要多次输入
语法
while(true){
循环体
break;
}
(3)do-while循环
语法:
do{
循环体
}while(循环条件);
执行逻辑:当程序遇到do关键字时,一定先执行一次
循环体,然后再判断循环条件,
如果条件为false,结束循环结构,执行后续代码
如果条件为true,再执行一次循环体,
然后再判断条件的成立与否
........
while/do-while/for的区别:
while/do-while:适合不知道循环次数的逻辑
for:适合知道循环次数的逻辑
while/for一般先判断条件,再执行循环体
do-while:一定先执行一次循环体,再判断条件
小技巧:什么时候使用while,什么时候使用do-while
某些逻辑可以翻译成如下:
当......就执行.....:适合使用while
做.....直到.......:适合使用do-while