2013-10-13 2 views
0

Код предназначен для генерации календаря с использованием javascript и таблиц. Месяцы и дни в голландском, но это должно быть понятно. Каким-то образом этот конец в бесконечном цикле, когда он должен остановиться, когда дни больше или совпадают с длиной моего массива.Почему это приводит к бесконечному циклу?

Предполагается сделать 12 таблиц за каждый месяц, а затем заполнить их днями этого месяца. Это еще не закончено, так как предполагается, что каждый день начнется в воскресенье. Я думаю, я должен также отметить, что я еще не настолько опытен.

var months = new Array(); 
months[0] = "januari"; 
months[1] = "februari"; 
months[2] = "maart"; 
months[3] = "april"; 
months[4] = "mei"; 
months[5] = "juni"; 
months[6] = "juli"; 
months[7] = "augustus"; 
months[8] = "september"; 
months[9] = "oktober"; 
months[10] = "november"; 
months[11] = "december"; 

var maxDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
var weekDays = ["zo", "ma", "di", "wo", "do", "vr", "za"]; 
var kalender = 0; 
var days = 1; 
var weekDaysNumber = 0; 


while(kalender < months.length){ 
    document.write("<table><tr>"); 
    document.write("<th>" + months[kalender] + "</th></tr>"); 
    document.write("<tr>"); 
    while (weekDaysNumber < 7){ 
     document.write("<td>" + weekDays + "</td>"; 
     weekDaysNumber++; 
    } 
    document.write("</tr>"); 
    while(days < maxDays[kalender]){ 
     document.write("<td>" + days + "</td>"); 

     var rows = 0; 
     if(rows == 7 && days !== maxDays[kalender]){ 
     document.write("</tr>"); 
     document.write("<tr>"); 
     rows = 1; 
     } 

     rows++; 
     days++; 

    } 

    if(days == maxDays[kalender]){ 
      document.write("</tr></table>"); 
      kalender++; 
      weekDaysNumber=0; 

     } 

} 
+0

Совет: http://stackoverflow.com/questions/802854/why-is-document-write-considered-a-bad-practice – elclanrs

ответ

2

Потому что вы никогда не сбросить переменную days в 1, и так далее второй внешний контур, это никогда не равна maxDays[kalendar]. Там может быть других вопросов, код выглядит намного сложнее, чем необходимо, но это вопиющая причина для бесконечного цикла: когда days достигает 31, вы разбиваете первый цикл, начинаете второй, а с 31 больше 28 внутренний цикл никогда не вводится, и ваш == maxDays[kalendar] никогда не вводится.


Ваш браузер имеет полнофункциональный отладчик, встроенный в него. Вы можете использовать это для установки контрольных точек, одноэтапного кода, проверки переменных и т. Д.

0

Необходимо вернуть days обратно в 1 внутри цикла while(kalender < months.length){.

Смежные вопросы