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

Java二维数组ArrayOutOfBoundException异常问题求助

解决ArrayOutOfBoundException异常问题

问题根源

  1. 二维数组初始化时机错误:你在simpleText还为空的时候就初始化了eachSentence,此时simpleText.size()返回0,导致eachSentence是一个长度为0的二维数组。后续往simpleText添加句子后,eachSentence的第一维长度根本不足以容纳这些句子。
  2. 子数组未初始化:就算eachSentence第一维长度正确,你也没有为每个子数组eachSentence[i]分配内存空间,直接访问eachSentence[i][j]会因为子数组为null而触发异常。
  3. 冗余代码:内层循环里重复获取sentence,完全没必要,还降低效率。

修正后的代码

第一步:调整数组初始化时机

必须等用户把所有句子都添加到simpleText之后,再初始化eachSentence:

ArrayList<String> simpleText = new ArrayList<String>();
// 先完成用户输入,将所有句子添加到simpleText中
// 示例:
// simpleText.add("这是第一个句子");
// simpleText.add("这是第二个句子");

// 填充完数据后再初始化二维数组
char[][] eachSentence = new char[simpleText.size()][];

第二步:修改setStringArray方法

先为每个子数组分配对应长度的空间,再逐个赋值字符(或者直接用toCharArray()简化代码):

手动循环赋值版本
public void setStringArray() {
    for (int i = 0; i < simpleText.size(); i++) {
        String sentence = simpleText.get(i);
        // 初始化当前行的字符数组长度为句子长度
        eachSentence[i] = new char[sentence.length()];
        for (int j = 0; j < sentence.length(); j++) {
            eachSentence[i][j] = sentence.charAt(j);
        }
    }
}
简化版本(推荐)

利用String自带的toCharArray()方法直接转换,省去手动循环:

public void setStringArray() {
    for (int i = 0; i < simpleText.size(); i++) {
        eachSentence[i] = simpleText.get(i).toCharArray();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:33:18