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
相关产品推荐
相关产品推荐

