Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe eine Frage zum Setzen von Objektwerten per Schleife.
Und zwar habe ich eine Klasse Mannschaft erstellt, welche aus jeweils 11 Objekten Spieler bestehen. Diese werden beim Aufruf des Konstruktors erzeugt.
Mittels einer for-Schleife möchte ich nun jedem Spieler eine zufällig erzeugte Nummer zuweisen.
Anstatt jedem Spieler eine neue Nummer zu geben, werden jedoch pro Iteration alle Nummern der bisher erzeugten Spieler überschrieben.
Das soll natürlich nicht sein
Anbei mein Beispielcode, vll wisst ihr was ich da falsch mache.
Java:
public class Spieler{
int nummer;
public Spieler(){
this.nummer = new int;
}
}
public class Mannschaft{
Spieler[] einzelner = new Spieler[11];
public Mannschaft(){
for(int i=0; i<11; i++){
einzelner[i] = new Spieler();
int cache = new int;
cache = (referenz auf methode welche eine spielernummer berechnet);
einzelner[i] = new Spieler(cache);
einzelner[i].setNummer(cache);
}
}
}
denkbar ist dass das Attribut fälschlicherweise statisch ist, dann gilt der eine aktuelle Wert für alle Objekte,
aus dem Code ist kein Fehler zu sehen mal abgesehen von den offensichtlichen,
du musst schon ein lauffähiges Mini-Programm mit System.out.println oder sonstwie überzeugender Fehlerbeschreibung posten
Nein ich habe beide Klassen hier untereinander geschrieben, der Übersicht halber und das Problem vereinfacht. Auch das in der Klammer steht im Code natürlich so nicht da.
Der Code produziert keine Fehler, sondern überschreibt nur alle Objektwerte der bereits bestehenden Objekte.
Ich werde NIE behaupten, dass das da unten gut ist, aber mir war gerade mal 1 Minute lang langweilig ...
Immerhin haben weder Compiler noch JRE haben daran was auszusetzen
Java:
public class SpielerTest {
private static class Spieler {
private int nummer;
public Spieler(){
nummer = 0;
}
public void setNummer (int nr) {
nummer = nr;
}
@Override
public String toString() {
return "Spieler " + nummer;
}
}
private static class Mannschaft {
private Spieler[] spielerListe = new Spieler[11];
private final String name;
public Mannschaft(String name){
this.name = name;
for(int i=0; i<11; i++){
int cache = i+1; //hochkomplexe Routine zur Berechnung der Spielernummer :-)
spielerListe[i] = new Spieler();
// würde ich aber direkt über den Konstruktor machen
spielerListe[i].setNummer(cache);
}
}
@Override
public String toString() {
final String newline = System.getProperty("line.separator");
String retVal = name + newline;
for (Spieler s : spielerListe)
retVal += s + newline;
return retVal;
}
}
public static void main(String[] args) {
Mannschaft loser = new Mannschaft("Loser team");
System.out.println(loser);
}
}
Um die Sache zu Vereinfachen, habe ich gerade ein Beispiel entworfen, mit denselben Aufgaben. Dies funktioniert nun ohne Probleme
Ich werde im Hauptprogramm nochmals die entsprechenden Teile neu schreiben und dann evt mit einem nicht funktionierenden Beispiel auf euch zurückkommen.