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(表达式){ ...代码块/循环体... }
理解:
表达式的结果必须是booleantrue – 执行代码块
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();
}
}
}
}