0

cしたがって、次の 2 つの方法があります。最初の方法は、顧客の配列リストを調べて、タイプの ID がString内の顧客の 1 つと一致する顧客の値を返すことArrayListです。

private Customer findCustomer(String id){
    Customer c;
    for(Customer customer : customers){
        if(customer.getID().equals(id)){
            c = customer;
            return c;
        }
    }
    return null;
}

次に、誰かがその場しのぎの映画レンタル プログラムの GUI でこのメソッドにアクセスし、映画、レンタル日、および顧客の ID を渡す 2 つ目の方法があります。

public void movieRented(Movie m, Date rented, String id){
    m.setDateRented(rented);
    Customer c = findCustomer(id);
    c.addMovie(m);
    m.setIntStock(false);
}

これら 2 つのメソッドに関連するエラー メッセージが表示されます。少なくともそれらが正しいように見えることを確認したかっただけです。

4

2 に答える 2

3

null を返すように注意してください。NullPointerException

private Customer findCustomer(String id){
        Customer c;
        for(Customer customer : customers){
            if(customer.getID().equals(id)){
                c = customer;
                return c;
            }
        }
        return null;
    }

あなたの方法を改善することを検討するかもしれません

private Customer findCustomer(String id){
            Customer c=null;
            for(Customer customer : customers){
                if(customer.getID().equals(id)){
                    c = customer;
                    break;
                }
            }
            return c;
}

または、カスタム例外を使用して今すぐ

 private Customer findCustomer(String id) throws NoFoundCustomerException{
                Customer c=null;
                for(Customer customer : customers){
                    if(customer.getID().equals(id)){
                        c = customer;
                        break;
                    }
                }
                if(c == null){
                 throw new NoFoundCustomerException();
                }

                return c;
}

クライアント コードでは、次のようなことができます。

public void movieRented(Movie m, Date rented, String id){
    try{
    m.setDateRented(rented);
    Customer c = findCustomer(id);
    c.addMovie(m);
    m.setIntStock(false);
   }catch(NotFoundedCustomerException e){
     JOptionPane.showMessage(null,"Customer doesn't exist");
   }
}

そして、あなたの例外は次のようになります

public class NotFoundedCustomerException extends Exception{

 public NotFoundedCustomerException(){
        super();
 }

 public NotFoundedCustomerException(String message){
        super(message);
 }
  .
  .
  .
}
于 2013-07-09T19:08:12.027 に答える
0

これが正しいかどうかはわかりませんが、次の行にスペルミスがある可能性があります。

m.setIntStock(false);

それはあるべきであるように見えます

m.setInStock(false);

また、null を返す顧客が見つからない場合、問題が発生する可能性があるようです。なぜこれが起こっているのかわからない場合は、いくつかの簡単な println ステートメントをお勧めします。例えば:

System.out.println("customer id = " + customer.getId() + " id= " + id);
于 2013-07-09T19:03:14.320 に答える