*日历程序*无法为此日历程序编写循环以正确显示

时间:2016-09-17 21:22:57

标签: javascript arrays loops while-loop nested-loops

我在尝试完成代码时遇到问题。我试图让代码在几个不同的行中打印数组。假设看起来像这样:

Calendar

好的,这是更新后的代码。我一直在努力,它正在变得越来越好!但是,我现在的问题是试图找出我需要做什么才能创建空格,其中“0”和“1”当前在代码的输出中。我想我只需要插入:     calDaysOfWeek.unshift(); 或者可能:     calDaysOfWeek.shift(); 我只是无法弄清楚把它放在哪里。如果我能弄明白,我应该能够使我的代码中的日子缩短(例如M到Mon或T到Tues)。

/*Write a program called calendar.js that displays a calendar month 
for May 2012 as the month and year. You must use a loop. The format 
of the month should be as shown below: Hint: You can't use console 
log and print on the same line. Try storing the entire row as one 
concatenated string and then displaying it. You must use loops for 
this one. Do not just print the calendar as a series of console.log 
statements!*/


calDaysOfWeek = [];
calDaysOfWeek.push("Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat");

var s = "MAY 2012\nS M T W T F S\n";

var numDaysOfWeek = calDaysOfWeek.length;
var firstDay = 2;
var numDaysOfMonth = 31;
var numWeeks = numDaysOfMonth/7;
for(var i = 0; i < numWeeks; i++) {
 for(var j = 0; j < numDaysOfWeek; j++) {
    s += i*numDaysOfWeek + j + ' ';
}
s += "\n";
}
if (firstDay != calDaysOfWeek[2]) {
calDaysOfWeek.push();
}
else if (calDaysOfWeek[30] != 31) {
    calDaysOfWeek.pop();
}
else
    console.log(s);

1 个答案:

答案 0 :(得分:2)

您在此处有错误:

for(var i = 0; len = calDaysOfWeek.length; i < len; i++) 

应该是:

len = calDaysOfWeek.length; 

for(var i = 0; i < len; i++) {

}

现在,您需要使用此循环来填充字符串而不是使用数组。所以:

var s = "";
len = calDaysOfWeek.length; 

for(var i = 0; i < len; i++) {

}

但是你的循环只有0到6,因为你有7天的一周。所以你需要几周的另一个循环。你无法轻易计算的东西是一个月的第一天,也就是星期二,所以它在calDaysOfWeek中的指数是2(太阳= 0,星期一= 1,星期二= 2)。你还需要这个月的天数,这里是31。

var s = '';
var numDaysOfWeek = calDaysOfWeek.length;
var firstDay = 2;
var numDaysOfMonth = 31;
var numWeeks = ??? // compute this
for (var i=0; i<numWeeks; i++) {
    for (var j=0; j<numDaysOfWeek; j++) {
         s = ??? // you need to do this
    }
}

一旦结果正确,您可以使用要打印的HTML代码显示它。

编辑:更改了循环

Edit2:在fiddle

上播放
calDaysOfWeek = [];
calDaysOfWeek.push("Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat");

var s = "MAY 2012\n";
var numDaysOfWeek = calDaysOfWeek.length;
var firstDay = 2;
var numDaysOfMonth = 31;
var numWeeks = 5; // compute this
for (var i=0; i<numWeeks; i++) {
    for (var j=0; j<numDaysOfWeek; j++) {
         var n = i * numDaysOfWeek + j + 1 - firstDay ;
         if (n < 1 || n > numDaysOfMonth) {
               s += '   '; // three spaces
         }
         else {
             if (n < 10)
             {
                 s += ' '; // pad with one space
             }
             s += n + ' ' ;
         }
    }
    s += "\n";
}


alert(s);