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

Android应用添加可见EditText内容到数组后循环崩溃问题

解决添加EditText内容到数组后应用崩溃的问题

嘿,我一眼就看穿你这个崩溃的根源了——数组索引越界异常(ArrayIndexOutOfBoundsException)!

你原来的names数组是4个元素(偶数个),for循环里每次i += 2,取names[i]和names[i+1]配对完全没问题:

  • i=0时,取索引0和1,合理
  • i=2时,取索引2和3,也合理

但你把editt5加进去后,数组变成5个元素(奇数个)了!循环会跑到i=4的时候,这时候i+1=5,可数组的最大索引只有4,访问names[5]直接就触发崩溃了。

给你两个实用的解决方案:

方案1:动态处理奇数个元素的情况(最灵活)

修改你的代码,在循环时先检查i+1是否超出数组范围,避免越界,同时单独处理最后一个没配对的元素:

// 先用ArrayList来动态构建集合,比固定数组灵活
List<String> namesList = new ArrayList<>();
namesList.add(edit2.getText().toString());
namesList.add(edit1.getText().toString());
namesList.add(edit3.getText().toString());
namesList.add(edit4.getText().toString());

// 只有当edit5可见时,才把它加入集合
if (edit5.getVisibility() == View.VISIBLE) {
    namesList.add(edit5.getText().toString());
}

// 打乱顺序
Collections.shuffle(namesList);
String[] names = namesList.toArray(new String[namesList.size()]);

StringBuilder text = new StringBuilder();
for (int i = 0; i < names.length; i += 2) {
    if (i + 1 < names.length) {
        // 有配对元素,正常拼接
        text.append(names[i] + " with " + names[i + 1]);
    } else {
        // 只剩最后一个元素,单独处理
        text.append(names[i] + " 单独一组");
    }
    // 每组之间加换行,让输出更清晰
    if (i != names.length - 1 && i != names.length - 2) {
        text.append("\n");
    }
}
textView.setText(text.toString());

方案2:确保数组始终是偶数个元素(匹配你原本的配对逻辑)

如果你不想处理单独元素的情况,可以在添加editt5时,同时补充一个占位符(比如“无人”),保证元素数量是偶数:

List<String> namesList = new ArrayList<>();
namesList.add(edit2.getText().toString());
namesList.add(edit1.getText().toString());
namesList.add(edit3.getText().toString());
namesList.add(edit4.getText().toString());

if (edit5.getVisibility() == View.VISIBLE) {
    namesList.add(edit5.getText().toString());
    // 补充占位符,保证偶数个元素
    namesList.add("无人");
}

Collections.shuffle(namesList);
String[] names = namesList.toArray(new String[namesList.size()]);

StringBuilder text = new StringBuilder();
for (int i = 0; i < names.length; i += 2) {
    text.append(names[i] + " with " + names[i + 1]);
    if (i != names.length - 2) {
        text.append("\n");
    }
}
textView.setText(text.toString());

小提示

以后写涉及数组索引的循环时,一定要多留个心眼——当你用i+1、i-1这种偏移索引时,必须先判断这个索引是否在数组的合法范围内(0到数组长度-1),不然很容易踩越界的坑!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:49:47