【发布时间】:2019-08-02 18:36:02
【问题描述】:
我接受了经典的 FizzBuzz 测试。但是,该问题有一个额外的任务,即在 ArrayList 中显示结果。我知道您不能只将整数和字符串值放在一个列表中。因此,这给我带来了问题。
我尝试将从循环中得到的数字转换为字符串,但是它变得太复杂了,我想也许我过于复杂了。或者也许我做错了什么,因为这样一个简单的任务非常耗时。
下面我包含了我尝试过的最新代码和给我的指南 cmets。
- 实现将采用 List Range 并解析值以解决 FizzBuzz 的循环。
- 您需要在循环中成功地向私有类变量“私有列表范围”添加一个值。
- 例如,while 循环 3 将等于 fizz,应将其添加到 fizzBuzzList。
-
下面设置了两个私有变量,用于保存列表和 FizzBuzz 列表。
public class FizzBuzz { private List range; private List fizzBuzzList = new ArrayList(); public FizzBuzz(int startOfRange, int endOfRange){ range = IntStream.rangeClosed(startOfRange, endOfRange).boxed().collect(Collectors.toList()); fizzBuzzIterator(range); } public void fizzBuzzIterator(List range){ for (int i = 1 ; i < range.size(); 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(i); } } } public List getFizzBuzzList() { return fizzBuzzList; } }
下面是我应该用来测试结果的测试代码。
public class FizzbuzzTests {
FizzBuzz fizzBuzz = new FizzBuzz(1,16);
@Test
public void fizzBuzzIteratorTest(){
List<String> minFizzBuzzList = List.of("1","2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz");
Assert.assertEquals(fizzBuzz.getFizzBuzzList(), minFizzBuzzList);
}
}
我看到的预期结果应该是这样的格式,例如 [1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz] .上面写的代码给了我相同格式的结果,但是不同的是,一个使用“java.util.ArrayList”而另一个使用“java.util.ImmutableCollections$ListN”,因此这给了我一个错误。
我一直试图解决这个问题已经有一段时间了,而且我已经没有什么想法可以尝试了。任何建议都会很有帮助和赞赏。谢谢。
【问题讨论】:
-
Integer.toString(num);。或者,使用 Object 作为列表的泛型类型。不管怎样,避免使用原始类型 -
您为什么不直接使用
List<String>并将数字存储为String。这不像您需要实际使用数字来进行计算。 -
只是一个提示。能被 3 和 5 整除的东西也能被 15 整除。