2010-11-27 27 views
1

Ich bin ziemlich neu in Java und das hat mich wirklich verwirrt.Mit einer Methode aus einer anderen Klasse

Ich habe zwei Klassen. Eine (controlNumber) hat zwei int-Felder, die für Zahlen verwendet werden, eine ist die aktuelle Nummer und eine ist die maximale Zahl (sobald die aktuelle Nummer erreicht ist, wird sie auf 1 zurückgesetzt). Der Konstruktor initialisiert die aktuelle Zahl auf 1 und nimmt das Maximum als Parameter (und prüft, ob das Maximum positiv und kleiner als 100 ist).
Von Methoden habe ich eine, die die aktuelle Zahl zurückgibt, eine, die die maximale Zahl zurückgibt, eine, die das Maximum als Strom setzt, eins, das der aktuellen Zahl 1 hinzufügt (es war das Maximum) und schließlich eins, das zurückkehrt ein String mit der aktuellen Nummer, bei der "0" vorangestellt wird, wenn die aktuelle Nummer nur eine Ziffer ist (also 5 wird 05).
Die toString sieht wie folgt aus:

Diese Klasse ganz gut funktioniert.
Die zweite Klasse ist, wo ich anfange, in Probleme zu laufen. Es hat zwei Felder der oben genannten Klasse. Der Konstruktor initialisiert sie mit zwei verschiedenen Maximalwerten. All das scheint zu funktionieren.
Jetzt brauche ich eine toString-Methode, die eine Zeichenfolge mit dem aktuellen Wert beider Felder zurückgibt, die ein "/" zwischen und "0" vor, wenn es eine Ziffer ist (also wenn Tag 3 und Monat ist 11 es ' lle zurück "03/11"). Mein erster Gedanke war, etwas wie das zu verwenden, was ich oben mit Integer.toString verwendet habe, aber es stellt sich heraus, dass dies nicht möglich ist (obwohl die Felder in der controlNumber-Klasse ints sind). Also dachte ich daran, meine Methode von oben zu benutzen (die in einer anderen Klasse ist), weil sie das meiste von dem macht, was ich will, aber ich weiß nicht wie.

Ich hoffe, dass ich Sinn gemacht habe und dass mir jemand helfen kann, herauszufinden, wie ich mein Problem lösen kann.

Antwort

1

Wenn Sie zwei Felder der eingangs genannten Art haben, a und b

public String toString() { 
    return a + "/" + b; 
} 
genannt

Sie müssen toString() nicht explizit aufrufen, da dies ohnehin das Verhalten ist. Der einzige Unterschied besteht darin, dass, wenn a oder b null ist, "null" gedruckt wird, während das Aufrufen von toString() eine NullPointerException auslöst.

BTW können Sie Ihre Methode

public String toString() { 
    return (currentNumber > 9 ? "" : "0") + currentNumber; 
} 
+0

Dank. a und b können niemals null sein (wenn sie meinen Code haben, ist das schlecht durcheinander geraten: P). – GeorgeWChubby

+2

Obwohl die Verwendung des ternären Operators eine große Verbesserung gegenüber dem darstellt, was er hatte, würde ich sagen, dass man sich angewöhnt hat, Strings richtig zu formatieren. String.format ("% 1 $" + n + "0", s); Dies würde eine linke aufgefüllte Zeichenfolge von Nullen zurückgeben, wenn die Länge der Zeichenfolge s kleiner als n ist. Sagen wir also n = 4 und s = "3", dann wäre die Rückkehr "0003". – bitxwise

1

Ich nehme an, Sie haben eine Klasse SomeClass, die zwei Felder vom Typ ControlNumber hat, und Sie möchten SomeClass.toString() implementieren, um die kombinierten Werte der Felder zu drucken. Wenn dies der Fall ist, dann würden Sie so etwas tun:

class SomeClass 
{ 
    ControlNumber number1; 
    ControlNumber number2; 

    [...] 

    public String toString() 
    { 
     return number1.toString() + "/" + number2.toString(); 
    } 
} 

Update:

Wie Peter darauf hingewiesen hat, können die expliziten Anrufe number.toString() weggelassen werden, so die oben könnte neu geschrieben als:

public String toString() 
    { 
     return number1 + "/" + number2; 
    } 
+0

Vielen Dank für Ihre Hilfe – GeorgeWChubby

0

Die Art und Weise verkürzen ich diesen Ansatz würde:

Erstellen Sie zunächst eine Nutzenfunktion für die Formatierung von Zahlen:

public class StringUtil { 

    public static String format(int i) { 
     if (i > 9) { 
      return String.valueOf(i); 
     } else { 
      return ("0" + String.valueOf(i)); 
     } 
    } 

} 

Jetzt, Sie können diesen Dienstprogrammcode aus Ihren anderen Klassen verwenden:

public String toString() { 
    return StringUtil.format(currentNumber); 
} 

und

public String toString() { 
    return StringUtil.format(max1) + "/" + StringUtil.format(max2); 
} 
Verwandte Themen