0

我正在尝试在 Java 中创建如下列表。也许我对 OOP 和 Java 很天真,因此我无法解决它。

我需要创建一个下表

Character Count Price
   A       1      2
   B       1      12
   C       1      1.25
   D       1      0.15
   A       4      7
   C       6      6

我创建了一个类,如下所示:

class ProductList {
    private char ProductName;
    private double Price;
    private int Count;  

    public char getProductName() {
    return ProductName;
}
public void setProductName(char productName) {
    ProductName = productName;
}
public double getPrice() {
    return Price;
}
public void setPrice(double price) {
    Price = price;
}
public int getCount() {
    return Count;
}
public void setCount(int count) {
    Count = count;
}
}

然后是我的主类,它创建了上面的产品表列表。

public class ProductEntryList {
     public static void main(String[] args) {
        ProductList[] entry = new ProductList[6];
        //Product Entry for A
        entry[0].setProductName('A');
        entry[0].setCount(1);
        entry[0].setPrice(2);

            //Similarly for other entries of product

        for(int loop = 0;loop<entry.length;loop++) {
            System.out.print(entry[loop].getProductName()+" ");
            System.out.print(entry[loop].getCount()+" ");
            System.out.print(entry[loop].getPrice()+"\n");
        }
    }
}

我很困惑为什么我会得到

    Exception in thread "main" java.lang.NullPointerException
    at ProductEntryList.main(ProductEntryList.java:13)

任何输入都会有所帮助。

4

3 回答 3

3

在 null 引用上使用点 (.) 运算符时会引发 Nullpointerexception。

如我所见,在你的主要方法的第一行,

ProductList[] entry = new ProductList[6];

您只是在初始化数组,而不是初始化数组中的产品列表条目。所以数组包含空条目。

您需要在该行之后添加以下代码:

for(int i=0;i<entry.size();i++)
{
    entry[i]=new ProductList();
}
于 2012-05-12T19:47:52.327 回答
2

编码

ProductList[] entry = new ProductList[6];

创建一个类型为 的新数组,ProductList默认情况下初始化为null. 在对它们执行点操作之前,您必须将它们初始化为某些东西,例如entry[0] = new ProductList();.

顺便说一句,请注意 Java 的命名约定——类通常大写,变量使用驼峰式。

于 2012-05-12T19:43:40.423 回答
0

@Makoto 绝对正确。您正在初始化一个可以容纳 6 个元素的字段。所有元素默认为空。在您的主要方法中,您必须为数组初始化 ProductList:

    entry[0] = new ProductList();
    entry[0].setProductName('A');
    entry[0].setCount(1);
    entry[0].setPrice(2);

其他的仍将为空。但是如果数组中只有一个对象,它仍然会失败。您的 for 循环将遍历所有字段,对于第一个应该成功,但对于另一个(为空)您尝试访问空对象。因此,再初始化 5 个 ProductList 对象,并将它们放入数组中,它应该可以工作:)

于 2012-05-12T19:56:42.893 回答