首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高效FizzBuzz

高效FizzBuzz
EN

Code Review用户
提问于 2013-12-05 16:59:25
回答 5查看 6.8K关注 0票数 12

我写了下面的Fizz Buzz程序。我如何改进它或使它更有效率?

代码语言:javascript
运行
复制
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);
    }
   }
  }
EN

回答 5

Code Review用户

回答已采纳

发布于 2013-12-05 17:42:16

我在您的代码中看到的问题是:

  • 缩进:你的压痕不一致。每个级别只有一个空间不足以达到可读性。
  • 大括号样式:在以后修改代码时,省略可选的大括号可能会导致错误。如果你想省略牙套,那么也要把身体放在同一条线上,以避免任何误解。如果(num %3 == 0) { if (num %5 == 0) System.out.println("FizzBuzz");否则System.out.println("Fizz");}就个人而言,我建议您坚持使用标准Java约定,以使每个人的生活更轻松。它还减轻了在一开始就不戴牙套的诱惑。如果(num %3 == 0) { if (num %5 == 0) { System.out.println("FizzBuzz");}System.out.println{ System.out.println("Fizz");}}顺便说一句,在一个单独的行上打开大括号时,尝试捕获尝试{…} catch (异常e) {…}最后{…}
  • 冗余:15个案例中的多个被处理了两次,需要处理一次.
  • 重复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);}
票数 15
EN

Code Review用户

发布于 2013-12-05 17:22:49

你有一些多余的代码..。不需要这样的代码:

代码语言:javascript
运行
复制
   if(num%3==0) 
       System.out.println("FizzBuzz");
   else

在程序的else if(num%5==0)端。这是因为如果数字是% 3 ==0,它就会进入第一个块。

然后,总的来说,从逻辑上看,我不禁认为你错过了一个窍门:

代码语言:javascript
运行
复制
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);
}

这不是最快的选择,但看起来确实不错。

票数 11
EN

Code Review用户

发布于 2013-12-05 17:40:00

您可以只使用一个模数,但考虑到编写控制台要比其他任何东西都要昂贵得多,在不改变输出的情况下更改代码是不太可能的。也就是说,从输出中删除一个字符会产生更大的区别。

代码语言:javascript
运行
复制
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倍,甚至不改变它。也就是说,如果你还没有热身你的代码,试图使它更有效率并不重要。

票数 7
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/36708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档