# Instanzenmethoden



## BROker (27. Okt 2014)

Hallo Community,
ich bin neu hier und habe Probleme bei folgender Aufgabe die ich im Anhang verlinken werde.
Momentan geht es mir nur um den (a) und den (b) Teil der Aufgabe.
Zum (a) Teil:Hier habe ich soweit glaube ich alles. Aber ich verstehe nicht was die Methode toString(int roeLength) machen soll. Desweiteren verstehe ich nicht was mit dem Überladen der toString Methode gemeint ist. Soll man hier eine neue toString Methode erstellen?
Zum(b) Teile:Hier habe ich ein Problem mit der Method readResults Und zwar weise ich die Notenwerte in der for Schleife zu aber ich weiss nicht wie ich diese Attributwerte in den zugehörigen Instanzen der Klasse Fach setze. 
Anbei: Meinen bisherigen Code werde ich auch in den Anhang packen
PS: Habe mir den Code jetzt nochmal angeschaut und habe einen fehler in den get MEthoden entdeckt und zwar haben get Methoden ja einen rückgabewert und das habe ich jetz verbessert
Gruß und danke schonmal im voraus


----------



## EasyEagle (27. Okt 2014)

Hi Broker,
ich nehme an du meinst die Aufgabe 3?
Zu a) schau mal hier: http://www.java-forum.org/java-basi...en-ueberladen-ueberschreiben-unterschied.html
Zu b) deine beiden hier hochgeladenen Klassen enthalten nicht wirklich viel. Könntest du die vielleicht aktualisieren, damit wir sehen was du bisher schon hast.

Vg,
EasyEagle


----------



## BROker (27. Okt 2014)

Ja Aufgabe 3 meinte ich 

Klar kann ich sie aktualisieren aber viel ist nicht dazugekommen
Oh... ist doch ein bisschen was dazu gekommen habe eben gemerkt dass ja noch fast nichts in der alten Datei enthalten war 

Vg, 
BROker


----------



## BROker (27. Okt 2014)

Hier die aktualisierte Version

Ausserdem habe ich mir jetzt mal das Thema deiner Verlinkung durchgelesen allerdings verstehe ich den Sinn, des Überladens von Methoden nicht:


----------



## EasyEagle (27. Okt 2014)

Überladen musst du ja in deiner Aufgabe nicht machen, aber zum Verständnis:
Mehrere Methoden mit der Selben Sigantur, aber unterschiedlichen Übergabeparamertern.
Also z.B.:

```
public String write(){
    return "bla";
}
public String write(String bla){
    return bla;
}
```

Zu deinem Thema:
Die  toString hast du ja schon richtig überschrieben, jetzt musst du "nur"  noch den entsprechenden Rückgabewert bestimmen. Du sollst dir hier ja  einen String mit Hilfe der Methode "umwandeln(...)" in der ensprechenden  Länge "rowLength" zusammen basteln.
Ich würde den Fächer-Array nur  deklarieren, aber noch nicht definieren (= Wertzuweisung) und die  Definition dann erst im Konstruktor vornehmen: 

```
// im Konstruktor
this.faecher = faecher;
```
Damit sparrst du dir das umständliche System.arraycopy UND die Länge des Arrays ist damit variabel, also je nach Länge des übergebenen Arrays. Bei deiner Lösung hat faecher immer eine Länge von 4.
Ich seh gerade, dass das auch so in der Aufgabenstellung steht: "... sowie ein Feld von Fächernamen als Parameter besitzt und mit den Parameterwerten die Attributwerte initialisiert."

Das mit der Methode readResults versteh ich ehrlich gesagt auch nicht ganz.
Wie und von wo sollen die Noten EINGELESEN werden?
Ansonsten muss du dort dann in einer Schleife über den faecherArray iterieren und jeweils Konstruktor der Klasse Fach aufrufen und dann vermutlich die überschriebene toString() aufrufen.


----------



## EasyEagle (27. Okt 2014)

Noch ein kleiner Hinweiß:
schau nochmal deine Getter-Methoden an, die sollten eigentlich einen Wert zurück liefern.


----------



## EasyEagle (27. Okt 2014)

Bei dem Konstruktor der Klasse "Fach" fehlt noch der zweite Übergabeparameter "note".
Außerdem denke ich, dass du keine zwei Attribute für den Namen brauchst (du hast "name" und "nameFach")

