问题:
编写一个将数字从1打印到100的程序。但对于三种印刷品的倍数,"Fizz“而不是数字,以及五种打印"Buzz”的倍数。对于三倍和五倍的数字,请打印"FizzBuzz“。
来自这里的问题。
这是我的密码:
/*
* Code by Clint
*/
public class FizzBuzz {
public static void main(String[] args) {
for (int numbers = 1; numbers <= 100; numbers++) {
if (numbers % 3 == 0 && numbers % 5 == 0) {
System.out.println("Fizz Buzz");
} else if (numbers % 3 == 0) {
System.out.println("Fizz");
} else if (numbers % 5 == 0) {
System.out.println("Buzz");
} else {
System.out.println(numbers);
}
}
}
}这是输出:

发布于 2020-07-23 05:41:58
除了变量名numbers之外,代码看起来很完美。这个变量只包含一个数字,因此它的名称必须是number。
由于变量仅在非常小的范围内使用,所以名称n或i也是可以接受的。(视乎个人喜好而定)
发布于 2020-07-23 17:09:48
想象一下FizzBuzz上的一个变体与n不同的说法-这个音节-如果规则。你想查查2^n的案子吗?这将导致大量代码(O(2^n)行)或深嵌套代码(带有O(n)最大缩进)。幸运的是,问题陈述帮了你一个忙:关于15的可分性,它要求您打印FizzBuzz,而不是像您尝试的那样用空格打印FizzBuzz。因此,干净代码方法(包括O(n)行和O(1)最大缩进)更像这样:
public class FizzBuzz {
public static void main(String[] args) {
for (int number = 1; number <= 100; number++) {
String toPrint = "";
if(number % 3 == 0) {
toPrint += "Fizz";
}
if(number % 5 == 0) {
toPrint += "Buzz";
}
if (toPrint.isEmpty()) {
toPrint = Integer.toString(number);
}
System.out.println(toPrint);
}
}
}即使在这种情况下,在n=2中,这种方法也有一定的优势。你很容易避免--如果--这两个问题都是这样的话,这对读者来说是显而易见的。不需要考虑布尔逻辑。Tom进一步讨论了这里的优点,尽管它适用于JavaScript,而不是JavaScript。
一个单独的问题是指我们是否需要所有这些支撑。
(顺便说一句,我去复数了你的虚拟变量的名字,所以它看起来不像一个数字列表。)
发布于 2020-07-23 16:15:09
就我个人而言,我在代码中看到了多个“任务”。
对于我来说,“开始”是一个额外的任务,因为如果我希望我的应用程序在不同的环境(在本地机器上计数为100,但在我的超级计算机上为100万)上的行为不同,那么这里将是获取所需信息并将其转发到“功能”的地方。
是的,这是为这个小代码示例设计的,但是我们倾向于使用小代码示例,然后将其应用于大型应用程序。因此,我喜欢以大枪为小例子,只要目标是训练。:-)
在我看来,下面的代码要长得多,但它更容易理解,因为每个方法名称都给出了其中将要发生的“上下文”。这使得跟踪和理解底层代码变得更加容易。
此外,当“任务”在逻辑上分离时,那么对其应用更改就容易多了。更改“规则”只意味着更改convertNumber函数。更改其打印结果的方式只会更改output方法。另外,在额外的类中提取这些功能并注入它们也是非常容易的。然后,在外部(环境)决定输出应该通过System.out.println或图形界面进行,这将是一件轻而易举的事情。
但像往常一样,许多方法使我们达到我们的目标(S)。和往常一样,如果你选择一种方式,那么你会得到好的东西,但你必须付出代价。我的方法提供了灵活性,但它更多的是写作。我认为,在高性能环境中,最低限度的慢速性能只是一个论点,我们必须计算每一个周期。
public class FizzBuzzApp {
public static void main(String[] args) {
FizzBuzz game = new FizzBuzz();
game.playGame();
}
}
public class FizzBuzz {
public void playGame(){
for (int numbers = 1; numbers <= 100; numbers++) {
String result = convertNumber(number);
output(result);
}
}
private String convertNumber(int number) {
if (numbers % 3 == 0 && numbers % 5 == 0) {
return "Fizz Buzz";
} else if (numbers % 3 == 0) {
return "Fizz";
} else if (numbers % 5 == 0) {
return "Buzz";
} else {
return String.valueOf(number);
}
}
private void output(String value) {
System.out.println(value);
}
}很高兴听到你对我的方法的看法
https://codereview.stackexchange.com/questions/245902
复制相似问题