1、for循环
好处:解决代码的冗余
语法结构:
for(表达式1;表达式2;表达式3){
...代码块/循环体...
}
理解:
表达式1 -- 初始化变量
表达式2 -- 判断条件
表达式3 -- 更新变量
执行步骤:
1.初始化变量
2.判断条件(结果必须是boolean类型)
true - 执行代码块,更新变量,重复第2个步骤
false - 跳出整个循环语句//需求1:打印1~10的奇数数字 for(int i = 1;i<=10;i+=2){ System.out.println(i); } //需求2:打印10~1的偶数数字 for(int i = 10;i>=1;i-=2){ System.out.println(i); }
小结:
1.初始化变量不一定从0开始,设置为1或者10都是可以的,需要根据需求灵活变换
2.更新变量不一定++,设置为+=2、--、-=2都是可以的,需要根据需求灵活变换
for循环特殊结构:
int i = 0;
for(;i<5;){
System.out.println("数字 -- " + i);
++i;//等同于:i++;//在更新变量中写i++和++i没有区别
}
System.out.println(i);//5
死循环(永远跳不出的循环):
for(;;){
System.out.println("死循环");
}//上面就是死循环了,永远跳不出来了,程序根本没有机会向下执行
伪死循环:
for(int i = 5;i>2;i++){
System.out.println("伪死循环");
}//伪死循环:int类型它是有取值范围的,一直加到 21 亿 4 千七百多万,再加就是负的了
案例:循环录入5次int类型的数字,输出最大值
Scanner scan = new Scanner(System.in); //假设第一个数字为最大值 System.out.println("请输入第1个数字:"); int max = scan.nextInt(); for(int i = 2;i<=5;i++){ System.out.println("请输入第" + i + "个数字:"); int num = scan.nextInt(); if(max < num){ max = num; } } System.out.println("最大值为:" + max);
注意:在循环中声明的变量,其作用域只能在循环中使用
2、for循环嵌套
需求1:打印以下图形
****
****
****
for(int i = 0;i<3;i++){//控制行数
for(int j = 0;j<4;j++){//控制列数
System.out.print("*");
}
System.out.println();//换行
}
需求2:打印以下图形
* i=0
** i=1
*** i=2
**** i=3
***** i=4
for(int i = 0;i<5;i++){
for(int j = 0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
需求3:打印以下图形
*
**
***
****
*****
for(int i = 0;i<5;i++){
for(int k = 0;k<4-i;k++){
System.out.print(" ");
}
for(int j = 0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
需求4:打印以下图形
*****
****
***
**
*
for(int i = 0;i<5;i++){
for(int j = 0;j<5-i;j++){
System.out.print("*");
}
System.out.println();
}
需求5:打印以下图形
*****
****
***
**
*
*
for(int i = 0;i<5;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 0;j<5-i;j++){
System.out.print("*");
}
System.out.println();
}
需求6:打印以下图形
*
***
*****
*******
for(int i = 0;i<4;i++){
for(int k = 0;k<3-i;k++){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){//i*2+1:奇数
System.out.print("*");
}
System.out.println();
}
需求7:打印以下图形
*
* *
* *
*******
for(int i = 0;i<4;i++){//行
for(int k = 0;k<3-i;k++){//列
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){//行
//第一行 || 最后一行 || 第一列 || 最后一列
if(i==0 || i==3 || j==0 || j==i*2){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
需求8:打印以下图形
*******
*****
***
*
for(int i = 0;i<4;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 0;j<7-i*2;j++){
System.out.print("*");
}
System.out.println();
}
需求9:打印以下图形
*******
* *
* *
*
for(int i = 0;i<4;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 0;j<7-i*2;j++){
//第一行 || 最后一行 || 第一列 || 最后一列
if(i==0 || i==3 || j==0 || j==7-i*2-1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}