2016-09-17 33 views
3

我遇到了一個問題,試圖完成我的代碼。我試圖讓代碼在幾個不同的行中打印數組。這是假設是這樣的:*日曆程序*無法爲此日曆程序編寫循環以正常顯示

Calendar

好,這裏是更新的代碼。我一直在努力,它變得越來越好!然而,我現在的問題是想知道爲了創建空格,其中「0」和「1」目前在代碼的輸出中需要做什麼。我想我只需要插入: calDaysOfWeek.unshift(); 或可能: calDaysOfWeek.shift(); 我只是不知道該把它放在哪裏。如果我能弄清楚,我應該可以縮短代碼中的日期(例如M到週一或T到週二)。

/*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); 

回答

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); 
+0

感謝您的迅速反應。雖然,我仍然感到困惑。我相信「5」將是「numWeeks」的計算,但我沒有得到什麼「s」變量。我也不相信我們在課堂上使用的是HTML代碼。我只使用console.log來顯示輸出。 – MagnetM

+1

對於你的情況numWeeks確實是5,如果你想從firstDay和numDaysOfMonth更普遍的計算,那麼你可以找到一個4(28天與星期日開始的月份)到6(31天與一個月開始一個星期六) ...如果你不想計算它,你可以將它硬編碼爲5。 var s是將接收結果的字符串,您應該只能使用1個console.log()來顯示s。 –

+1

@MagnetM,在內部循環中嘗試這樣的:'s = s + i * numDaysOfWeek + j +'';'這不是最終的答案,但它應該讓你更接近。 –