1

我有一个关于这个程序的问题,它说:FizzBu​​zz 挑战:显示从 1 到 x 的数字,将单词“fizz”替换为 3 的倍数,将“buzz”替换为 5 的倍数,将“fizzbuzz”替换为 3 和5. 结果必须是:1 2 fizz 4 Buzz fizz 7 8 fizz Buzz 11 fizz 13 14 fizzbuzz 16 ...

所以我的问题是当时打印输出,我不知道该怎么做。

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 ");
            }

        }

    }
}
4

4 回答 4

5

这是伪代码:

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,因为这可能有助于理解它是如何工作的。

于 2010-07-10T21:41:48.083 回答
3

问题当然是当(i % 3 == 0)&&(i % 5 == 0)为真时,前面的两个条件也为真,所以你得到了重复的输出。解决这个问题的最简单方法是在前两种情况下检查其他条件是否不正确。即使第一个条件if((i % 3 == 0)&&(i % 5 != 0))和第二个条件相同。

您的代码的另一个问题是,当任何一种情况为真时,您都在打印数字,但当它们都不是时,您应该打印它。您可以通过创建第四个 if 条件来解决此问题,该条件检查所有条件是否为真,如果是,则打印 i。

现在,如果您执行了上述操作,您会发现最终出现了一些代码重复。如果你想一想,你会发现你可以很容易地解决这个问题,通过使用 if - else if - else if - else,它允许你在检查当前条件时假设先前的条件是错误的。

于 2010-07-10T21:41:33.903 回答
2

嗯,我想我只会提示:

  1. 想一想正确的顺序:如果一个数是 3 的倍数,又是(3 和 5)的倍数,会发生什么?
  2. 有一个else if说法。
于 2010-07-10T21:45:15.477 回答
1

使用else if以便条件不重叠。

于 2010-07-10T21:42:43.460 回答