You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java运行FizzBuzz代码时List抛出IndexOutOfBoundsException异常如何解决

异常根因
  • new ArrayList<>(n+1)传入的是列表的初始容量,仅代表底层数组的初始化长度,不会给列表添加任何实际元素,初始化完成后列表的size()返回值还是0。
  • set(index, value)方法只能修改列表中已存在的索引位置,要求入参index必须小于当前列表的size。你第一次循环就调用ans.set(0, ...),此时列表size为0,自然触发索引越界异常。
修复方案

方案1:使用add()方法追加元素(最简洁,推荐)

因为你是按顺序生成1到n的对应结果,直接用add()往列表末尾追加元素即可,不需要手动维护索引:

public List<String> fizzBuzz(int n) {
    List<String> ans = new ArrayList<>();
    for(int i = 1; i <= n; i++){
        if(i%3 == 0 && i%5 == 0){
            ans.add("FizzBuzz"); 
        }
        else if(i%3 == 0){
            ans.add("Fizz"); 
        }
        else if(i%5 == 0){
            ans.add("Buzz"); 
        }
        else{
            ans.add(Integer.toString(i)); 
        }
    }
    return ans;
}

方案2:保留set()用法的修复方式

如果你有特殊需求需要用set方法赋值,需要先把列表填充到对应长度,再调用set方法修改:

public List<String> fizzBuzz(int n) {
    List<String> ans = new ArrayList<>(n);
    // 先填充n个空元素,把列表size扩容到n
    for (int i = 0; i < n; i++) {
        ans.add("");
    }
    for(int i = 1; i <= n; i++){
        if(i%3 == 0 && i%5 == 0){
            ans.set(i-1, "FizzBuzz"); 
        }
        else if(i%3 == 0){
            ans.set(i-1, "Fizz"); 
        }
        else if(i%5 == 0){
            ans.set(i-1, "Buzz"); 
        }
        else{
            ans.set(i-1, Integer.toString(i)); 
        }
    }
    return ans;
}

内容的提问来源于stack exchange,提问作者user9890324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:54:03