Dlang的FizzBu​​zz

时间:2016-05-26 19:47:32

标签: d fizzbuzz

我试图让fizzbuzz在D工作,但我不知道我的生活是什么问题。我试过反转逻辑,但是当它不合适时它会写两个单词,但是当它出现时它只是没有写入。

以下是输出结果的屏幕截图:http://puu.sh/p67Hd/2a5a598b1b.png

List<Pet> pets = new List<Pet>
{
    new Cat("cat1", 1, "Happy"),
    new Cat("cat2", 2, "Happy"),
    new Dog("dog", 1, "Surly"),
    new Terrier("dog", 3, "Happy")
};

// in your Iterate() method
foreach (var pet in pets)
{
    // common methods here
    pet.MakeNoise();

    if (pet is Cat)
    {
        var animal = (Cat)pet;
        animal.ClimbTree();
    }
    else if (pet is Terrier)
    {
        var animal = (Terrier)pet;
        animal.Growl();
    }
}

2 个答案:

答案 0 :(得分:3)

原因是operator precedence in D

if(!i%3)实际上会被解释为if((!i)%3),这会导致0%3(这是假的)或1%3(这是真的)。如果n为0,!n将导致1,否则它将始终为0.因为它从0到100,(!i) % 3只会在开头一次为真。这就是为什么在输出开始时有一个FizzBu​​zz的原因。

所以你的代码应该是这样的:

import std.stdio;

void main() {
    for (uint i = 0; i < 100; i++) {
        if (i%5 && i%3) write(i);
        if (!(i%3)) write("Fizz");
        if (!(i%5)) write("Buzz");
        writeln();
    }
}

答案 1 :(得分:3)

year.calcs(DF2) 运算符优先于!,因此您的%语句看起来像

if

因为if ((!i) % 3) write("Fizz"); if ((!i) % 5) write("Buzz"); 的所有内容都非零(第一次除外),i始终为!i00 % 5始终为{ {1}}。

要修复,您需要做的就是在0 % 3操作

周围添加括号
0 (false)