Путь к молоку Где ошибка?


#1

Ошибка логическая, но найти не могу где она?

var time = 15; // Время

var goToDairy = false; // Молокозавод
var goToStore = false; // Магазин
var goToMarket = false; // Рынок

if (time) {
  if (time >= 8 && time < 13 && time >= 14 && time < 19) {
    goToDairy = true;
    } else
  if (time >= 9 && time < 14 && time >= 15 && time < 17) {
    goToStore = true;
    } else
  if (time >= 7 && time < 20) {
    goToMarket = true;
    }
  }

console.log('Молокозавод: ' + goToDairy + ' Магазин: ' + goToStore + ' Рынок: ' + goToMarket);

#2

У вас все условия с “и”, а должны быть и с “или” тоже.


#3

Исправил, можете объяснить подробно почему используется условие “или” в данном случае?

В моем понимании условие “и” было достаточно.

Код:
var time = 15; // Время

var goToDairy = false; // Молокозавод
var goToStore = false; // Магазин
var goToMarket = false; // Рынок

if (time) {
  if (time >= 8 && time < 13 || time >= 14 && time < 19) {
    goToDairy = true;
    } else
  if (time >= 9 && time < 14 || time >= 15 && time < 17) {
    goToStore = true;
    } else
  if (time >= 7 && time < 20) {
    goToMarket = true;
    }
  }

console.log('Молокозавод: ' + goToDairy + ' Магазин: ' + goToStore + ' Рынок: ' + goToMarket);

#4

Например, потому что время не может быть ОДНОВРЕМЕННО И меньше 13 И больше 14
Оператор && (И) подразумевает что оба операнта, и справа, и слева должны быть true.
Здесь же это невозможно, да и вообще достаточно того, что бы сработал только один. Поэтому ставится II (Или).


#5

Спасибо!


#6

Вот вариант использование только оператора И:

if (time >= 8 && time < 19 && time !== 13 && time !== 14) {
  goToDairy = true;
} else if (time >= 9 && time < 17 && time !== 15 && time !== 14) {
  goToStore = true;
} else if (time >= 7 && time < 20) {
  goToMarket = true;
}

#7
switch (true) {
  case time >= 8 && time < 13 || time >= 14 && time < 19: goToDairy = true; break;
  case time >= 13 && time < 14: goToStore = true; break;                
  case time >= 7 && time < 20: goToMarket = true; break;
}