【问题标题】:Java Solving FizzBuzz problem through converting an ArrayList to an array issueJava通过将ArrayList转换为数组来解决FizzBu​​zz问题
【发布时间】:2023-03-23 16:47:01
【问题描述】:

所以我试图通过改变一个 String ArrayList 并在将上述 ArrayList 转换为 String 数组后返回一个字符串数组来解决 Java 中的 FizzBu​​zz 问题

这是我目前所拥有的:

import java.util.ArrayList;
public class FizzBuzz 
{
    public static void main(String args[])
    {
        ArrayList<String> arrList = new ArrayList<String>();
        for (int i = 1; i<=100; i++)
        {
            arrList.add(String.valueOf(i));
        }

        for (int i = 0; i <arrList.size(); i++)
        {
            if (Integer.parseInt(arrList.get(i)) % 3 == 0 && Integer.parseInt(arrList.get(i)) % 5 == 0)
            {
                arrList.set(i, "FizzBuzz");
            }
            if (Integer.parseInt(arrList.get(i)) % 3 == 0)
            {
                arrList.set(i, "Fizz");
            }
            if (Integer.parseInt(arrList.get(i)) % 5 == 0)
            {
                arrList.set(i, "Buzz");
            }   
        }

        String[] arr = arrList.toArray(new String[arrList.size()]);
        System.out.println(arr);
    }
  }

它给我的错误状态:

   "Fizz"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at FizzBuzz.main(FizzBuzz.java:23)

我知道这个错误与无法检查 arrayList 中的字符串元素是否是 3,5 等的倍数有关,但这就是我使用 Integer.parseInt() 方法的原因这就是为什么我对自己做错了什么感到困惑。

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: java fizzbuzz


    【解决方案1】:
    import java.util.ArrayList;
    public class FizzBuzz 
    {
        public static void main(String args[])
        {
            ArrayList<String> arrList = new ArrayList<String>();
            for (int i = 1; i<=100; i++)
            {
                arrList.add(String.valueOf(i));
            }
    
            //problem lies with all the if statements change them to if-else
            for (int i = 0; i <arrList.size(); i++)
            {
                if (Integer.parseInt(arrList.get(i)) % 3 == 0 && Integer.parseInt(arrList.get(i)) % 5 == 0)
                {
                    arrList.set(i, "FizzBuzz");
                }
                if (Integer.parseInt(arrList.get(i)) % 3 == 0)
                {
                    arrList.set(i, "Fizz");
                }
                if (Integer.parseInt(arrList.get(i)) % 5 == 0)
                {
                    arrList.set(i, "Buzz");
                }   
            }
            //this will print the list
            arrList.stream().forEach(x -> System.out.println(x));
        }
      }
    

    这是因为你把 3 改成 "Fizz" 之后,这会抛出一个错误 -> Integer.parseInt("Fizz")。 我添加了一条评论,将 if 更改为 if-else。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      上帝创造了else...

      您应该这样做,以便当if 命中时,跟随它的if(s) 不会运行。否则他们会尝试将新替换的字符串解析为数字。实际操作:在第二个和第三个ifs 前面写一个else

      【讨论】:

        【解决方案3】:

        问题是,在你的数字 3 进入 if %3 和 if %5 之后,它也会为 %3 和 %5 输入单独的 if,它基本上会检查转换为整数的“FizzBu​​zz”是否为 %3 .

        解决方案将if (%3) and if (%5) 转换成else if (%3) and else if (%5)

        【讨论】:

        • 最后的打印也不正确,我想这样你会打印该列表的哈希码。我建议循环浏览并一张一张打印出来。
        • 将列表字符串化为[item1,item2,...],其中item1 是第一项的.toString()-ed 形式,依此类推。
        猜你喜欢
        • 2023-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 1970-01-01
        • 2023-02-22
        相关资源
        最近更新 更多