说明
嵌套循环,就是在外部循环内,还有内部循环,如下:
for(){ // 外部循环
for(){ // 内部循环
}
}
案例
使用嵌套循环,打印1-12月,并且打印每个月的日期,如下图:
难点:
- 每行显示7天
- 分大小月,大月的最后一天是31号,小月的最后一天是30号
- 分闰年,闰年2月份的最后一天是29号,否则是28号
简单实现
打印1-12月,并且打印每个月的日期(假设每个月的最后一天是30号),如下图:
// 外部循环,是循环打印1-12月
for( var m = 1;m<=12;m++){
console.log(m + "月")
// 内部循环,循环打印1-30号
for(var d = 1;d<=30;d++){
console.log("\t",d+"日")
}
}
进一步完善
打印1-12月,并且打印每个月的日期(假设每个月的最后一天是30号),每7天换行,如下图:
for( var m = 1;m<=12;m++){
console.log(m + "月")
// 内部循环,循环打印1-30号
var line = "\t"
for(var d = 1;d<=30;d++){
// 拼接日期
line = line + d + "\t"
// 每7天做一次打印
if(d%7 == 0){
console.log(line)
line = "\t"
}
// 到最后一天,将剩下的(不足7天的打印出来)
if(d==30){
console.log(line)
line = "\t"
}
}
}
进一步完善
除了2月份,每个月的最后一天是真实的,如下图:
for( var m = 1;m<=12;m++){
console.log(m + "月")
// 内部循环,循环打印1-30号
var line = "\t"
/*
* 判断每个月的后一天,
* 如果是1月份,最后一天是31
* 如果是2月份,最后一天是。。。
* 如果是3月份,最后一天是31
* 如果是4月份,最后一天是30
* 如果是5月份,最后一天是31
* 如果是6月份,最后一天是30
* 如果是7月份,最后一天是31
* 如果是8月份,最后一天是31
* 如果是9月份,最后一天是30
* 如果是10月份,最后一天是31
* 如果是11月份,最后一天是30
* 如果是12月份,最后一天是31
*/
var lastDay = 31
if(m == 4 || m == 6 || m == 9 || m == 11){
lastDay = 30
}else if(m == 2){ // 2月份,判断闰年
lastDay = 28
}else{
lastDay = 31
}
for(var d = 1;d <= lastDay ;d++){
// 拼接日期
line = line + d + "\t"
// 每7天做一次打印
if(d%7 == 0){
console.log(line)
line = "\t"
}
// 到最后一天,将剩下的(不足7天的打印出来)
if(d == lastDay){
console.log(line)
line = "\t"
}
}
}
处理闰年
判断闰年,闰年2月的最后一天是29号,否则是28号
var year = 2023
console.log(year+"年")
for( var m = 1;m<=12;m++){
console.log(m + "月")
// 内部循环,循环打印1-30号
var line = "\t"
/*
* 判断每个月的后一天,
* 如果是1月份,最后一天是31
* 如果是2月份,最后一天是。。。
* 如果是3月份,最后一天是31
* 如果是4月份,最后一天是30
* 如果是5月份,最后一天是31
* 如果是6月份,最后一天是30
* 如果是7月份,最后一天是31
* 如果是8月份,最后一天是31
* 如果是9月份,最后一天是30
* 如果是10月份,最后一天是31
* 如果是11月份,最后一天是30
* 如果是12月份,最后一天是31
*/
var lastDay = 31
if(m == 4 || m == 6 || m == 9 || m == 11){
lastDay = 30
}else if(m == 2){ // 2月份,判断闰年
// 判断闰年,是闰年那么最后一天是29号,否则是28号
// lastDay = 28
/*
* 1. 4年一闰,百年不闰
* 2. 400年再闰
*/
if( ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ){
lastDay = 29
}else{
lastDay =28
}
}else{
lastDay = 31
}
for(var d = 1;d <= lastDay ;d++){
// 拼接日期
line = line + d + "\t"
// 每7天做一次打印
if(d%7 == 0){
console.log(line)
line = "\t"
}
// 到最后一天,将剩下的(不足7天的打印出来)
if(d == lastDay){
console.log(line)
line = "\t"
}
}
}



