FizBuzz程序:如何使输出正确?

问题描述:

我有一个关于这个程序的问题,它说:FizzBu​​zz挑战:显示从1到x的数字,用3的倍数替换单词'fizz',用5的倍数替换'buzz',以及替换为'fizzbuzz'的倍数结果必须是:1 2嘶嘶声4嗡嗡声7 8嘶嘶声11嘶嘶声13 14嘶嘶声16 ...FizBuzz程序:如何使输出正确?

所以我的问题是在打印输出时,我不知道什么去做。

public class Multiplos { 

    public static void main(String args[]) { 

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

      if (i % 3 == 0) { 
       System.out.print(i + " "); 
       System.out.print(" fizz "); 
      } 

      if (i % 5 == 0) { 
       System.out.print(" " + i); 
       System.out.print(" " + "buzz "); 
      } 

      if((i % 3 == 0)&&(i % 5 == 0)){ 
       System.out.print(i + " "); 
       System.out.print(" fizzbuzz "); 
      } 

     } 

    } 
} 
+5

维基百科充满了对此的答案。 – 2010-07-10 22:03:18

这里是伪代码:

for i in 1 to 100 
    if(i % 5 == 0) AND (i % 3 == 0) print 'fizzbuzz' 
    else if(i % 3 == 0) print 'fizz' 
    else if(i % 5 == 0) print 'buzz' 
    else print i 

我会离开它作为一个练习,你把它转换成Java,因为这可能与理解为这是如何工作的帮助。

的问题当然是当(i % 3 == 0)&&(i % 5 == 0)是真实的,前两个条件都还不错,让你获得双重输出。解决这个问题的最简单方法是在前两种情况下检查其他条件不成立。即第一个条件为if((i % 3 == 0)&&(i % 5 != 0)),第二个条件相同。

您的代码的另一个问题是,如果任何一种情况属实,您正在打印该数字,但是当它们都不是时,您应该打印它。你可以通过做第四个if条件来检查这些条件是否都是真的,如果是,就打印i。

现在,如果您已经完成了上述操作,您将看到最终出现了一些代码重复。如果你仔细想一想,你会发现,通过使用if - else if - else if - else,你可以很容易地解决这个问题,这可以让你在检查当前条件时假设前面的条件是错误的。

+0

谢谢你的回答,我明白了 – bentham 2010-07-10 21:48:58

使用else if使条件不重叠。

嗯,我想我会仅提示:按正确的顺序的

  1. 想:如果一个数是3的倍数,会发生什么,而且(3和5)?
  2. 有一个else if声明。