2017-08-01 4 views
0

私のコードがオブジェクトに最大サイズが登録されていない理由を理解できません。私は多分それが一番下の変数が最小値と最大値をオーバーライドすることがありますが、靴オブジェクトの作成

public class Shoes { 

private static final int MIN_SIZE = 1; 
private static final int MAX_SIZE = 15; 

private String brand; 
private double price; 
private int size; 

public Shoes(String brand, double price, int size) { 
    this.brand = brand; 
    this.price = price; 
    this.size = size; 
} 

public String getBrand() { 
    return brand; 
} 

public void setBrand(String brand) { 
    this.brand = brand; 
} 

public double getPrice() { 
    return price; 
} 

public void setPrice(double price) { 
    if (price < 0) { 
     System.out.println("Price Must be greater than zero!\n"); 
     return; 
    } 
    this.price = price; 
} 

public int getSize() { 
    return size; 
} 

public void setSize(int size) { 
    if (size > MAX_SIZE && size < MIN_SIZE) { 
     System.out.println("Invalid Size!\n"); 

    } 

} 

@Override 
public String toString() { 
    return "Shoe [brand = " + brand + ", price = " + price + ", size = " +  size + "]"; 
} 

public static void main(String[] args) { 
Shoes myShoes = new Shoes("J.F.", 45.99, 10); 
Shoes otherShoes = new Shoes("Addidas", 65.99, 16); 

System.out.println("The shoes: "); 
System.out.println(myShoes.toString()); 

System.out.println("Other Shoes: "); 
System.out.println(otherShoes.toString()); 

    } 
} 

othershoesが無効なサイズとして登録する必要が助けていないようだという事実によるものだと思いました。しかし、それは通常のようにコードを実行するだけで、なぜ私は理解していない無効なサイズのテキストを出力しません。

+4

コンストラクタでは、使用していない 'setSize()'メソッドのサイズチェックがありません。さらに '&|'(と)ではなく '||'(または)を使うべきです。 – Kayaman

答えて

0

、「あなたのコンストラクタ内であなたが「のsetSize」メソッドを使用していないが、あなたはフィールドに直接パラメータから値をコピーサイズ"そのメソッドのため、 "setSize"は起動されないので、そのメソッドの検証は行われませんでした。私はあなたが、コンストラクタのコードを変更示唆するので、代わりに直接「サイズ」フィールドの値を設定するあなたのような「のsetSize」メソッドを使用します。

public Shoes(String brand, double price, int size) { 
    this.brand = brand; 
    this.price = price; 
    this.setSize(size); 
} 

それが役に立てば幸い!

0

あなたの問題は、コンストラクタでサイズをチェックしていないことです。これをオブジェクトの初期化時に呼び出されない別のメソッドに委ねました。

0

コンストラクタでsetSizeメソッドを呼び出さないでください。したがって、チェックは行われません。

あなたは単にそうのようなメソッドを使用するようにコンストラクタを変更することができます:私が見たよう

public Shoes(String brand, double price, int size) { 
    this.brand = brand; 
    this.price = price; 
    setSize(size); 
} 
0

2つの問題があります。 1.サイズ設定ツール内のデータ検証は機能しません。あなたの現在のロジックは、サイズが15より大きくAND & &)が1より小さい場合、無効と登録します。その条件は決して真実ではありません。むしろ、15より大きいOR(||)は1より小さいと言わなければなりません。 2。コンストラクタでセッタを使用する必要があります。したがって、コンストラクタは次のようになります。

public Shoes(String brand, double price, int size) { 
    setBrand(brand); 
    setPrice(price); 
    setSize(size); 
} 
関連する問題