Loading...
ivopanajotov avatar ivopanajotov 6 Точки

Проблем със задача Хотелска стая от По-сложни проверки, Judge gives NaN?

function solve(countNightsmonth) {

    countNights = Number(countNights);

    let apartment = 0;

    let studio = 0;

    if (month === `May` || month === `October`) {

        if (countNights <= 7) {

            apartment = 65;

            studio = 50;

        } else if (countNights <= 14) {

            apartment = 65;

            studio = 50 * 0.95;

        } else {

            studio = 50 * 0.8;

            apartment = 50 * 0.9;

        }

 

    } else if (month === `June` || `September`) {

        apartment = 68.7;

        studio = 75.2;

    } if (countNights > 14) {

        studio = 75.2 * 0.8;

        apartment = apartment * 0.1;

    } else if (month === `July` || month === `August`) {

        studio = 76;

        apartment = 77;

        if (countNights > 14) {

            apartment = apartment * 0.9;

        }

    }

    let priceApartment = (countNights * apartment).toFixed(2);

    let priceStudio = (countNights * studio).toFixed(2);

    console.log(`Apartment: ${priceApartment} lv.`);

    console.log(`Studio: ${priceStudio} lv.`);

}

solve(`4``May`);

Тагове:
0
Programming Basics 15/05/2020 16:43:58
mttnu avatar mttnu 82 Точки

Колеги, използвайте pastebin.com за споделяне на код или поне ги обграждайте в таг за code snippet.

Като цяло има много печатни грешки.
Ето редактиран код с коментари, сравнете го с оригинала.
 

function solve(month, countNights) {
  // Разменени са местата на параметрите. За товаизкарва NaN (Not a Number)
  countNights = Number(countNights);

  let apartment = 0;
  let studio = 0;

  if (month === `May` || month === `October`) {
    if (countNights <= 7) {
      apartment = 65;
      studio = 50;
    } else if (countNights > 7 && countNights <= 14) {
      // Трябва да се добави допълнително условие за countNights > 7
      apartment = 65;
      studio = 50 * 0.95;
    } else {
      studio = 50 * 0.7;
      apartment = 65 * 0.9; // Печатна грешка. Цената трябва да е 65, ne 50
    }
  } else if (month === `June` || month === `September`) {
    // Пропуснато е month === преди 'September'. Написано по този начин условието винаги ще е true и ще се изпълнява кода от тялото на този else if.
    apartment = 68.7;
    studio = 75.2;
    if (countNights > 14) {
      // Този if трябва да бъде в тялото else if-a за месец юни и септември, а не под него.
      studio = 75.2 * 0.8;
      apartment = apartment * 0.9; // Отново печатна грешка - трябва да бъде 0.1, а не 0.9, защото отстъпката е 10%.
    }
  } else if (month === `July` || month === `August`) {
    studio = 76;
    apartment = 77;
    if (countNights > 14) {
      apartment = apartment * 0.9;
    }
  }

  let priceApartment = (countNights * apartment).toFixed(2);
  let priceStudio = (countNights * studio).toFixed(2);

  console.log(`Apartment: ${priceApartment} lv.`);
  console.log(`Studio: ${priceStudio} lv.`);
}


И един съвет - не е нужно за всеки месец да проверявате дали ношувките са > 14 и да променяте цената на апартамента всеки път. Така или иначе отстъпката е винаги 10% при повече от 14 нощувки, независимо от месеца - може да се напише един if в края, който да проверява дали нощувките са повече от 14, и ако са -> да се начисли отстъпката. Така ще се спести писането на един и същ код на няколко места и ще се намали вероятността грешки (една от грешките беше точно такава). :) 

1
15/05/2020 19:21:39
ivopanajotov avatar ivopanajotov 6 Точки

https://pastebin.com/4iuCC9LP

Ето и решението на чисто!

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.