3 回答
TA贡献1796条经验 获得超7个赞
此解决方案int使用函数将 s 转换为字符串Integer.toString(int x)。
List<String> list = IntStream.rangeClosed(startOfRange, endOfRange)
.mapToObj(this::convert)
.collect(Collectors.toList());
System.out.println(list);
private String convert(int number) {
if (((number % 3) == 0) && ((number % 5) == 0)) {
return "FizzBuzz";
} else if ((number % 3) == 0) {
return "Fizz";
} else if ((number % 5) == 0) {
return "Buzz";
} else {
return Integer.toString(number);
}
}
TA贡献1842条经验 获得超12个赞
这是一个流版本。它生成一个从 1 到 100 的封闭范围,然后使用嵌套的三元运算符将整数相应地映射到适当的值。
List<String> list = IntStream.rangeClosed(1, 100).mapToObj(
n -> n % 15 == 0 ? "FizzBuzz"
: n % 3 == 0 ? "Fizz"
: n % 5 == 0 ? "Buzz"
: Integer.toString(n)).collect(
Collectors.toList());
System.out.println(list);
TA贡献1829条经验 获得超7个赞
我会将所有值存储到 aList<String>而不是泛型中,并利用Integer.toString()将迭代器转换为 aString来存储值。
在我的版本中,这个FizzBuzz类看起来像这样:
private List<String> fizzBuzzList;
public FizzBuzz(int start, int end){
fizzBuzzList = new ArrayList<>();
this.populateFizzBuzz(start, end);
}
private void populateFizzBuzz(int start, int end){
for (int i = start ; i < end; i++){
if (((i % 3) == 0) && ((i % 5) == 0)) {
fizzBuzzList.add("FizzBuzz");
}
else if ((i % 3) == 0) {
fizzBuzzList.add("Fizz");
}
else if ((i % 5) == 0){
fizzBuzzList.add("Buzz");
}
else{
fizzBuzzList.add(Integer.toString(i));
}
}
}
public void printFizzBuzz(){
for (String s : fizzBuzzList){
System.out.println(s);
}
}
我个人并没有优先使用 Java 8 流,我觉得它会使一个简单的问题复杂化,并使它变得更加复杂。
您可以在您的main或任何静态方法中使用它,如下所示:
FizzBuzz fb = new FizzBuzz(1, 101);
fb.printFizzBuzz();
请注意,101 是独占的,而 1 是包含在内的,因此这将从 1 迭代到 100。
添加回答
举报