2017-01-28 2 views
0

Ich muss ein PhonePlan-Objekt schreiben, das den Typ des Plans darstellt, den ein Kunde für sein Telefon hat. So ist die Objektspur des minutesAllowed (int), Minuten verwendet (int) halten muss, dataAllowed (int), verwendet, um Daten (int) und planType (boolean):Java String toString mit Bedingung

public class PhonePlan { 
    int minutesAllowed; 
    int minutesUsed; 
    int dataAllowed; 
    int dataUsed; 
    boolean planType; 
} 

Ich brauchte einen Konstruktor zu schreiben, das hat minutesAllowed, dataAllowed und die planType als Argumente, die ich getan habe:

public PhonePlan (int ma, int da, boolean pt){ 
    this.minutesAllowed = ma; 
    this.planType = pt; 
    this.dataAllowed = da; 
} 

und schließlich muss ich einen String-Methode schreiben, die den Plan von der Art des Plans je anzeigt.

Ich muss auch meinen Code mit dem folgenden Testprogramm testen;

public class PlanTestProgram { 
    public static void main(String args[]) { 

     System.out.println(new PhonePlan(200, 2500000, false)); 
     System.out.println(new PhonePlan(250, 500000, true)); 
     System.out.println(new PhonePlan(300, 5000000, false)); 
     System.out.println(new PhonePlan(60, 1000000, false)); 
     System.out.println(new PhonePlan(30, 0, true)); 
    } 

Das erste Element der minutesAllowed, die zweite ist die Menge an dataAllowed wird, und der dritte ist die besagt, ob planType wahr oder falsch ist.

Ich habe versucht, viele verschiedene Dinge, aber ich bin nicht in der Lage eine toString() -Methode zu konstruieren, die berücksichtigen, wenn meine planType entweder wahr oder falsch ist ...

Mein Versuch:

public String toString(){ 
    return ("Regular(" + minutesAllowed + " minute," + dataAllowed 
       + "GB data) Monthly Plan with " 
       + getMinutesRemaining() + " minutes remaining and " 
       + getDataRemaining() + "KB remaining"); 
} 
+2

Was bedeutet ein Boolescher PlanType? Können Sie die Ausgabe teilen, die Sie für dieses Programm erwarten? – Mureinik

+0

Was möchten Sie drucken? Nicht klar ... –

+0

Können Sie versuchen, die Methode 'toString' zu implementieren und erklären, warum Sie nicht zufrieden sind? – toniedzwiedz

Antwort

0

Sie könnten die toString Methode implementieren, wie im folgenden Code beschrieben

public class PhonePlan { 
int minutesAllowed; 
int minutesUsed; 
int dataAllowed; 
int dataUsed; 
boolean planType; 
public PhonePlan (int ma, int da, boolean pt){ 
    this.minutesAllowed = ma; 
    this.planType = pt; 
    this.dataAllowed = da; 
} 



@Override 
public String toString() { 
    return planType ? getPlanTypeBasedString("Weekly Plan") : getPlanTypeBasedString("Monthly Plan"); 
} 
public String getPlanTypeBasedString(String planType){ 
    return ("Regular(" + minutesAllowed + " minute," + dataAllowed 
      + "GB data) "+planType+" with " 
      + getMinutesRemaining() + " minutes remaining and " 
      + getDataRemaining() + "KB remaining"); 
} 
+2

keine Notwendigkeit des Tests 'if (PlanType == wahr)' nur 'if (PlanType)' wäre in Ordnung. –

+1

Ich bin auch nicht der Downvoter. Deine Antwort ist mir gut. –

+0

Ich rieche dort zu viel Doppelzüngigkeit: o ... Es wäre schön, diese Duplizität auf Zwischenvariable zu ziehen. –

0

Schnell return in Ihrem vorgeschlagen (Versuch) aktualisieren können toString Verfahren, unter Verwendung der Stenografie if/else, in die folgenden:

return ("Regular(" + minutesAllowed + " minute," + dataAllowed 
      + "GB data) " + ((PlanType)? "Monthly": "Annual") + " Plan with " 
      + getMinutesRemaining() + " minutes remaining and " 
      + getDataRemaining() + "KB remaining"); 
0

Metod toString() sollte niemals verwendet werden, um den Wert der Objekteigenschaften zu präsentieren. Für die Überschreibungen können Sie die Commons-Bibliothek verwenden

public String toString() { 
return new ToStringBuilder(this). 
    append("minutesAllowed", minutesAllowed). 
    append("minutesUsed", minutesUsed). 
    append("dataAllowed", dataAllowed). 
    append("dataUsed", dataUsed). 
    append("planType", planType). 
    toString(); 
}