亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

arraylist 中的 FizzBu??zz 解決方案

arraylist 中的 FizzBu??zz 解決方案

料青山看我應如是 2023-05-10 17:07:02
我被要求進行經典的 FizzBuzz 測試。但是,該問題還有一項額外任務,即在 ArrayList 中顯示結果。我知道您不能將一個整數和一個字符串值放在一個列表中。因此,這給我帶來了問題。我已經嘗試將從循環中獲得的數字轉換為字符串,但是它變得太復雜了,我想也許我把事情復雜化了?;蛘?,也許我做錯了什么,因為如此簡單的任務如此耗時。下面我包含了我嘗試過的最新代碼和我得到的指導意見。實現將獲取列表范圍并解析值以解決 FizzBuzz 問題的循環。您需要在循環內將成功值添加到私有類變量“私有列表范圍”。例如,while 循環 3 將等于應該添加到 fizzBuzzList 中的 fizz。下面設置了兩個私有變量,用于保存列表和 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”,因此這給了我一個錯誤。一段時間以來,我一直在嘗試解決這個問題,但我已經沒有什么想法可以嘗試了。任何建議都會很有幫助和贊賞。謝謝。
查看完整描述

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

    }

}


查看完整回答
反對 回復 2023-05-10
?
紅顏莎娜

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


查看完整回答
反對 回復 2023-05-10
?
千巷貓影

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。


查看完整回答
反對 回復 2023-05-10
  • 3 回答
  • 0 關注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號