有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

arraylist中的java FizzBuzz解决方案

我要做的是经典的FizzBuzz测试。然而,这个问题还有一个额外的任务,就是在ArrayList中显示结果。我知道你不能把整数和字符串值放在一个列表中。因此,这给我带来了麻烦

我曾尝试将从循环中得到的数字转换成字符串,然而,它变得太复杂了,我想可能是我把事情复杂化了。或者也许我做错了什么,因为像这样的简单任务如此耗时

下面是我尝试过的最新代码和收到的指导意见

  1. 实现一个循环,该循环将获取列表范围并解析值以解决FizzBuzz问题
  2. 您需要在循环中向私有类变量“Private List range”添加一个成功的值
  3. 例如,虽然循环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”,因此这给了我一个错误

我一直在努力解决这个问题,现在我已经没有办法尝试了。任何建议都会很有帮助,我们将不胜感激。谢谢


共 (1) 个答案

  1. # 1 楼答案

    此解决方案使用Integer.toString(int x)函数将int转换为字符串

    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);
        }
    }