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條經驗 獲得超13個贊
這是一個流版本。它生成一個從 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。
添加回答
舉報