*日历程序*无法为此日历程序编写循环以正确显示
Posted
技术标签:
【中文标题】*日历程序*无法为此日历程序编写循环以正确显示【英文标题】:*Calendar Program* Having trouble writing a loop for this calendar program to display properly 【发布时间】:2017-01-25 21:16:00 【问题描述】:我在尝试完成我的代码时遇到问题。我试图让代码在几个不同的行中打印数组。应该是这样的:
好的,这是更新的代码。我一直在努力,它正在变得更好!但是,我现在的问题是试图弄清楚我需要做什么才能创建代码输出中当前存在“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】:这里有一个错误:
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(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
一旦结果正确,您可以使用要打印的 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);
【讨论】:
在您的情况下 numWeeks 确实是 5,如果您想从 firstDay 和 numDaysOfMonth 更一般地计算,那么您可以找到一个介于 4(28 天,从星期日开始的月份)到 6(31 天)之间的数字一个月从星期六开始)...如果您不想计算它,可以将其硬编码为 5。 var s 是接收结果的字符串,你应该只能使用 1 个 console.log() 来显示 s。 @MagnetM,在内部循环中尝试这样的事情:s = s + i*numDaysOfWeek + j + ' ';
这不是最终答案,但它应该让你更接近。
s 是一个字符串。如果你愿意,你可以创建一个字符串数组来存储每一行。这是一个fiddle 让你开始。我现在需要去,但我明天再回来看看。
现在您需要使用 if () else () 和 firstDay 和 numDaysOfMontrh 来修复错误
好吧,继续提问,也许我以后会回答另一个 XD,我很高兴能提供帮助。以上是关于*日历程序*无法为此日历程序编写循环以正确显示的主要内容,如果未能解决你的问题,请参考以下文章
如何在 kal 日历中进行更改以显示来自 json webservice 的事件
可以创建“隐藏”日历项目以在 iPhone 应用程序中显示通知警报吗?