我试图让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();
}
}
答案 0 :(得分:3)
if(!i%3)
实际上会被解释为if((!i)%3)
,这会导致0%3(这是假的)或1%3(这是真的)。如果n为0,!n
将导致1,否则它将始终为0.因为它从0到100,(!i) % 3
只会在开头一次为真。这就是为什么在输出开始时有一个FizzBuzz的原因。
所以你的代码应该是这样的:
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
始终为!i
而0
和0 % 5
始终为{ {1}}。
要修复,您需要做的就是在0 % 3
操作
0 (false)