猿问

arraylist 中的 FizzBu​​zz 解决方案

我被要求进行经典的 FizzBuzz 测试。但是,该问题还有一项额外任务,即在 ArrayList 中显示结果。我知道您不能将一个整数和一个字符串值放在一个列表中。因此,这给我带来了问题。

我已经尝试将从循环中获得的数字转换为字符串,但是它变得太复杂了,我想也许我把事情复杂化了。或者,也许我做错了什么,因为如此简单的任务如此耗时。

下面我包含了我尝试过的最新代码和我得到的指导意见。

  1. 实现将获取列表范围并解析值以解决 FizzBuzz 问题的循环。

  2. 您需要在循环内将成功值添加到私有类变量“私有列表范围”。

  3. 例如,while 循环 3 将等于应该添加到 fizzBuzzList 中的 fizz。

  4. 下面设置了两个私有变量,用于保存列表和 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”,因此这给了我一个错误。


一段时间以来,我一直在尝试解决这个问题,但我已经没有什么想法可以尝试了。任何建议都会很有帮助和赞赏。谢谢。


料青山看我应如是
浏览 171回答 3
3回答

芜湖不芜

此解决方案int使用函数将 s 转换为字符串Integer.toString(int x)。List<String> list = IntStream.rangeClosed(startOfRange, endOfRange)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .mapToObj(this::convert)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());System.out.println(list);private String convert(int number) {&nbsp; &nbsp; if (((number % 3) == 0) && ((number % 5) == 0)) {&nbsp; &nbsp; &nbsp; &nbsp; return "FizzBuzz";&nbsp; &nbsp; } else if ((number % 3) == 0) {&nbsp; &nbsp; &nbsp; &nbsp; return "Fizz";&nbsp; &nbsp; } else if ((number % 5) == 0) {&nbsp; &nbsp; &nbsp; &nbsp; return "Buzz";&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return Integer.toString(number);&nbsp; &nbsp; }}

红颜莎娜

这是一个流版本。它生成一个从 1 到 100 的封闭范围,然后使用嵌套的三元运算符将整数相应地映射到适当的值。&nbsp; &nbsp; &nbsp; List<String> list = IntStream.rangeClosed(1, 100).mapToObj(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; n -> n % 15 == 0 ? "FizzBuzz"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : n % 3 == 0 ? "Fizz"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : n % 5 == 0 ? "Buzz"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : Integer.toString(n)).collect(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Collectors.toList());&nbsp; &nbsp; &nbsp; System.out.println(list);

千巷猫影

我会将所有值存储到 aList<String>而不是泛型中,并利用Integer.toString()将迭代器转换为 aString来存储值。在我的版本中,这个FizzBuzz类看起来像这样:private List<String> fizzBuzzList;public FizzBuzz(int start, int end){&nbsp; &nbsp; fizzBuzzList = new ArrayList<>();&nbsp; &nbsp; this.populateFizzBuzz(start, end);}private void populateFizzBuzz(int start, int end){&nbsp; &nbsp; for (int i = start ; i < end; i++){&nbsp; &nbsp; &nbsp; &nbsp; if (((i % 3) == 0) && ((i % 5) == 0)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fizzBuzzList.add("FizzBuzz");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else if ((i % 3) == 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fizzBuzzList.add("Fizz");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else if ((i % 5) == 0){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fizzBuzzList.add("Buzz");&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fizzBuzzList.add(Integer.toString(i));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}public void printFizzBuzz(){&nbsp; &nbsp; for (String s : fizzBuzzList){&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(s);&nbsp; &nbsp; }}我个人并没有优先使用 Java 8 流,我觉得它会使一个简单的问题复杂化,并使它变得更加复杂。您可以在您的main或任何静态方法中使用它,如下所示:FizzBuzz fb = new FizzBuzz(1, 101);fb.printFizzBuzz();请注意,101 是独占的,而 1 是包含在内的,因此这将从 1 迭代到 100。
随时随地看视频慕课网APP

相关分类

Java
我要回答