-2

// checking whether a number is a multiple of 3 or not 
for (let number = 1; number <= 100; number++) {
  switch (number % 3) {
    case !0: // Here I have used !(not) but it's not helping, I only want to know why '!' is not helping           
      console.log(`${number} is not multiple of 3`);
      break;

    default:
      console.log(`${number} is multiple of 3`)
  }
}

这里第一种情况不起作用。代码执行没有问题,但第一种情况根本没有帮助。完整的流程将仅转到“默认:”代码块。每当余数不等于 0 时,应执行第一种情况的代码块,但它始终会执行默认代码块。

4

4 回答 4

1

你不能这样做,因为 !0 在 JavaScript 中总是正确的,所以循环总是在第一种情况下进入

用这种方法试试

for (let number = 1; number <= 100 ;number++ ) {
  if(number % 3){
    console.log(`${number} is not multiple of 3`); 
  }
  else{
    console.log(`${number} is multiple of 3`); 
  }
}
于 2020-06-05T11:35:49.663 回答
1

switch语句接收语句的值case,而不是像if. 因此,当 js 运行您的代码时,它将评估!0true(假值的倒数为真)。

if您必须用and替换您的开关elses

for (let number = 1; number <= 100 ;number++ ) {
    if ((number % 3) !== 0) {
         console.log(`${number} is not multiple of 3`); 
    } else {
         console.log(`${number} is multiple of 3`)
    }
}

但是如果你颠倒逻辑,你仍然可以使用 switch case 语句:

for (let number = 1; number <= 100 ;number++ ) {
   switch (number % 3) {
     case 0:      
         console.log(`${number} is multiple of 3`)
     break;
     default:
         console.log(`${number} is not multiple of 3`); 
  }
}

但是在这种情况下使用 switch case 真的没有意义,因为 anif-else更简单,更容易阅读。

于 2020-06-05T11:44:29.103 回答
0

!0evals to true,不等于1or 2

考虑这样写:

for (let number = 1; number <= 100; number++) {
	switch (number % 3) {
		case 0:
			console.log(`${number} is multiple of 3`)
			break;
		default:
			console.log(`${number} is not multiple of 3`);
	}
}

于 2020-06-05T11:35:13.853 回答
0

在 JS 中,0 被认为是虚假的,这就是为什么!0将等于true(而不是虚假)。

至于您的开关,您可以 反转它并使用 atrue作为开关值。然后,这些案例将具有要检查的表达式

for (let number = 1; number <= 100 ;number++ ) {
   switch (true) {
     case number % 3:        
         console.log(`${number} is not multiple of 3`); 
     break;

     default:
         console.log(`${number} is multiple of 3`)
  }
}
于 2020-06-05T11:35:41.930 回答