Java中的循环
理解:条件成立,就重复的执行某个功能
优点:解决代码的冗余
分类:
- for循环
- while循环
- do-while循环
1.for循环
语法结构:
for(表达式1;表达式2;表达式3){ ...代码块/循环体... }
理解:
表达式1——初始化变量
表达式2——判断条件(结果必须为Boolean)
表达式3——更新变量
执行步骤:
- 初始化变量
- 判断条件(结果必须为Boolean)
- true——执行代码块,再更新变量,最后重复第二个步骤
- false——跳出整个循环语句
eg:输出1~100的数字
for(int i = 1;i<=100;i++){ System.out.println(i); }
eg:输出1~100的奇数
for(int i = 1;i<=100;i+=2){ System.out.println(i); }
死循环:
for(;;){ System.out.println("死循环"); }
伪死循环:
for(int i = 0;i>=0;i++){ System.out.println("伪死循环"); }
eg:循环录入5个数字,输出总和
import java.util.Scanner; public class Test{ public static viod main(String[] args){ Scanner scan = new Scanner(System.in); int sum = 0;//累计总和 for(int i = 1;i<=5;i++){ System.out.println("请输入第" + i + "个数字:"); int num = scan.nextInt(); sum += num; } System.out.println("总和为:" + sum); } }
2.嵌套for循环
打印三角星
public class Test{
public static viod main(String[] args){
/**
需求1:打印以下图形
****
****
****
*/
for(int i = 0;i<3;i++){//外层循环控制行数
//System.out.println("****");
for(int j = 0;j<4;j++){//内层循环控制列数
System.out.print("*");
}
System.out.println();//换行
}
}
}
public class Test{
public static viod main(String[] args){
/**
需求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();
}
}
}
public class Test{
public static viod main(String[] args){
/**
需求3:打印以下图形
*****
****
***
**
*
*/
for(int i = 0;i<5;i++){
for(int j = 0;j<5-i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
public class Test{
public static viod main(String[] args){
/**
需求4:打印以下图形
*
***
*****
*******
*/
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++){
System.out.print("*");
}
System.out.println();
}
}
}
public class Test{
public static viod main(String[] args){
/**
需求5:打印以下图形
*
* *
* *
*******
*/
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();
}
}
}
九九乘法表
public class Test{
public static viod main(String[] args){
/**
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
*/
for(int i = 1;i<=9;i++){
for(int k = 1;k<i;k++){
System.out.print("\t");
}
for(int j = i;j<=9;j++){
System.out.print(i + "x" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
}
}
3.while循环
语法结构:
while(表达式){ ...代码块/循环体... }
理解:
表达式的结果必须是boolean true – 执行代码块
false - 跳出循环
eg: 张三每月存3000,每年递增1000元,多少个月后存满20万
public class Test{ public static viod main(String[] args){ int money = 3000; int allMoney = 0; int month = 0; while(allMoney < 200000){ month++; allMoney += money; if(month%12 == 0){ money += 1000; } } System.out.println(month + "个月后存满20万"); System.out.println(money); } }
4.do-while循环
语法结构:
do{ ...代码块/循环体... }while(表达式);
理解:
首先,先运行一遍代码块,在判断表达式
表达式的结果必须是boolean
true – 执行代码块
false – 跳出循环eg:张三参加学校组织的歌咏比赛,大赛在即,老师建议:先彩排一次,如果很令人满意,以后就不用了,
否则每天都排,直到现场表现满意为止!
import java.util.Scanner; public class Test{ public static viod main(String[] args){ Scanner scan = new Scanner(System.in); String str; do{ System.out.println("张三:旋转、跳跃..."); System.out.println("张三:老师,您满意了吗?"); str = scan.next(); }while(str.equals("不满意")); } }
5.万年历
import java.util.Scanner; public class Test05{ /** 知识点:万年历 需求:输入年和月,打印当月的日历 问题:不知道输入年的输入月的第一天是星期几? 线索:1900年1月1日 -- 星期一 思路: 获取1900年1月1日 到输入年输入月的总天数 总天数%7 获得输入年输入月的第一天是星期几 问题:怎么计算出总天数 思路: 把年和月拆分出来 先算1900~输入年的总天数 再算1月~输入月的总天数 */ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.println("请输入年份:");//2023 int year = scan.nextInt(); System.out.println("请输入月份:");//2 int month = scan.nextInt(); //获取年的总天数 int allDayOfYear = 0; for(int i = 1900;i<year;i++){ if(i%4==0 && i%100!=0 || i%400==0){//闰年 allDayOfYear += 366; }else{//平年 allDayOfYear += 365; } } //获取月的总天数 int allDayOfMonth = 0; for(int i = 1;i<month;i++){ switch(i){ case 1:case 3:case 5:case 7:case 8:case 10:case 12: allDayOfMonth += 31; break; case 4:case 6:case 9:case 11: allDayOfMonth += 30; break; case 2: if(year%4==0 && year%100!=0 || year%400==0){//闰年 allDayOfMonth += 29; }else{//平年 allDayOfMonth += 28; } break; } } //获取总天数 -- 获取到1900.1.1~输入年输入月的第1天的总天数 int allDay = allDayOfYear + allDayOfMonth + 1; //计算星期 int week = allDay%7; if(week == 0){//说明这是星期天 week = 7; } //获取当月的天数 int day = 0; switch(month){ case 1:case 3:case 5:case 7:case 8:case 10:case 12: day = 31; break; case 4:case 6:case 9:case 11: day = 30; break; case 2: if(year%4==0&&year%100!=0 || year%400==0){//闰年 day = 29; }else{//平年 day = 28; } break; } //打印日历 System.out.println("---" + year + "年" + month + "月---"); System.out.println("一\t二\t三\t四\t五\t六\t日"); int count = 0; //打印空格 for(int i = 1;i<week;i++){ System.out.print("\t"); count++; } //打印日期 for(int i = 1;i<=day;i++){ System.out.print(i + "\t"); count++; if(count % 7 == 0){ System.out.println(); } } } }