while (checkEndDate = true)
Вы присваиваете значение checkEndDate
как истинное, поэтому цикл будет повторяться всегда. Вы, вероятно, имели в виду:
while (checkEndDate == true)
Это сравнивает два значения. Но поскольку у вас уже есть логическое значение, сравнение не требуется:
while (checkEndDate)
Обратите внимание, что вы можете значительно сократить объем кода, комбинируя похожие случаи. Например:
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(startDay <= 31)
{
checkStartDate = true;
}
break;
То же самое для месяцев с 30 днями.
Вам также следует написать метод checkDate()
, чтобы один и тот же код не записывался дважды.