Hilfe: toString() ...

fenerli23

Erfahrenes Mitglied
hi,
wie kann ich meine toString() Methode so realisieren, dass hier auch ausser String, int, double und etc implementiert werden können damit eine sorgfälltige ausgabe entsteht:
Code:
String zeile = null;
//getter und setter

// int, double, date muss auch irgendwie mit hinein...
public String toString() {
		StringBuffer b = new StringBuffer();
		b.append(zeile);	
		return b.toString();
	}

Danke im Voraus
 
Du kannst doch einfach in deinem toString alles eingeben ala:
int zahl = 20;


return zeile + ": "+ zahl;
 
das problem ist wenn ich keine toString() Methode mit hineinbeziehe wird etwas kommisch ausgegeben wie:
Code:
meinpacke.className232443

da der richtig Inhalt ausgegeben werden soll muss ich eine toString()- Methode definieren...

@MIMI
mmh wie du das realisiert hast hatte ich auch schon probiert aber dann wird alles nacheinander ausgegeben z.b:
Hallo:1993-02-06

mmh kann man das nicht elegant lösen ...?
 
Die von dir beschriebene Ausgabe kommt von der toString-Methode in der Object-Klasse, von der alle anderen Objekte ableiten.

toString gibt einen String zurück und nichts anderes, dementsprechend kannst du diesen auch nur entsprechend formatieren. So kannst du natürlich Leerzeichen und ähnliches einfügen:
Code:
return "Testausgabe: "+ausgabe1+", "+ausgabe2+"...";
Unter anderem kannst du auch Zeilenumbrüche ausgeben:
Code:
return "Testausgabe: Zeile1\nZeile2\nNoch eine Zeile";
hth
 
Wie willst du es denn ausgegeben haben?

ich will das so: Wenn ein String ausgegben wird, soll auch nur ein String ausgegeben werden, denn es geht um Daten aus einer Tabelle...
die wiederum in einem Array hinterlegt werden ...

z.B: so ..

arr(1): Helmut
arr(2): 1984-02-02
arr(3): 5

und nicht so:
arr(1): Helmut:null:null
arr(2): null:1984-02-02:null
arr(3): null:null:5
 
Du kannst auch einfach die Daten ueber nen getter abfragen, mittels "getName()" oder "getGeburtstag()" etc.
Oder du machst in deiner toString methode ne abfrage, das wenn eins von den Sachen NULL ist, soll er es net zurueckgeben sonst wohl.
 
ich zeig am besten mal die Methoden ... wie ich das zur Zeit habe geschieht nur so eine Ausgabe:
arr(1): Pataballa
arr(2): Heidi
arr(3): null
arr(4): null

Line- Methode..
Code:
import java.text.SimpleDateFormat;
import java.util.Date;

public class Line {

	private String zeile = null;
	private Date gebDatum = null;
	private int zeileInt = 0;
	
	private static final SimpleDateFormat DATEFORMAT = new SimpleDateFormat("dd.MM.yyyy");
	
	
	public String getZeile() {
		return zeile;
	}
	public void setZeile(String zeile) {
		this.zeile = zeile;
	}
	
	
	public int getZeileInt() {
		return zeileInt;
	}
	public void setZeileInt(int zeileInt) {
		this.zeileInt = zeileInt;
	}
	public Date getGebDatum() {
		return gebDatum;
	}
	public void setGebDatum(Date gebDatum) {

		this.gebDatum = gebDatum;
	}
	public String getGebDatumAsString(){ 
	    return DATEFORMAT.format(gebDatum); 
    }
	
	//damit das Objekt ausgegeben werden kann ...
	public String toString() {
		StringBuffer b = new StringBuffer();
		b.append(zeile);
		return b.toString();
	}
	
}

Methode Person.
Code:
public class Person { 
	private Column[] columns = null;
	private Line[] lines = null;
	
	public Line[] getLines() {
		return lines;
	}
	public void setLines(Line[] lines) {
		this.lines = lines;
	}
	public Column[] getColumns() {
		return columns;
	}
	public void setColumns(Column[] columns) {
		this.columns = columns;
	}
}

"HaupKlasse"...
Code:
Line[] lines = new Line[md.getColumnCount()];
			if(rs.next()) {
				for (int i=1; i<=md.getColumnCount(); i++) {
					person = new Person();
					lines[i-1]= new Line();
					if (columns[i-1].getType().equals("NUMBER")){
						lines[i-1].setZeileInt(rs.getInt(i));	
					}
					if (columns[i-1].getType().equals("VARCHAR2")){
						lines[i-1].setZeile(rs.getString(i));
					}
					if (columns[i-1].getType().equals("DATE")){
						lines[i-1].setGebDatum(rs.getDate(i));
					}
					person.setLines(lines);
					System.out.println("Line(" + i + "): " + person.getLines()[i-1]);
				}		  
			}
 
So wie das aussieht schreibst du deine Daten auch nicht optimal in dein Array.
Du machst drei Lines-Objekte auf.
In das eine schreibst du den ersten Wert (VARCHAR2), DATE und NUMBER bleiben null.
In das nächste schreibst du den Wert (DATE), VARCHAR und NUMBER bleiben null.
In das letzte schreibst du den Wert (NUMBER), VARCHAR und DATE bleiben null.

Ich glaub nicht, dass das so gewollt ist.

Erweitere doch lieber deine Personenklasse um drei Member un fülle die und lies die dann entsprechend aus....

Oder benutze kein Array für dein Line-Objekt

Java:
if(rs.next()) {
lines= new Line();
person = new Person();

				for (int i=1; i<=md.getColumnCount(); i++) {
					
					
					if (columns[i-1].getType().equals("NUMBER")){
						lines.setZeileInt(rs.getInt(i));	
					}
					if (columns[i-1].getType().equals("VARCHAR2")){
						lines.setZeile(rs.getString(i));
					}
					if (columns[i-1].getType().equals("DATE")){
						lines.setGebDatum(rs.getDate(i));
					}
					
				}	
	                person.setLines(lines);
					System.out.println("Line(" + i + "): " + person.getLines());
			}

Und bei Person:
Java:
private Line lines = null;
	
	public Line getLines() {
		return lines;
	}
	public void setLines(Line lines) {
		this.lines = lines;
	}
 
Zurück