NullPointerException: две коллекции и цикл for - PullRequest
0 голосов
/ 20 марта 2010

В другом методе (ALGO_1) я выполняю поиск элементов <background> и проверяю, что значение H_NAME равно значению, введенному в main. Когда я пытаюсь запустить код, я получаю исключение нулевого указателя. При попытке напечатать (System.out.println и т. Д.) Значение H_NAME после каждого цикла for во фрагменте, я также получаю нулевое выражение, возвращаемое мне.

Я вполне уверен, что коллекция просто не хранит данные, собранные сканером. Но когда я проверяю размер коллекции с size(), это примерно правильный размер.

Основные вопросы:

  • из метода readBackground - это data.add не в том месте?
  • Является ли фрагмент просто структурированным неправильно?

Когда я использую System.out.println, чтобы проверить имя значения фона объекта, время начала, приращение и т. Д., Они распечатываются нормально.

for (Hydro hd: hydros) {        
    System.out.println(hd.H_NAME);  
    for (Background back : backgs) {  
        System.out.println(back.H_NAME);  
        if (back.H_NAME.equals(hydroName)) { //get error here  

            public static Collection<Background> readBackground(String url) throws IOException {

                URL u = new URL(url);
                InputStream is = u.openStream();  
                InputStreamReader isr = new InputStreamReader(is);  
                BufferedReader b = new BufferedReader(isr);  
                String line ="";  
                Vector<Background> data = new Vector<Background>();  
                while ((line = b.readLine())!= null) {  
                    Scanner s = new Scanner(line);  
                    String name = s.next();  
                    double starttime = Double.parseDouble(s.next());  
                    double increment = Double.parseDouble(s.next());  
                    double sum = 0;  
                    double p = 0;  
                    double nterms = 0;  
                    while ((s.hasNextDouble())) {  
                        p = Double.parseDouble(s.next());  
                        nterms++;  
                        sum += p;  
                    }  
                    double pbmean = sum/nterms;  
                    Background SAMP = new Background(name, starttime, increment, pbmean);  
                    data.add(SAMP);  
                }  
                return data;  
            }

1 Ответ

0 голосов
/ 20 марта 2010

Если вы получаете NullPointerException (NPE) при вызове back.H_NAME.equals(xxx), это, вероятно, означает, что либо back равно нулю, либо back.H_NAME равно нулю.

Вы говорите, что когда вы печатаете back.H_NAME, вы получаете ноль, поэтому это говорит о том, что back.H_NAME на самом деле равно нулю. Вы не показали нам никакого кода, описывающего класс Background, поэтому трудно оказать вам дополнительную помощь.

...