EDIT: Nein, sorry. In der Aufgabenstellung steht tatsächlich dass hier nur ein Konstruktor mit dem Attribut für "name" benötigt wird


----------



## BROker (27. Okt 2014)

So habe jetzt die Getter Methoden in der Klasse Fach verbessert.
Den Konstruktor habe ich jetzt auch verbessert in dem ich this.faecher=faecher geschrieben habe.
Allerdings frage ich mich jetzt wie ich den SAchulfächer in dem Feld abspeichern kann?


----------



## BROker (27. Okt 2014)

public Fach(String name,float note){
		this.name=name;
		this.note=note;
	}
Und nameFach habe ich jetzt gelöscht!

Die toString hast du ja schon richtig überschrieben, jetzt musst du "nur" noch den entsprechenden Rückgabewert bestimmen. Du sollst dir hier ja einen String mit Hilfe der Methode "umwandeln(...)" in der ensprechenden Länge "rowLength" zusammen basteln.

Das Verstehe ich auch nicht ganz ist rowLength hier nur für die Formatierung wichtig?


----------



## EasyEagle (27. Okt 2014)

Die Fächer werden dem Konstruktor für Schueler übergeben:

```
Schueler tom = new Schueler("Tom", new String[]{"Mathe", "Deutsch", "Physik", "Sport"});
```


----------



## BROker (27. Okt 2014)

Also genau so wie ich es schon habe?


```
Schueler schueler1=new Schueler("Hans Schmidt",new String[]{"Mathematik","Deutsch","Latein","Sport"});
```


----------



## EasyEagle (27. Okt 2014)

rowLength:
Die toString-Methode soll einen String zurückliefern, der die länge "rowLength" hat.
Der String soll sich wie folgt zusammen setzten: "Fach-Name" (linksbündig) + "Note" (ausgeschrieben und rechtsbündig).
Also musst du schaun wie lang der Name des Faches ist und wieviele Buchstaben die Note hat.
Insgesamt muss der Ausgabe-String die Länge "rowLength" haben, also muss du unter Umständen mit Leerzeichen auffüllen.


----------



## Joose (27. Okt 2014)

BROker hat gesagt.:


> Also genau so wie ich es schon habe?



Ja 
Wobei die Frage ja etwas überflüssig ist da er ja Code gepostet hat welcher deinem gleicht (bis auf den Inhalten der Strings)


----------



## BROker (27. Okt 2014)

```
int a= rowLength-noteS.length()-faecher.length();
```
 allerdings kann ich so nicht auf noteS bze faecher zugreifen. Ausserdem weiss ich nicht wie ich die ausgabe mit Leerzeichen auffüllen soll.
Ich bekomme ja einen Wert raus angenommen rowLength=50 und das Worth Mathe hat 5 Buchstaben und die Note gut hat 3 also 50-5-3=42 also müsste ich ja mit 42 Leerzeichen auffülen aber wie soll man das machen?

```
System.out.println(Fach:+"42*Leertaste"Note)
```


----------



## EasyEagle (27. Okt 2014)

Da würde mir jetzt spontan sowas einfallen:

```
[COLOR=#000066][/COLOR][B][COLOR=#000066]    [/COLOR][/B]for(int i = 0; i < a; i++){
        ausgabeString += " ";
    }
```

Ist vielleicht nicht die eleganteste Lösung, aber dürfte klappen


----------



## BROker (27. Okt 2014)

```
public String toString(int rowLength,String noteS,String faecher){
	int a= rowLength-noteS.length()-faecher.length();
	
	for(int i=1;i<=a;i++){
		String ausgabeString += " ";
	}

		return ausgabeString;
	}
```

Also so habe ich es jetzt aber das funktioniert nicht!:bahnhof:


----------



## EasyEagle (27. Okt 2014)

```
String ausgabeString = fachName;
int a = rowLength-noteString.length()-fachName.length();
for(int i=0;i<a;i++){
    ausgabeString = ausgabeString + " "; //fügt ein Leerzeichen hinzu
}
ausgabeString = ausgabeString + noteString;

return ausgabeString;
```


----------



## BROker (1. Nov 2014)

So diese Aufgabe hat sich erledigt danke für eure Hilfe


----------

