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

CSES Permutations题Java代码Index out of bounds报错排查求助

报错直接原因

第19行even.set(0, 4)触发越界:set()方法是替换ArrayList中已存在索引的元素,你刚初始化的even是空列表,没有索引0、1对应的元素,调用set直接抛出越界异常。

其他代码问题
  • 分支逻辑无终止:你判断n==1、n为2/3时已经输出了结果,但代码没有加return,仍然会继续执行后面的列表操作,无论输入什么n都会走到报错的set代码。
  • 遍历条件错误:for (int i = 1; i < n+1 && i > 4; i++)的条件永远不成立,i从1开始,i>4为false,循环根本不会执行,大于4的数不会被加入列表。
  • stringjoin的set操作同样存在越界风险:初始化的stringjoin是空列表,调用set(i,m)也会触发越界,且循环从i=1开始,漏掉了列表第一个元素。
  • 排列生成逻辑冗余:美丽排列的正确生成规则非常简单,先输出所有升序偶数、再输出所有升序奇数即可,完全不需要手动加4、2、1的操作,逻辑写复杂了反而容易出错。
修复后可运行代码
import java.util.*;
public class cses6 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        if (n == 1) {
            System.out.println(1);
            return;
        }
        if (n < 4) {
            System.out.println("NO SOLUTION");
            return;
        }
        StringBuilder sb = new StringBuilder();
        // 先拼接所有偶数
        for (int i = 2; i <= n; i += 2) {
            sb.append(i).append(" ");
        }
        // 再拼接所有奇数
        for (int i = 1; i <= n; i += 2) {
            sb.append(i).append(" ");
        }
        // 去掉末尾多余空格输出
        System.out.println(sb.substring(0, sb.length() - 1));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:57:04