没有AND运算符的FizzBu​​zz

bpr*_*mas 8 java if-statement fizzbuzz

对于那些不知道的人,FizzBu​​zz存在以下问题:

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

我找到的每个FizzBu​​zz解决方案都是为了原创而制作的一些疯狂的深奥解决方案,或者你的基本if-else链:

for(int i = 1; i <= 100; i++) {

if(i % 3 == 0 && i % 5 == 0) {
   System.out.println("FizzBuzz");
} else if (i % 3 == 0) {
   System.out.println("Fizz");
} else if (i % 5 == 0) {
   System.out.println("Buzz");
} else {
   System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个简单的解决方案,旨在取出"FizzBu​​zz"if语句.我有这个想法:

for(int i = 1; i <= 100; i++) {

if (i % 3 == 0) 
   System.out.print("Fizz");
if (i % 5 == 0) 
   System.out.println("Buzz")
else
   System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我假设它可以通过输入ifs,Fizz和Buzz来打印FizzBu​​zz,但是如果数字是3,它会打印Fizz3.我该如何避免这种情况?

aio*_*obe 11

你要做的是

if (a)
    ...
if (b)
    ...
else // if neigther a nor b
    ...
Run Code Online (Sandbox Code Playgroud)

这根本不可能.一个else只能属于一个if.你必须使用稍长的变体.

为避免对模运算符进行冗余求值,可以将循环体表示为

boolean fizz = i % 3 == 0;
boolean buzz = i % 5 == 0;

if (fizz) 
   System.out.print("Fizz");
if (buzz)
   System.out.print("Buzz");
if (!(fizz || buzz))
   System.out.print(i);

System.out.println();
Run Code Online (Sandbox Code Playgroud)

另一个是

String result = "";

if (i % 3 == 0)   result = "Fizz";
if (i % 5 == 0)   result += "Buzz";
if (result == "") result += i;

System.out.println(result);
Run Code Online (Sandbox Code Playgroud)