Java: проблема инициализации, невозможно вывести «назначенные» значения из arrayList - PullRequest
0 голосов
/ 11 апреля 2010
$ javac ArrayListTest.java 
$ java ArrayListTest 
$ cat ArrayListTest.java 
import java.io.*;
import java.util.*;

public class ArrayListTest{

    public static void main(String[] args) {
        try {
            String hello ="oeoaseu oeu hsoae sthoaust hoaeut hoasntu";
            ArrayList<String> appendMe = null;

            for(String s : hello.split(" "))
                appendMe.add(s+" ");

            for(String s : appendMe)
                System.out.println(s);
            //WHY DOES IT NOT PRINT?
        }catch(Exception e){
        }
    }
}

Ответы [ 4 ]

7 голосов
/ 11 апреля 2010

Когда вы пытаетесь вызвать appendMe.add(), генерируется NullPointerException, поскольку вы явно устанавливаете его на null, поэтому выполнение переходит прямо к блоку catch, и эта секунда цикла даже не запускается. Однако вы перехватываете все исключения молча, поэтому ошибка не отображается. Вероятно, у вас не должно быть этого глобального try / catch; по крайней мере, добавьте e.printStackTrace(); в блок catch, чтобы исключения не просто игнорировались

5 голосов
/ 11 апреля 2010

Во-первых, вы заключаете свой код в блок try/catch, но проглатываете исключение , которое является ОЧЕНЬ ПЛОХОЙ практикой. Не делайте этого, на самом деле это причина, по которой вы не получаете здесь никакого полезного сообщения. Поэтому либо зарегистрируйте исключение, либо напечатайте e.printStackTrace в блоке catch, либо просто удалите try/catch, проверенных Exception нет.

Во-вторых, вы должны программировать для интерфейсов, а не для конкретных классов (таким образом, вы можете изменить конкретную реализацию, не изменяя весь код). Итак, вместо:

ArrayList<String> appendMe;

Объявляет:

List<String> appendMe;

В-третьих, вам нужно где-то инициализировать appendMe (это на самом деле основная причина неисправности и позже вызывает NullPointerException), например, при объявлении:

List<String> appendMe = new ArrayList<String>();

Наконец, я рекомендую использовать скобки в ваших циклах, даже если есть одна строка.

Подведем итог:

import java.io.*;
import java.util.*;

public class ArrayListTest{

    public static void main(String[] args) {
        String hello ="oeoaseu oeu hsoae sthoaust hoaeut hoasntu";
        List<String> appendMe = new ArrayList<String>();

        for(String s : hello.split(" ")) {
            appendMe.add(s+" ");
        }

        for(String s : appendMe) {
            System.out.println(s);
        }
    }
}
4 голосов
/ 11 апреля 2010

Вам нужно инициализировать appendMe.

appendMe = new ArrayList<String>();
3 голосов
/ 11 апреля 2010

Написание кода с пустыми catch блоками - очень плохая практика. Не привыкать делать это. Хотя suihock уловил основную причину вашей проблемы, если вы напечатали исключение в блоке catch:

} catch (Exception e) {
    System.out.println("Got an exception: " + e.getMessage());
}

... вы бы сразу нашли причину своей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...