Как исправить ошибку приложения в цикле for с помощью массива - PullRequest
0 голосов
/ 19 февраля 2019

мой вопрос может отличаться от названия.У меня есть EditText, который по умолчанию "visibility.Gone":

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" />

Есть кнопка с именем "incrementbtn", которая делает текст редактирования видимым при нажатии:

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

и у меня есть цикл for, который печатает некоторые строки в текстовом представлении:

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 editt5 = edit5.getText().toString();

Это так:

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

, когда я добавляю "editt5" в строку, приложение вылетает: (

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Это сбой, потому что вы получаете java.lang.ArrayIndexOutOfBoundsException.

Почему?Потому что, когда у вас есть 5 элементов внутри массива, как это

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

, после второго цикла i становится 4, что является фактической длиной names.Но внутри цикла вы пытаетесь получить names[i + 1], что составляет names[5].

Индекс массива начинается с 0, поэтому names[5] будет означать 6-й элемент.Но у вас его нет, и это приводит к сбою.

0 голосов
/ 19 февраля 2019

Когда в 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...