我的问题可能与标题不同。我有一个默认为“ visibility.Gone”的Edittext:
<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”时,应用崩溃:(
答案 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个元素。但是您没有它,它正在导致崩溃。