当前位置:  开发笔记 > 编程语言 > 正文

FizzBu​​zz使用三元条件运算符

如何解决《FizzBu​​zz使用三元条件运算符》经验,为你挑选了3个好方法。

我一直在阅读ruby中的条件样式表达式.但是我遇到了一个我无法理解的定义经典FizzBu​​zz问题.我理解FizzBu​​zz问题,甚至在使用三元运算符找到以下快速解决方案之前编写了自己的问题.如果有人可以向我解释这个链如何工作以满足FizzBu​​zz问题,那将非常感谢:)

for i in 0...100
  puts i%3==0 ? i%5==0 ? "FizzBuzz" : "Buzz" : i%5==0 ? "Fizz" : i
end

Greg Hewgill.. 16

一些括号可能会有所帮助:

puts (i%3 == 0) ? ((i%5 == 0) ? "FizzBuzz" : "Buzz") : ((i%5 == 0) ? "Fizz" : i)

因此,如果我可以被3整除,那么它会检查我是否也可以被5整除.如果是这样,它会打印"FizzBu​​zz",否则只是"Buzz".如果我不能被3整除,那么它再次检查5的可分性并打印"Fizz",如果是,否则只是我.



1> Greg Hewgill..:

一些括号可能会有所帮助:

puts (i%3 == 0) ? ((i%5 == 0) ? "FizzBuzz" : "Buzz") : ((i%5 == 0) ? "Fizz" : i)

因此,如果我可以被3整除,那么它会检查我是否也可以被5整除.如果是这样,它会打印"FizzBu​​zz",否则只是"Buzz".如果我不能被3整除,那么它再次检查5的可分性并打印"Fizz",如果是,否则只是我.



2> Jorge Ferrei..:

以下是Jeff Atwood这篇文章中对FizzBu​​zz问题的描述.

编写一个程序,打印从1到100的数字.但是对于三个的倍数打印"Fizz"而不是数字和五个打印"Buzz"的倍数.对于三和五的倍数的数字打印"FizzBu​​zz".

一个三元操作符是一个if-else语句速记记录.一般格式是:

cond ? evaluate_if_cond_is_true : evaluate_if_cond_is_false

所以,如果我写:

int isEven = (i % 2 == 0) ? 1 : 0;

相当于以下代码:

if (i % 2 == 0) {
    isEven = 1;
} else {
    isEven = 0;
}

cond是i % 2 == 0,evaluate_if_cond_is_true是1和evaluate_if_cond_is_false是0.

三元运算符的好处在于它们可以组合在一起.这意味着当条件计算为true或false时要执行的语句可以是另一个三元运算符.

让整个条件更具可读性:

i%3==0 ?
    i%5==0 ?
        "FizzBuzz"
        : "Buzz"
    : i%5==0 ?
        "Fizz"
        : i

使用上面解释的规则将其映射到if-else语句很容易:

if (i%3==0) {
    if (i%5==0) {
        "FizzBuzz"
    } else {
        "Buzz"
    }
} else {
    if (i%5==0) {
        "Fizz"
    } else {
        i
    }
}

这不是有效的代码,但因为三元运算符的结果在结果表达式中内联,所以它被用作puts命令的输入.



3> glenn mcdona..:

为了好玩,这是另一种方式:

puts (1..100).map {|i| (fb = [["Fizz"][i%3],["Buzz"][i%5]].compact.join).empty? ? i : fb}

而另一个:

(1..100).zip([nil,nil,"Fizz"]*34,[nil,nil,nil,nil,"Buzz"]*20).map {|a,b,c| b || c ? [b,c].join : a}

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有