Ich habe folgendes Problem und zwar soll ich zwei Klassen schreiben.
Einmal eine "Singer" und einmal eine "Coach" Klasse. Beide Klassen haben ihre Attribute und Methoden.
Nun soll ich der Coach Klasse eine Methode hinzufügen, mit der es möglich ist, Sänger (also Objekte von Singer) einem Array vom Typ Singer (Singer[] s = new Singer[x - Länge]) hinzuzufügen, sodass man das Array durchgehen kann und alle Sänger findet, welche dem gleichen Coach zugeordnet sind.
Dieses Array soll sich in der Coach Klasse befinden.
public void ausgabe()
{
System.out.println("Der Coach: " + Name + " hat " + NumberOfObjekts + " Sänger!" + " \nMit den Namen: ");
for(Singer t: singer) if(t != null) System.out.print(t.getName());
}
[Main Klasse]
Code:
static Coach steffen;
static Singer marc;
public static void main(String[] args) throws Exception {
steffen = new Coach("Steffen");
marc = new Singer("Marc", 25, true, 100);
steffen.select(marc);
marc.ausgabe();
steffen.ausgabe();
}
Leider funktioniert die Ausgabe immer noch nicht, bekomme keine Ausgabe mit Namen. Das wundert mich allerdings, da der Wert singer[0] ungleich null ist. Eigentlich müsste er diesen doch ausgeben, oder?
Ein normales Objektarray zu verwenden, wenn dynamisch viele Objekte hinzugefügt werden können ist unsinnig. Die Länge muss vorher festgelegt werden.
Jeder der dann einem mit ReDim-Funktionen kommt, "scheißt" ja ganz schön auf Performance...
0815-Lösung fürs Listing wäre:
Code:
private ArrayList<Singer> customers = new ArrayList<>();
public List<Singer> getAllSingers() {
return customers;
}
public void addSinger(Singer s) {
customers.add(s);
}
Was bereits angesprochen wurde ist die Überschreibung der toString Methode. Jede Klasse erbt standardmäßig in Java von der Klasse Objekt, mein ich. Dort gibt es eine toString Methode. Default mäßig gibt die Klasse über toString einen String der das Objekt serialisiert (meist nutzlos) darstellt.
Also zum Überschreiben der Methode ist @Override wichtig.
Implementiere also nun folgendes in deine Coach-Klasse:
Code:
@Override
public String toString() {
StringBuilder sb = new StringBuilder(coachName); // stringbuilder ist deutlich schneller (besseres stringhandling)
sb.append(" hat folgende Kunden: ");
for(Singer s : customers) {
sb.append("\n");
sb.append(s.getName()); // oder toString Methode von Singer
}
sb.append("Weiterer Text...");
return sb.toString();
}
Das wäre der vollständige Workaround für diese Problematik.
Hoffe es hilft dir.
#edit:
Deine Main-Methode ist ja soweit immer das Gleiche.
Die Ausabe wäre nun jedoch nur noch:
Coach c = ...
System.out.println(c); // .toString wird automatisch aufgerufen (kann aber auch geschrieben werden, c.toString())
Das sind Hausaufgaben, und dafür darf er natürlich nicht den vollen Sprachumfang nutzen. Das mit einem Array zu lösen ist in der Praxis natürlich nicht gut, aber hier geht es darum, dass er es trotzdem auch damit lösen kann.
Analog darf er natürlich auch nicht toString() nutzen (bzw. muss wenn dann toString() in ausgabe() aufrufen), sondern muss sich an die Aufgabenstellung halten.
StringBuilder ist nicht schneller, bzw. die manuelle Konkatenation wird vom Compiler optimiert (und ggf. durch einen StringBuilder ersetzt).
"select" ist ein sinnvoller Name, weil ein Coach einen Singer beim Context für sein Team "auswählt".
[Java] Array zusammengesetzt ausgeben ? 11/05/2014 - Java - 8 Replies Hallo, Community.
Ich habe in meinem Code einen Array, mit verschiedenen Werten. Diesen möchte ich zusammengesetzt ausgeben lassen und auch verwenden können. Ausgeben lassen habe ich diesen so:
for(String x : array){
System.out.print(x);
}
So werden die einzelnen Werte aber nur aneinander angereiht, und ich kann die ganze Zusammensetzung nicht als Variable speichern bzw. benutzen.
JAVA problem array sorting 09/28/2012 - General Coding - 1 Replies i use three arrays where in
System.out.println("Enter number of process: ");
int process = in.nextInt();
String name = new String;
int age = new int;
double income = new double;
bla bla bla so basically i used three arrays and a for loop and the outcome is this.
(note: this is a user input)
[Java] Problem mit Array 10/17/2011 - General Coding - 5 Replies Hallo lieber User !
Ich habe hier ein Programm das ein Array mit Zufallszaheln befüllt, und es dann mit einer anderen Methode durch Beistriche trennt. Mein Problem liegt in der Testklasse, da er mir da zwar die Ziffern durch Beistriche trennt, diese aber nicht mehr zufällig sondern alle gleich sind.
z.b eingabe : 5 ausgabe : 1,1,1,1,1,
public class ArrayMethoden {
public static int zufallsArray (int anzahl) {
int a = new int;
java - switch -> case frage [array] 12/29/2010 - General Coding - 6 Replies hey hey...
hab ein kleines problem, mit der switch - case abfrage mit nutzen von arrays...
switch (zuf){
case wetten:uebereinstimmungen = 1;break;
}
zeigt der mir nen fehler an , mit ner einfachen if-abfrage klappt es zwar, aber sieht mit switch-case sauberer aus, da es mehrere sind...