2017-08-01 2 views
0

Ich kann nicht herausfinden, warum mein Code nicht registriert, dass es eine maximale Größe für das Objekt gibt. Ich dachte, vielleicht war es aufgrund der Tatsache, dass die unteren Variablen der Minimal- und Maximalwerte können außer Kraft setzen, aber es nichtErstellen eines Schuhobjekts

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()); 

    } 
} 

Die othershoes als eine ungültige Größe registrieren soll zu helfen scheint. aber es läuft nur der Code als normal und gibt den ungültigen Text überhaupt nicht aus, ich verstehe nicht warum.

+4

Sie haben keine Größenprüfung im Konstruktor, nur in der 'setSize()' Methode, die Sie nicht verwenden. Zusätzlich sollte '||' (oder) nicht '&&' (und) verwendet werden. – Kayaman

Antwort

0

Als ich in Ihrem Konstruktor sehen, sind Sie nicht „setSize“ Methode verwenden, aber Sie Wert aus dem Parameter direkt kopieren „auf Feldgröße ". Aufgrund dieser Methode wird "setSize" nicht ausgelöst, so dass die Validierung in dieser Methode nicht stattgefunden hat. Ich schlage vor, Sie den Code von Konstruktor zu ändern, so anstatt direkt den Wert „Größe“ Feld Einstellung würden Sie verwenden „setSize“ -Methode wie:

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

Hoffe, es hilft!

0

Ihr Problem ist, dass Sie nicht die Größe im Konstruktor überprüfen. Sie haben dies auf eine separate Methode übertragen, die bei der Objektinitialisierung nicht aufgerufen wird.

0

Sie rufen die setSize-Methode in Ihrem Konstruktor nicht auf. Daher wird die Überprüfung nicht durchgeführt.

Sie können einfach den Konstruktor ändern die Methode, wie so zu verwenden:

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

Es gibt zwei Probleme. 1. Die Datenvalidierung, die Sie innerhalb des Größensetzers eingerichtet haben, funktioniert nicht. Ihre aktuelle Logik sagt, dass, wenn Größe größer als 15 UND (& &) weniger als 1 ist, dann wird es ungültig registrieren. Diese Bedingung wird niemals wahr sein. Eher sollten Sie sagen, dass größer als 15 ODER (||) kleiner als 1 ist. 2. Sie rufen niemals den Größeneinsteller mit der Validierung. Sie sollten die Setter in Ihrem Konstruktor verwenden. Ihr Konstruktor würde also so aussehen: