1

我正在尝试访问作为对象一部分的数组。

我在 Main.main(Main.java:24) 的 OrderedStringList.add(OrderedStringList.java:21) 处收到错误“线程“main”java.lang.NullPointerException 中的异常”

我已经将我的程序精简到了最基本的部分,删除了所有可能干扰输出的内容。

public class Main {

public static void main(String[] args) {

    int x = 5;

    OrderedStringList myList = new OrderedStringList();

    myList.add(x);
    }
} //end class

此代码引用了 OrderedStringList 类。

public class OrderedStringList {

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}

public void add(int y) {
    values[0] = y;
    System.out.print(values[0]);
}

我假设错误中的数字 21 和 24 是行号。因为我的原始代码中有一些东西被注释掉了,所以我发布的代码中间通常会有一些内容。main 中的第 24 行是:myList.add(x);. OrderedStringList 的第 21 行是:values[0] = y;

我猜我缺少一些非常简单的东西。任何事情都值得赞赏。

谢谢。

4

4 回答 4

5

这里

OrderedStringList(){
    int values[] = new int[5];
}

你影子班级成员values

将其更改为:

OrderedStringList(){
    values = new int[5];
}
于 2013-09-27T00:40:50.597 回答
2

你已经声明values了两次......

public int values[];

OrderedStringList(){
    int values[] = new int[5];
}

这通常称为阴影。

将构造函数中数组的初始化更改为...

public int values[];

OrderedStringList(){
    value = new int[5];
}

反而...

于 2013-09-27T00:40:58.767 回答
2

values[]这在方法的范围内声明了数组。

OrderedStringList(){
    int values[] = new int[5];
}

如果想参考Class范围使用

OrderedStringList(){
    values = new int[5];
}
于 2013-09-27T00:40:58.813 回答
1

使用 line ,您声明了一个仅存在于构造函数中的int values[] = new int[5];全新的。int[]将其更改为values = new int[5];.

于 2013-09-27T00:41:19.197 回答