java.lang.NullPointerException при добавлении двух чисел - PullRequest
2 голосов
/ 27 февраля 2012

Я новичок в Java и пытаюсь написать простую программу, которая в основном запрашивает ввод данных пользователем, а затем возвращает среднее значение.Я продолжаю получать java.lang.NullPointerException при попытке добавить.Почему это?Это код, который я до сих пор.

import java.io.*;
class Numbers {
    public static void main(String[] args) {
            System.out.println("Hello USER! This is TRON, state the number of NUMBERS you wish to enter and I will return the Average..."); // Display the string.
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            Integer loopnum = null;
            Integer i = null;
            Long num = null;
            Long sum = null;
            Long avg = null;

            try {
                loopnum = Integer.parseInt(br.readLine());

            }
            catch(IOException e){
                System.out.println("Error!");
                System.exit(1);
            }
            System.out.println("OK now enter your numbers.");
            for (i=1;i<=loopnum; i++) {
                try {
                System.out.println("Enter number "+i+":");
                num = Long.parseLong(br.readLine());
                sum += num;
                }
                catch(IOException e){
                    System.out.println("Error!");
                    System.exit(1);
                }
            }

                avg = sum / loopnum;
                System.out.println("TRON here, Your average is: " + avg);




    }
}

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

На всех остальных ответах не указывается, почему вы получаете исключение нулевого указателя. Вы используете объект Long вместо примитива long. Таким образом, всякий раз, когда вы используете прямую арифметическую операцию (например, +), компилятор распаковывает Long в long, вызывая Long.longValue(). Так sum += sum переводится на:

sum = Long.valueOf(sum.longValue() + sum.longValue());

Поскольку sum равно нулю, вы получите исключение нулевого указателя. Большинство людей избегают этого, просто используя примитив long.

1 голос
/ 27 февраля 2012

Вы должны инициализировать Long переменные в 0L, а не null.Более того, используйте примитивный тип long вместо типа оболочки Long и int вместо Integer, вам не нужно использовать объекты оболочки здесь!Сделайте это:

int loopnum = 0;
int i = 0;
long num = 0L;
long sum = 0L;
long avg = 0L;

Вышеуказанное избавит от NullPointerException и позволит избежать ненужной упаковки / распаковки значений между примитивными и объектными типами данных.

1 голос
/ 27 февраля 2012

Инициализировать!Измените объявление на Long sum = 0L в начале вашего кода.Эта строка проблематична в вашем цикле:

sum += num; 

она аналогична sum = sum + num; Оценка выполняется справа налево, и вы видите, что она пытается добавить переменную num с переменной null sum.

0 голосов
/ 27 февраля 2012

инициализируйте вашу переменную суммы ненулевым значением. 0L возможно.

замените эту строку sum += num на sum = sum + num .. это более читабельно.

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