2017-08-09 16 views
-1

私は本当に混乱しています。シリアルが値を持っているかどうかをチェックし、そうでない場合はそのメッセージを表示するためにこのコードが必要です。値を設定し、nullで動作していないことを確認してください

public class Calculator { 

    public static void main(String[] args) { 
     Product p2 = new Product("1st", 1.15); 
     p2.setSerial("1655"); 
     System.out.println("done"); 
    } 
} 

class Product { 

    private String name; 
    private String serial; 
    private double price; 

    public Product(String name, String serial, double price) { 
     this.name = name; 
     this.serial = serial; 
     this.price = price; 
    } 

    public Product(String name, double price) { 
     this.name = name; 
     serial = null; 
     this.price = price; 
    } 

    public void setSerial(String serial) { 
     if (serial == null) 
      this.serial = serial; 

     else 
      JOptionPane.showMessageDialog(null, "This item has a serial number"); 

    } 

    public String getSerial() { 
     return serial; 
    } 
} 
+0

デバッガを使用します。ヌルを渡す場合は、値を設定するだけです。おそらく 'if(this.serial == null)'を意味します。 –

+0

セッターではメッセージボックスを使用しないでください。理想的には、セッターは一切持ってはいけません。コンストラクタでのみ初期化してください。しかし、setterを持っている必要がある場合は、IllegalStateExceptionをスローします。 –

+0

ダイアログボックスを上げる代わりにExceptionをスローして、呼び出し側が何をすべきかを決定させる必要があります。 – Tezra

答えて

3
if (serial == null) 

あなたがクラスのメンバーをチェックするために持っているようにメソッドに渡されたパラメータをチェックしている珍しいことではありません。あなたはそれを変更する必要があります

if (this.serial == null) 

あなたのパラメータとインスタンスメンバーが同じ名前を持っているので混乱しています。

GUIとモデルクラスを混在させるのはなぜですか?あなたがテストしているなら、モデルクラスとGUIを混ぜるのは良い考えではありません。

これ以外にも、if elseの{}を省略していることがわかりますが、そのようにしないでください。それらを持っています。このような混乱を避けるために。

+1

"同じ名前のパラメータとインスタンスメンバー"はそれ自体問題ではないことに言及する価値があります。特にコンストラクタでこれを行うのが一般的です。あなたはちょうどあなたが参照するものを慎重にしなければなりません。 –