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参照でdot(。)演算子を使用すると、Nullpointerexceptionがスローされます。

私が見ることができるように、あなたの主な方法の最初の行で、

ProductList[] entry = new ProductList[6];

アレイを初期化するだけで、アレイ内の製品リストエントリを初期化することはありません。したがって、配列にはnullエントリが含まれます。

その行の後に次のコードを追加する必要があります。

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つの要素を保持できるフィールドを初期化しています。すべての要素はデフォルトでnullです。mainメソッドでは、配列のProductListを初期化する必要があります。

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

他のものはまだnullになります。ただし、配列にオブジェクトが1つしかない場合でも、失敗します。forループはすべてのフィールドを通過します。最初のフィールドでは正常に実行されるはずですが、他のフィールド(null)ではnullオブジェクトにアクセスしようとします。したがって、さらに5つのProductListオブジェクトを初期化し、それらを配列に初期化すると、機能するはずです:)

于 2012-05-12T19:56:42.893 に答える