@Adil1603

Почему if else так выводит результат?

let summ = 0;


function getSumOfNumbers(number, type){
  for(i=0;i<=number;i++){
   if(type ==='odd' && i%2===1){
     summ = summ +i}
   else if (type ==='even' && i%2===0){
     summ = summ +i
     }
     else{
      summ = summ +i
       }
 }
 
}
getSumOfNumbers(10,'even')
console.log(summ)


Мне нужно выводить сумму четных и нечетных чисел, а так же сумму всех чисел в диапазоне до 10 включительно. Несмотря на то, что я в функцию передаю строку even, мне выводится сумма всех чисел, а не четных. Если я уберу else, не буду выводить сумму всех чисел, то корректно все работает. Почему так происходит?
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Потому что if (type ==='even' && i%2===0) означает "если type=even И число чётное", число прибавляется. А когда число НЕ чётное - условие не выполняется, и обработка переходит дальше, в else summ=summ+i, и число всё равно прибавляется.

Если написать последнее else в виде: else if (type !=='odd' && type !=='even'){...}, то число уже не прибавится, значит получите требуемое поведение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
HardBot
@HardBot
back-end, front-end developer
let summ = 0 
function getSumOfNumbers(number, type){
   for(i=0;i<=number;i++){ 
      if(type ==='odd'){ 
         if (i % 2 === 1) summ = summ +i 
      } 
      else if (type ==='even'){ 
         if (i % 2 === 0) summ = summ +i 
      } 
      else{
         summ = summ +i 
      } 
   } 
} 
getSumOfNumbers(10,'oven') 
console.log(summ)
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Еще вариант
function getSumOfNumbers(number, type){
  let sum = 0;
  if (type !== 'odd' && type !== 'even') {
    for(i = 0; i <= number; i++) {
      sum += i;
    }
    return sum;
  }
  const n = type === 'odd' ? 1 : 0;
  for (i = 0; i <= number; i++) {
    if (i % 2 === n) {
      sum += i;
    }
  }
  return sum;
}


И еще вариант
function getSumOfNumbers(number, type){
  const n = ({ odd: 1, even: 0 })[type] ?? null;
  const all = n === null;
  let sum = 0;

  for (i = 0; i <= number; i++) {
    if (all || i % 2 === n) {
      sum += i;
    }
  }
  return sum;
}


И еще вариант, без условий внутри цикла (теоретически, быстрее будет)
function getSumOfNumbers(number, type){
  const n = ({ odd: 1, even: 0 })[type] ?? null;
  const step = n === null ? 1 : 2;
  const start = type === 'odd' ? 1 : 0;
  let sum = 0;

  for (i = start; i <= number; i + step) {
      sum += i;
  }
  return sum;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы