我写了下面的Fizz Buzz程序。我如何改进它或使它更有效率?
public class FizzBuzz
{
public static void main(String[] args)
{
System.out.println("--------Fizz Buzz program-------------");
for(int num=1;num<=100;num++)
{
if(num%3==0)
{
if(num%5==0)
System.out.println("FizzBuzz");
else
System.out.println("Fizz");
}
else if(num%5==0)
{
if(num%3==0)
System.out.println("FizzBuzz");
else
System.out.println("Buzz");
}
else
System.out.println(num);
}
}
}发布于 2013-12-05 17:42:16
我在您的代码中看到的问题是:
System.out.println()**:*我建议使用三元条件表达式。对于(int num = 1;num <= 100;num++) {System.out.println(num% 15 == 0)?"FizzBuzz“:(num %3 == 0)"Fizz“:(num %5 == 0)"Buzz“:num);}发布于 2013-12-05 17:22:49
你有一些多余的代码..。不需要这样的代码:
if(num%3==0)
System.out.println("FizzBuzz");
else在程序的else if(num%5==0)端。这是因为如果数字是% 3 ==0,它就会进入第一个块。
然后,总的来说,从逻辑上看,我不禁认为你错过了一个窍门:
for(int num=1;num<=100;num++) {
if (num % 15 == 0) System.out.println("FizzBuzz");
else if (num % 3 == 0) System.out.println("Fizz");
else if (num % 5 == 0) System.out.println("Buzz");
else System.out.println(num);
}这不是最快的选择,但看起来确实不错。
发布于 2013-12-05 17:40:00
您可以只使用一个模数,但考虑到编写控制台要比其他任何东西都要昂贵得多,在不改变输出的情况下更改代码是不太可能的。也就是说,从输出中删除一个字符会产生更大的区别。
for(int num = 1; num <= 100; num++) {
switch(num % 15) {
case 0:
System.out.println("FizzBuzz");
break;
case 3: case 6: case 9: case 12:
System.out.println("Fizz");
break;
case 5: case: 10:
System.out.println("Buzz");
break;
}
}注意:在默认情况下循环或方法被调用10,000次之前,Java不会编译成本机代码。如果你热身你的代码,它可以更快20倍,甚至不改变它。也就是说,如果你还没有热身你的代码,试图使它更有效率并不重要。
https://codereview.stackexchange.com/questions/36708
复制相似问题