【问题标题】:FizzBuzz using JavaScript Switch [duplicate]FizzBu​​zz 使用 JavaScript Switch [重复]
【发布时间】:2018-05-01 11:17:05
【问题描述】:

似乎无法指出一些明显的东西。此解决方案不起作用。请帮忙?

FizzBu​​zz 问题:打印从 1 到 100 的数字。打印 Fizz 而不是可被 3 整除的数字。打印 Buzz 而不是可被 5 整除的数字。打印 FizzBu​​zz 而不是可被 3 和 5 整除的数字。

for(var i = 1; i <= 100; i++) {
	
	switch (i) {

      case (i%3 === 0 && i%5 === 0):
        console.log('FizzBuzz'); 
        break;

      case (i%3 === 0):
        console.log('Fizz');
        break;

      case (i%5 === 0):
        console.log('Buzz');
        break;

      default:
        console.log(i);

	}
    }

【问题讨论】:

  • 定义“不起作用”。错误?输出错误?还有什么?
  • 你为什么用switch?这是任务要求的还是只是您的选择?
  • 在仍然使用switch 块的情况下,最接近您的代码的是this

标签: javascript


【解决方案1】:

问题是,您正在打开变量i 的值。然后你将它与i % 3 === 0 之类的表达式进行比较,因此比较变为i === (i % 3 === 0)

相反,您可以打开 true,因此任何计算结果为 true 的表达式都将被切换到。

for (var i = 1; i <= 100; i++) {
  switch (true) {
    case (i % 3 === 0 && i % 5 === 0):
      console.log('FizzBuzz');
      break;

    case (i % 3 === 0):
      console.log('Fizz');
      break;

    case (i % 5 === 0):
      console.log('Buzz');
      break;

    default:
      console.log(i);
  }
}

【讨论】:

  • 感谢您的解释!
【解决方案2】:

如果 case 与您要切换的值匹配,则 switch 进入分支,因此:

  switch (i) {
    case (i%3 === 0 && i%5 === 0):

将进入第一种情况,如果:

 i === (i%3 === 0 && i%5 === 0)

例如对于15,它将是:

 15 === true // -> false

所以它不会进入分支。因此,您不必切换到i,而是必须切换到true

  switch(true) {

【讨论】:

    【解决方案3】:

    您是否尝试不破坏开关,因为当它匹配时它不会打印它应该打印的其他内容?也许?

    【讨论】:

      猜你喜欢
      • 2017-03-19
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 2018-07-18
      • 2012-11-04
      相关资源
      最近更新 更多