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

Javascript *日历程序*无法写入循环以正确显示此日历程序,javascript,arrays,loops,while-loop,nested-loops,Javascript,Arrays,Loops,While Loop,Nested Loops,我在尝试完成代码时遇到问题。我正在尝试让代码将数组打印到几个不同的行中。应该是这样的: 好的,这是更新的代码。我一直在努力,它正在变得更好!然而,我现在的问题是试图弄清楚我需要做什么,以便在代码输出中当前包含“0”和“1”的地方创建空格。我想我只需要插入: calDaysOfWeek.unshift(); 或者可能: calDaysOfWeek.shift(); 我就是不知道该把它放在哪里。如果我能弄明白这一点,我应该能够减少代码中的日期缩写(例如M到Mon或T到Tues) /*编写一个名为c

我在尝试完成代码时遇到问题。我正在尝试让代码将数组打印到几个不同的行中。应该是这样的:

好的,这是更新的代码。我一直在努力,它正在变得更好!然而,我现在的问题是试图弄清楚我需要做什么,以便在代码输出中当前包含“0”和“1”的地方创建空格。我想我只需要插入: calDaysOfWeek.unshift(); 或者可能: calDaysOfWeek.shift(); 我就是不知道该把它放在哪里。如果我能弄明白这一点,我应该能够减少代码中的日期缩写(例如M到Mon或T到Tues)

/*编写一个名为calendar.js的程序,显示日历月份
2012年5月为月份和年份。必须使用循环。格式
本月的日期应如下所示:提示:您不能使用console
记录并打印在同一行上。尝试将整行存储为一行
连接字符串,然后显示它。您必须使用循环来执行此操作
这个。不要只将日历打印为一系列console.log
声明*/
calDaysOfWeek=[];
推送(“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”);
var s=“2012年5月\n M T W T F s\n”;
var numDaysOfWeek=calDaysOfWeek.length;
var第一天=2;
var numDaysOfMonth=31;
var numWeeks=numDaysOfMonth/7;
对于(变量i=0;i
您在此处遇到错误:

for(var i = 0; len = calDaysOfWeek.length; i < len; i++) 
for(变量i=0;len=calDaysOfWeek.length;i
应该是:

len = calDaysOfWeek.length; 

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

}
len=calDaysOfWeek.length;
对于(变量i=0;i
现在,您需要使用这个循环来填充字符串,而不是使用数组。因此:

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

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

}
var s=”“;
len=calDaysOfWeek.length;
对于(变量i=0;i
但是你的循环是从0到6,因为你一周有7天。所以这几周你需要另一个循环。你不容易计算的是一个月的第一天,也就是星期二,所以它在calDaysOfWeek中的指示是2(Sun=0,Mon=1,Tue=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
    }
}
var s='';
var numDaysOfWeek=calDaysOfWeek.length;
var第一天=2;
var numDaysOfMonth=31;
变量numWeeks=???//计算这个

对于(var i=0;在您的案例中,numWeeks实际上是5,如果您想更一般地从firstDay和numDaysOfMonth计算,那么您可以找到一个介于4(28天,月份从周日开始)到6(31天,月份从周六开始)之间的数字…如果不想计算,可以将其硬编码为5。var s是将接收结果的字符串,您应该只能使用1个console.log()要显示s.@MagnetM,请在内部循环中尝试以下操作:
s=s+i*numDaysOfWeek+j+”;
这不是最终答案,但它会让您更接近。s是一个字符串。如果您想要,您可以创建一个字符串数组来存储每一行。这是一个让您开始的示例。我现在需要走,但明天会回来检查。现在您需要修复这个问题通过使用if()else()和firstDay以及numDaysOfMontrhWell不断地问问题,也许将来我会回答另一个问题,我很高兴我能帮上忙。
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
    }
}
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);