Добавить строку в массив без исключения - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь добавить строку Smith B 55 в массив

            String line = bufRdr.readLine();
            if (line != null && !line.equalsIgnoreCase("")){
            for (s = 0; s < 3; ) {
                for (String word : line.split(" ")) {
                    singleMarkArray[s] = word;
                    s++;
                }
            }
            System.out.println(Arrays.toString(singleMarkArray));

Почему это оператор if вызывает зависание программы?

Без чека я получаю исключение java.lang.nullPointerException

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 12 марта 2019

Зачем вам нужны петли for и for each?
Вы хотите разбить строку на слова и поместить эти слова в массив singleMarkArray, верно?
Вы можете сделать это так:

String line = bufRdr.readLine();
if (line != null && !line.equalsIgnoreCase("")) {
    singleMarkArray = line.split("\\s+");
    // the above line checks for multiple spaces
    System.out.println(Arrays.toString(singleMarkArray));
}

Так что вам не нужно беспокоиться о том, что размер singleMarkArray не равен количеству слов.
Также ваша логика неверна.
Вы используете переменную s в качестве счетчика цикла for и увеличиваете ее внутри цикла for each, поэтому ее значение равно undefined , поскольку вы не знаете количество слов.
Что касается java.lang.nullPointerException, которое вы получаете, это происходит, когда больше нет строк для чтения, так что это:

line = bufRdr.readLine();

назначит null на line.
Вот почему вам всегда нужно проверять после readLine():

if (line != null...) {...}
1 голос
/ 12 марта 2019

исправьте внешнюю петлю:

for (s = 0; s < 3; s++ ) {
   for (String word : line.split(" ")) {
       singleMarkArray[s] = word;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...