如何使用数组修复For循环中的应用程序崩溃

时间:2019-02-19 12:49:19

标签: android arrays for-loop

我的问题可能与标题不同。我有一个默认为“ visibility.Gone”的Edittext:

Xml文件:

<EditText
android:id="@+id/edit5"
android:layout_width="203dp"
android:layout_height="wrap_content"
android:hint="edit5"
android:inputType="textPersonName"
android:gravity="center"
android:visibility="gone" />

有一个名为“ increasebtn”的按钮,单击该按钮可使编辑文本可见:

if (edit5.getVisibility() == View.GONE) {
        edit6.setVisibility(View.VISIBLE);
        edit5.setVisibility(View.VISIBLE);
}

我有一个for循环,可在textview中打印一些字符串:

String editt1 = edit1.getText().toString();
                    String editt2 = edit2.getText().toString();
                    String editt3 = edit3.getText().toString();
                    String editt4 = edit4.getText().toString();
                    String editt5 = edit5.getText().toString();


                    String[] names = {editt2, editt1, editt3, editt4};
                    List<String> namesstr = Arrays.asList(names);
                    Collections.shuffle(namesstr);
                    names = namesstr.toArray(new String[namesstr.size()]);


                    StringBuilder text = new StringBuilder();
                    for (int i = 0; i < names.length; i = i + 2) {
                        text.append(names[i] + " with " + names[i + 1]);

                    }
                    textView.setText(text.toString());

这些代码很好,结果是这样的:

  

金与山姆   约翰和爱迪生

问题是

当我将我的VISIBLE(不可见)添加到名为“名称”的String中时,应用程序崩溃。问题不在于

String editt5 = edit5.getText().toString();

就是这样:

String[] names = {editt2, editt1, editt3, editt4,editt5};

当我在字符串中添加“ editt5”时,应用崩溃:(

2 个答案:

答案 0 :(得分:0)

names中有4个项目时,此循环:

for (int i = 0; i < names.length; i = i + 2) {
    text.append(names[i] + " with " + names[i + 1]);
}

追加到StringBuilder

names[0] + " with " + names[1]
names[2] + " with " + names[3]

可以,但是如果有5个项目,它将尝试追加:

names[0] + " with " + names[1]
names[2] + " with " + names[3]
names[4] + " with " + names[5]

但是没有names[5],因为最后一项的索引是4,并且您的应用崩溃了。
您必须在names中具有偶数个项目才能应用此循环,除非您想要这样的东西:

for (int i = 0; i < names.length - 1; i++) {
    text.append(names[i] + " with " + names[i + 1]);
}

这将为您提供:

names[0] + " with " + names[1]
names[1] + " with " + names[2]
names[2] + " with " + names[3]
names[3] + " with " + names[4]

答案 1 :(得分:0)

由于您获得java.lang.ArrayIndexOutOfBoundsException而崩溃。

为什么?因为当您在数组中有5个这样的元素

String[] names = {editt2, editt1, editt3, editt4,editt5};

然后在第二个循环i之后变成4,这是names的实际长度。但是在循环内部,您尝试获取names[i + 1]的{​​{1}}。

数组索引从0开始,所以names[5]表示第6个元素。但是您没有它,它正在导致崩溃。