Java二维数组ArrayOutOfBoundException异常问题求助
解决ArrayOutOfBoundException异常问题
问题根源
- 二维数组初始化时机错误:你在
simpleText还为空的时候就初始化了eachSentence,此时simpleText.size()返回0,导致eachSentence是一个长度为0的二维数组。后续往simpleText添加句子后,eachSentence的第一维长度根本不足以容纳这些句子。 - 子数组未初始化:就算
eachSentence第一维长度正确,你也没有为每个子数组eachSentence[i]分配内存空间,直接访问eachSentence[i][j]会因为子数组为null而触发异常。 - 冗余代码:内层循环里重复获取
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
相关产品推荐
相关产品推荐

