添加两个数字时java.lang.NullPointerException

时间:2012-02-27 02:19:31

标签: java command-line

我是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 个答案:

答案 0 :(得分:1)

初​​始化!在代码开头将声明更改为Long sum = 0L。这一行在你的循环中存在问题:

sum += num; 

sum = sum + num;相同评估从右到左完成,您会看到它尝试添加num变量和变量null

答案 1 :(得分:1)

您应该在Long中初始化0L个变量,而不是null。更好的是,使用原始类型long而不是包装类型Longint而不是Integer,您不需要在这里使用包装器对象!这样做:

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

上面将摆脱NullPointerException并避免在原始数据类型和对象数据类型之间不必要的装箱/取消装箱。

答案 2 :(得分:1)

所有其他答案都无法解决您获取空指针异常的原因。您正在使用Long对象而不是long原语。因此,只要您使用直接算术运算(例如+),编译器就会通过调用Long.longValue()Long取消装入long。所以sum += sum被翻译为:

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

由于sum为null,因此最终会出现空指针异常。大多数人只使用primitve long来避免这种情况。

答案 3 :(得分:-2)

使用非null值初始化sum变量。也许0L。

将此行sum += num替换为sum = sum + num ..这更具可读性。