2017-12-20 59 views
-1

私は助けが必要です。 4-5時間試した後、私は失われていると思った。私は同じタイトルを持っているが、それらは助けになっていない2つの他のスレッドがあることを知っている。 T.Tリストにオブジェクトを追加するとNullPointerExceptionが発生する

私はそれを修正する方法がわからないので、今私は狂っています。だから私は誰かがこの問題で私を助けることを願っています。

誰かがそれを修正し、私が間違っていたことを私に説明すると、将来私はもう一度やりません。

私は、OrderMapperでMain関数を作成しようとしているクラスを3つ持っているので、ShopCartを別名CustomerOrderオブジェクトにしています。リストのadd関数を使ってOrderDetailsオブジェクトをListに追加しますが、NullPointerExceptionを取得し続けます。

たOrderDetailsクラス:

package model.domain; 

public class OrderDetails { 
    private int id; 
    private int bookid; 
    private int amount; 

    public OrderDetails() { 
    } 

    public OrderDetails(int id, int bookid, int amount) { 
     this.id = id; 
     this.bookid = bookid; 
     this.amount = amount; 
    } 

    public OrderDetails(int bookid, int amount) { 
     this.bookid = bookid; 
     this.amount = amount; 
    } 

    public int getId() { 
     return id; 
    } 

    public int getBookid() { 
     return bookid; 
    } 

    public void setBookid(int bookid) { 
     this.bookid = bookid; 
    } 

    public int getAmount() { 
     return amount; 
    } 

    public void setAmount(int amount) { 
     this.amount = amount; 
    } 

} 

CustomerOrderがクラス:

package model.domain; 

import java.util.Date; 
import java.util.List; 

public class CustomerOrder { 
    private int id; 
    private int customerid; 
    private List<OrderDetails> orderDetails; 

    public CustomerOrder() { 
    } 

    public CustomerOrder(int id, int customerid, List<OrderDetails> orderDetails) { 
     this.id = id; 
     this.customerid = customerid; 
     this.orderDetails = orderDetails; 
    } 

    public CustomerOrder(int customerid, List<OrderDetails> orderDetails) { 
     this.customerid = customerid; 
     this.orderDetails = orderDetails; 
    } 

    public int getId() { 
     return id; 
    } 

    public int getCustomerid() { 
     return customerid; 
    } 

    public void setCustomer(int customerid) { 
     this.customerid = customerid; 
    } 

    public List<OrderDetails> getOrderDetails() { 
     return orderDetails; 
    } 

    public void setOrderDetails(List<OrderDetails> orderDetails, OrderDetails od) { 
     orderDetails.add(od); 
     this.orderDetails = orderDetails; 
    } 

    public void addDetails(int bookid, int amount){ 
     OrderDetails od = new OrderDetails(); 
     od.setBookid(bookid); 
     od.setAmount(amount); 
     this.orderDetails.add(od); 
    } 



// public void addDetails(OrderDetails od){ 
//  this.orderDetails.add(od); 
// } 


    //addOrderline /addDetails 
    // 
      //od.setOne(this.ono) 
      //orderdetails.add(ad) 

    //arraylist<orderdetail> getDetails(){ 
    // return orderDetails; 
    //} 

} 

OrderMapperクラス:私は最初のnullはヌルから知っているどこ

package model.domain; 

import java.util.ArrayList; 
import java.util.List; 

public class OrderMapper { 
    public CustomerOrder createShopcart(int customerid, List<OrderDetails> orderDetails){ 
     return (new CustomerOrder(customerid, orderDetails)); 
    } 

    public static void main(String[] args) { 
      OrderMapper om = new OrderMapper(); 

      OrderDetails ed = new OrderDetails(1, 2); 

      //List<OrderDetails> orderDetails = null; 
//   // orderDetails = ed; 
      //orderDetails.add(0, ed)); 

      CustomerOrder shopcart = new CustomerOrder(); 

      System.out.println(shopcart.getOrderDetails()); 

      shopcart.setCustomer(1); 
      shopcart.addDetails(1, 3); 
      shopcart.addDetails(3, 2); 
      shopcart.addDetails(2, 2); 

      System.out.println(shopcart.getOrderDetails()); 

//   CustomerOrder shopcart = om.createShopcart(1, null); 
//   System.out.println(shopcart.getOrderDetails()); 
//   OrderDetails od = new OrderDetails(1, 2); 

//   shopcart.setOrderDetails(null, od); 

//   System.out.println(shopcart.getOrderDetails()); 
//   shopcart.setCustomer(1); 
//   shopcart.addDetails(1, 1); 

    } 

} 

私が手にエラーがこれです私は設定したが、追加してNullPointerExceptionを取得する。したがって、あなたは(1、1)shopcart.addDetailsを呼び出したときに...

null 
Exception in thread "main" java.lang.NullPointerException 
    at model.domain.CustomerOrder.addDetails(CustomerOrder.java:68) 
    at model.dataaccess.OrderMapper.main(OrderMapper.java:155) 
+0

こんにちはBlogbeardのようなコールcreateShopcart(int型の得意先、リストORDERDETAILS)を作成した関数を使用してみてください、私はそれを読んだが、私はどこに行く私はまだ得ることはありません違う。私は別のものを試した後でも自分のコードを修正するように見えることはできません。 :| – user9120338

+0

'new CustomerOrder()'は 'orderDetails'を' null'に、 'id'と' customerid'を '0'にします。おそらく、そのコンストラクタを削除して、常にこれらのフィールドを適切に初期化する他のコンストラクタを使用してください。 – dimo414

+0

また、 'private List orderDetails = new ArrayList <>();'を実行すると、デフォルトでフィールドはnull以外の値に初期化されます。 – dimo414

答えて

1

あなたのオブジェクトのリストを与えることはありません;:私は多くのことを試してみましたが、どれも助けませんあなたのshopcartオブジェクトは決して有効なリストオブジェクトでインスタンス化されないので、nullポインタ例外が発生します。

CustomerOrder shopcart = new CustomerOrder(); //no list given 

あなたはこの

CustomerOrder shopcart = new CustomerOrder(0, new ArrayList<OrderDetails>()); 
+0

こんにちは@RAH_Muh_Taz、ありがとうございました。これは、構文とnewbeginnerエラーの組み合わせでした。私は新しいArrayList で試しましたが、最後に()を追加しませんでした。それは変だと私はそれを削除しました。私を助けてくれてありがとう。 これは、私がショップカートをインスタンス化するときに、有効なリストオブジェクトを覚えておく必要があるということです。後でCustomerOrderオブジェクトに追加することはできません。 – user9120338

+0

あなたは後でそれを追加することができますが、余分な不要な作業であるあなたのリスト!= nullであるかどうかをチェックする他の方法でさらにチェックする必要があります。 CustomerOrderにメンバー変数の一部としてリストが含まれているので、それらのnullポインター例外を避けるために作成時にリストを与えるのが最善です。後でanotehr関数を使いたい場合はリストを置き換えることができますが、作成時にクラス内のすべてが適切に初期化されるようにしたい場合は –

+0

クール、ありがとう。私はそのことについてもっと読むべきであるようです。それは私を夢中にさせるものでした。あなたの人々が私を助けた後、私は何もなかったように続きました。私はこのレッスンを忘れずに覚えておいてほしい。助けてくれてありがとう。 :) – user9120338

関連する問題