Erste Schritte Anfänger braucht Denkanstoß für Schulprojekt

MA

Mitglied
Hallo liebe Wissende,

nach 6 Vorlesungen Java sollen wir nun folgende Aufgabe lösen, allerdings fehlt mir der Ansatz:

Übungsaufgabe 2: Ligatabelle
Es soll das Modell der Tabelle einer Sportliga erstellt werden.
1. Eine Ligatabelle hält ein Datenfeld "Verein[] tabelle". Außerdem hält eine Ligatabelle ein Datenfeld "int registrierte", das die Anzahl bereits registrierter Vereine hält. Die Ligatabelle besteht aus einer festen Anzahl von Vereinen (20). Die Anzahl der Plätze in der Liga soll im Konstruktor übergeben werden. (2 Punkte)

2. Entwickeln Sie eine Methode "int gibAnzahlPlaetze()", die die Anzahl der Plätze in der Liga zurückgibt. (1 Punkt)

Das habe ich soweit. Ich brauche ein Array namens tabelle, welches ich mit 20 Objekten der Klasse "Verein" fülle, richtig?

Ich habe dafür also zwei Klassen angelegt. Einmal die Klasse Ligatabelle, wo die Methoden ausgeführt werden und eine Klasse Verein, in denen die Variablen definiert sind.

3. Entwickeln Sie eine Methode "void registriere(Verein verein)", die einen Verein in der Ligatabelle registriert. Beachten Sie dabei, dass nicht mehr Vereine registriert werden können, als in der Liga spielen. Wird versucht, einen weiteren Verein zu registrieren, wird diese Registrierung verworfen und statt der Registrierung eine Meldung für den Benutzer ausgegeben, dass die Liga bereits „voll“ ist. (5 Punkte)

Hmmm... da gehts schon los. Ich weiß nicht, wie die Methode "void registriere(Verein verein)" gemeint ist. Worauf beziehen sich die Angaben? Bezieht sich "Verein" wieder auf meine Klasse? Ist "verein" nur eine Übergabevariable oder bereits der Name der Variablen meiner Klasse? Ich schätze, ich muss ein neues Objekt der Klasse Verein erzeugen und das in das Array tabelle schreiben, oder?

4. Entwickeln Sie eine Methode gibRegistrierte(), die die Anzahl bereits registrierter Vereine
zurückgibt. (2 Punkte)

5. Die Vereine halten in Datenfeldern die Zahl der Spiele, die sie gewonnen haben und die Zahl der Spiele, in denen Sie ein Unentschieden erreicht haben. (2 Punkte)

6. Entwickeln Sie eine verändernde Methode void gewonnen(), die die Anzahl der Siege erhöht und eine verändernde Methode void unentschieden(), die die Anzahl der Unentschieden-Ergebnisse erhöht.
(3 Punkte)

7. Aus den vom Verein gehaltenen Daten sollen die Punkte des Vereins in der Tabelle berechnet werden. Dabei gilt:
- Ein Sieg gibt 3 Punkte,
- Ein Unentschieden gibt 1 Punkt.
Entwickeln Sie für die Klasse Verein eine Methode int gibPunkte(), die die Punkte eines Vereins berechnet und zurückgibt. (3 Punkte)

8. Außerdem halten die Vereine ihren Namen in einem Datenfeld. Der Name soll über den Konstruktor des Objekts Verein übergeben werden. (1 Punkt)

9. Entwickeln Sie eine Methode void gibVereine(), die alle in der Liga registrierten Vereine mit ihrem Namen, ihren Siegen und ihren Remis (Unentschieden) ausgibt. (2 Punkte)
Zusatzaufgabe: Entwickeln Sie eine Methode void gibTabelleAus(), die eine Tabelle ausgibt, in der die Vereine absteigend nach Ihren Punkten sortiert sind. Dazu eignet sich das Interface Compara tor aus der Java-Standardbibliothek. (4 Punkte)

Punkte: Inklusive der Zusatzaufgabe sind 25 Punkte zu erreichen.

Ist es im Grunde richtig, dass ich ein Array mit Objekten der Klasse anlegen muss (die Vereine), welche verschiedene Werte wie "gewonnen", "Name", etc. beinhalten?

Hier mein simpler Anfang:

Java:
public class Verein
{
    public String name;
    public int gewonnen;
    private int unentschieden;

    /**
     * K o n s t r u k t o r
     */
    public Verein()
    {
        gewonnen = 0;
        unentschieden = 0;
    }
}

Java:
public class Ligatabelle
{
    private int anzahlVereine;
    private Verein[] tabelle; // Array deklarieren =>  Array-Typ[] Array-Name
    private int registrierte; // enthält Anzahl der registrierten Vereine

    /**
     * K o n s t r u k t o r
     */
    public Ligatabelle()
    {
        anzahlVereine = 20;
        tabelle = new Verein[anzahlVereine]; // Array-Objekt mit [n] Elementen erstellen
    }

    public void gibAnzahlPlaetze()
    {
        System.out.println("Es gibt maximal "+anzahlVereine+" Plätze zu vergeben.");
    }
    
    public void registriere(Verein verein)
    {
        // System.out.println(verein);    
    }
    
    public void test()
    {
        tabelle[2] = new Verein();
        tabelle[2].name = "Jonny";
        // String[] tabelle = { "jalapeno", "anaheim", "serrano", "habanero", "thai" }; // Füllen
        System.out.println(tabelle[2].name);    
    } 
}

Über jede Hilfe freut sich der

Matthias
 
Das habe ich soweit. Ich brauche ein Array namens tabelle, welches ich mit 20 Objekten der Klasse "Verein" fülle, richtig?
Nein, vom Füllen steht da nichts. Nur ein Array.

Hmmm... da gehts schon los. Ich weiß nicht, wie die Methode "void registriere(Verein verein)" gemeint ist. Worauf beziehen sich die Angaben? Bezieht sich "Verein" wieder auf meine Klasse? Ist "verein" nur eine Übergabevariable oder bereits der Name der Variablen meiner Klasse? Ich schätze, ich muss ein neues Objekt der Klasse Verein erzeugen und das in das Array tabelle schreiben, oder?
Ich denke, du denkst zu kompliziert. Natürlich ist die Variable Verein eine Instanz deiner Verrein. Die Methode bekommt sie und schreibst sie wo hin. Nichts selbst erzeugen. Schau einfach mal nach "Setter".
 
Hallo du musst bei registreireVerein() einen Verein in das Array hinzufügen. Bitte beachte, dass du ein freien Slot (!= null) suchen musst.
 
Das sieht im Ansatz doch schon alles ok aus.
Ich vermute allerdings, dass das mit der Liga so gemeint ist:

Es gibt vielleicht einen Pool von Vereinen, aber nicht jeder ist unbedingt in einer Liga.
Aus diesem Pool (bzw. halt Initial-Tabelle) kannst du nun über die Funktion "registrieren" Vereine der Liga hinzufügen.
Natürlich nur maximal 20 Vereine.

Diese Vereine, also die Objekte in der Liga , haben nun counter für:
spiele, gewonnen, unentschieden.

Inwieweit du validieren sollst, dass jede Mannschaft die gleiche Anzahl an Spielen hat weiß ich nicht.
Aber ich vermute mal es gilt sowas wie, es gibt nur einen Spieltag an dem alle Vereine spielen.
 
Hallo und vielen Dank für die Antworten. Setter ist völlig Neuland, sollen wir sicher nicht verwenden.

Ich denke, ich habe einfach noch ganz allgemeine Verständnisfragen zum Array:

Mit tabelle = new Verein[anzahlVereine] habe ich doch ein Array angelegt, das zwar eine bestimmte Anzahl Elemente hat, diese doch aber noch völlig ungefüllt sind, oder?

Mit der Methode registriere(Verein verein) soll dieses Array dann mit den Instanzen der Klasse Verein (=Objekte?) gefüllt werden (eine Instanz bzw. Objekt ist ein Verein)? Und da die Instanz eine eigene Klasse ist, kann jede Instanz weitere Datenfelder (=Variablen) haben, oder? In PHP würde ich von einem mehrdimensionalen Array sprechen.

Was bedeutet die Methode registriere(Verein verein)? Bedeutet das großgeschriebene Verein, dass ich eine Instanz der Klasse Verein hinzufügen möchte? Aber nein, das ist ja Quatsch, das Array heißt ja tabelle. Also bedeutet das große Verein, dass ich irgendwas mit dieser Klasse Verein vorhabe. Aber warum muss ich der Methode das eigentlich mitteilen? Ich könnte den Wert doch auch später für meine Zwecke verwenden... hmm. 😳

Ist das kleinegeschriebene verein aus der Methode nur der Name der Übergabevariable, welche dann irgendwie zum Inhalt des Arrays wird oder weist es bereits auf ein in der Klasse Verein benötigtes Datenfeld hin?

Kann mir jemand auf die Sprünge helfen?

Danke sagt Matthias
 
Verein ist eine Klasse und das was danach kommt eine Variable

mit tabelle[1] = new Verein() Kannst du an Index=1 einen neuen Verein erzeugen.

Ja, das array ist nach dem initialisieren leer. (Alle Stellen = null).
 
Hallo und vielen Dank für die Antworten. Setter ist völlig Neuland, sollen wir sicher nicht verwenden.

Ich weiß ja nicht wie es den anderen hier geht, aber Setter und Getter ist doch wirklich einer der aller ersten Sachen die man lernen/wissen sollte nachdem man sich klar gemacht hat was OOP ist.
Das ist irgendwie die Basis der Basis.
 
Gut,

ich verspreche Besserung. Irgendwie klingen Setter und Getter tatsächlich schon von ihrer Bezeichnung her wichtig. Als Basis der Basis werde ich mir das mal anschauen.

Sooo..., bin sehr glücklich, denn ich konnte mir schon einige Fragen beantworten.

Was bedeutet die Methode registriere(Verein verein)? Bedeutet das großgeschriebene Verein, dass ich eine Instanz der Klasse Verein hinzufügen möchte?

Genau. Allerdings muss die Klasse Verein mindestens eine Instanz haben. Wir benutzen BlueJ, da führt man zunächst die Klasse Ligatabelle aus (new Ligatabelle()) und die Klasse Verein (new Verein()) mehrmals. Bei diesem Prozess muss man jeweils einen Instanznamen vergeben. Führt man dann die Methode registriere(Verein verein) in der Instanz der Ligatabelle aus, muss man einen Instanznamen der Klasse Verein wählen, sonst kommt eine Fehlermeldung.

Da ich in einem anderen Forum las, dass diese Instanznamen lediglich dazu dienen, die graphische Oberfläche von BlueJ herzustellen, kann man diese auch nicht weiter ansprechen. Wie man ohne BlueJ zu Instanzen kommt, ist mir daher noch ein Rätsel, dessen Klärung ich aber gern verschiebe.

Ist das kleinegeschriebene verein aus der Methode nur der Name der Übergabevariable, welche dann irgendwie zum Inhalt des Arrays wird oder weist es bereits auf ein in der Klasse Verein benötigtes Datenfeld hin?

Es ist lediglich der Übergabewert, dieser könnte auch als "bla" bezeichnet sein.


Ok, mein Skript finktioniert nun schon ganz gut. Bei der Schleife teste ich, ob das Feld null ist. Irgendwie empfinde ich das als umständlich. Geht das kürzer?

Java:
public class Ligatabelle
{
    private int anzahlVereine;
    private Verein[] tabelle; // Array deklarieren =>  Array-Typ[] Array-Name
    private int registrierte; // enthält Anzahl der registrierten Vereine

    /**
     * K o n s t r u k t o r
     */
    public Ligatabelle()
    {
        // Anzahl der möglichen Vereine:
        anzahlVereine = 2;
        // Array-Objekt mit [n] Elementen erstellen (alle sind nun "null")
        tabelle = new Verein[anzahlVereine]; 
        registrierte = 0;
    }

    public int gibAnzahlPlaetze()
    {
        return anzahlVereine;
    }
    
    public void registriere(Verein verein)
    {
        // Wenn die Zahl der Registrieten kleiner ist als die der Möglichen, dann...
        if(registrierte < anzahlVereine) {
            // ... fülle das Array tabelle an der nächsten freien Stelle mit dem Verein
            for (int i = 0; i < tabelle.length; i++) {
                if(tabelle[i]==null){
                    // Ist das Feld leer, dann registriere den Verein
                    tabelle[i] = verein;
                    // erhöhe die Zahl der Registrierten um 1
                    registrierte++;
                    // und beende die Schleife
                    break;
                    } 
            }  
        } else {
            // ... ansonsten gib Hinweis aus
            System.out.println("Die Liga ist voll. Es können keine weiteren Eintragungen gemacht werden.");
        }
    }
    
    public int gibRegistrierte()
    {
        return registrierte;
    }
    
    
    
    public void gibVereine()
    {
        // Spaltenköpfe ausgeben
        System.out.println("Gewonnen \t Unentschieden");
        for (int i = 0; i < tabelle.length; i++) {
                if(tabelle[i]!=null){
                    // Ist das Feld nicht leer, dann registriere den Verein
                    System.out.println(tabelle[i].gewonnen+" \t \t "+tabelle[i].unentschieden);
                } else {
                    // ansonsten brich die Schleife ab:
                    break;
                }
        }  
    }
    
    /*
    public void test()
    {
        tabelle[2] = new Verein();
        tabelle[2].name = "Jonny";
        System.out.println(tabelle[2].name);    
    } 
    */
}



Java:
public class Verein
{
    public String name;
    public int gewonnen;
    public int unentschieden;
    public int punkte;
    private int punkteProGewonnen;
    private int punkteProUnentschieden;
    

    /**
     * K o n s t r u k t o r
     */
    public Verein()
    {
        gewonnen = 0;
        unentschieden = 0;
        punkte = 0;
        punkteProGewonnen = 3;
        punkteProUnentschieden = 1;
    }
    
    /**
     * Erhöhe die gewonnenen Spiele um 1
     */
    public void gewonnen()
    {
        gewonnen++;
        punkte = punkte + punkteProGewonnen;
        
    }

    /**
     * Erhöhe die gewonnenen Spiele um 1
     */
    public void unentschieden()
    {
        unentschieden++;
        punkte = punkte + punkteProUnentschieden;
    }
    
    /**
     * Gib die Anzahl der Punkte aus
     */
    public int gibPunkte()
    {
        return punkte;
    }
}

Momentan grüble ich über Aufgabe 8 nach, für die es lediglich einen Punkt gibt:

8. Außerdem halten die Vereine ihren Namen in einem Datenfeld. Der Name soll über den Konstruktor des Objekts Verein übergeben werden. (1 Punkt)

Im Konstruktor der Klasse lege ich die "Startwerte" fest, die jedes Objekt der Klasse erhält. Was aber ist der Konstruktor der Klasse? Wenn ich eine Methode ausführe, die dem Objekt, also der Instanz der Klasse, einen weiteren Wert für "name" zuweist, ist das kein Problem. Da aber bei den anderen Aufgaben explizit angegeben ist, welche Methoden es geben soll, glaube ich eher nicht, dass das die Lösung wäre.

Was ist also der Unterschied zwischen dem Konstruktor der Klasse und dem Konstruktor des Objekts? Wie kann ich dem Konstruktor des Objekts einen Wert zuweisen?

Gruß Matthias
 
Uffff...

1. BlueJ ist, wie Eclipse eine IDE. Also eine Umgebung um dir die Entwicklung zu vereinfachen. Ein Java-Programm wird aber immer gleich kompiliert.

2. Bei der registrieren Funktion ist die Schleife unnötig. Du kannst dir den aktuellen index des Arrays (deine Tabelle) einfach hochzählen. Du benutzt also eine Variable index, die mit 0 beginnt und einfach hochgezählt wird, immer dann wenn ein Verein hinzugefügt wurde.

3. Ein Konstruktor enthält alle Anweisungen die bei der Instanziierung eines Objekts ausgeführt werden sollen. Der Konstuktor der Klasse Verein und dessen Code-Zeilen werden immer dann ausgeführt wenn du "new Verein()" aufrufst. Selbstverständlich darf ein Konstruktor auch Parameter haben.
In deinem Fall ist die String variable "name" z.B. eine typischer Parameter für einen Konstruktor:
Java:
public Verein(String name){
this.name=name;
....usw.
}
 
Ok, super,

die registriere mache ich nun so ohne Schleife:

Java:
    public void registriere(Verein verein)
    {
        // Wenn die Zahl der Registrierten kleiner ist als die der Möglichen, dann...
        if(registrierte < anzahlVereine) {
            // dann fülle das nächste Array-Element mit dem Verein (registrierte dient als index)
            tabelle[registrierte] = verein;
            // erhöhe die Zahl der Registrierten um 1
            registrierte++;
        } else {
            // ... ansonsten gib Hinweis aus
            System.out.println("Die Liga ist voll. Es können keine weiteren Eintragungen gemacht werden.");
        }
    }


Beim Anlegen eines Vereinobjekts muss nun wievor geschlagen ein Name übergeben werden:

Java:
public Verein(String name)
    {
        this.name=name;
     }


Toll, bliebe nur noch die Zusatzaufgabe mit dem Comparator...

Zusatzaufgabe: Entwickeln Sie eine Methode void gibTabelleAus(), die eine Tabelle ausgibt, in der die Vereine absteigend nach Ihren Punkten sortiert sind. Dazu eignet sich das Interface Compara tor aus der Java-Standardbibliothek. (4 Punkte)


Ich habe herausgefunden, dass ich den Comparator als eigene Klasse anlegen muss. Diese habe ich erstellt:

Java:
import java.util.Comparator;
 
public class VereinComparator implements Comparator<Verein> {
 
  public int compare(Verein v1, Verein v2) {
 
    if (v1.gibPunkte() == v2.gibPunkte()) {
      return 0;
    }
    else if (v1.gibPunkte() > v2.gibPunkte()) {
      return -1;
    }
    else {
      return 1;
    }
  }
}


Nun müsste ich wohl in der Klasse "Ligatabelle" eine Methode "gibTabelleAus()" schreiben, die den Comparator aufruft, oder?

Aber was kommt da rein? Hab vier Stunden im Internet gesucht, aber die wenigen Beispiele raff ich nicht.

Habt Ihr noch einen Lösungsansatz für mich?

Matthias
 
Nun,

static
<T> void
sort(T[] a, Comparator<? super T> c)
Sorts the specified array of objects according to the order induced by the specified comparator.

bringt mich nicht weiter. Ich weiß nicht, was das große T bedeutet oder das Fragezeichen oder die unterschiedlichen Klammern, vom kleinen C ganz zu schweigen.

Das ist echt frustrierend. Seit wiederum vier Stunden auf der Suche nach einem Beispiel, das irgendwie verständlich ist. Überall werden Objekte angelegt, dabei muss ich doch längst vorhandene vergleichen.

Wenn mein Comparator stimmen sollte (?), wie nutzt er mir?

Matthias
 
Sorts the specified array of objects according to the order induced by the specified comparator. All elements in the array must be mutually comparable by the specified comparator (that is, c.compare(e1, e2) must not throw a ClassCastException for any elements e1 and e2 in the array).

This sort is guaranteed to be stable: equal elements will not be reordered as a result of the sort.

Das heißt einfach, du rufst:

Java:
Arrays.sort(tabelle, new VereinComparator());

auf und danach ist das Array sortiert 😉

T ist hier der Platzhalter für den konkreten Typs des Arrays. Sieht kompliziert aus, ist es aber nicht^^ Einfach denken: Irgendein Typ^^
 
Das T ist der Variablentyp, in dem Fall ein generischer. Das c ist der Variablenname. -.-
Wenn du bis jetzt schon Probleme hattest, lass die Zusatzaufgabe doch aus. Bringt doch nichts, wenn du es jetzt irgendwie zusammenschnippselst und am Ende nichtmal bei den Basics die du bisher gelöst hast weiterkommst. Kümmer dich lieber darum, dass du diese einmal festigst.
 
Hey super!

Java:
Arrays.sort(tabelle, new VereinComparator());

Herrlich, ich hatte sämtliche Varianten:
Java Blog Buch : D) Objekte sortieren – Comparator und Comparable
http://www.java-forum.org/allgemeines/39510-arrays-listen-sortieren.html#post246043
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 12.4 Vergleichen von Objekten

versucht, und dann ist es nur eine Zeile. 😉

Hier also der Comparator

Java:
import java.util.Comparator;

public class VereinComparator implements Comparator<Verein> 
{ 
  // @Override 
  public int compare( Verein v1, Verein v2 ) 
  {
    if (v1.punkte == v2.punkte) {
      return 0;
    }
    else if (v1.punkte > v2.punkte) {
      return -1;
    }
    else {
      return 1;
    }
  }
}

und die Ausgabe:

Java:
public void gibTabelleAus()
    {
        Arrays.sort(tabelle, new VereinComparator());
        for (int i = 0; i < registrierte; i++) {
            System.out.println("Platz "+ (i+1) +") "+ tabelle[i].name+" mit "+tabelle[i].punkte+" Punkten");
        }  
    }

Klappt soweit auch ganz gut. Nur wenn ich weniger Vereine registriere als Elemente im Array tabelle sind, gibt es eine NullPointerExeption, da der Rest der Elemente nicht gefüllt ist.

Also hab ich das hier versucht (neues Datenfeld erzeugt, ein neues Array geschrieben mit der Länge der Registrierten, gefüllte Elemente in das neue Array kopiert, diese dann sortieren lassen):

Java:
private Verein[] reihenfolge;
    public void gibTabelleAus()
    {
        reihenfolge = new Verein[registrierte];
        for (int i = 0; i < registrierte; i++) {
            reihenfolge[i] = tabelle[i];
        }  
        
        Arrays.sort(reihenfolge, new VereinComparator());
        for (int i = 0; i < registrierte; i++) {
            System.out.println("Platz "+ (i+1) +") "+ tabelle[i].name+" mit "+tabelle[i].punkte+" Punkten");
        }  
    }

Nun sortiert er aber nicht mehr...:autsch: Ist das überhaupt der richtige Ansatz?

Matthias
 
Juchuuuuuuuuuuu.......,

ich habs:

Java:
public void gibTabelleAus()
    {
        Verein[] reihenfolge = new Verein[registrierte];
        for (int i = 0; i < registrierte; i++) {
            reihenfolge[i] = tabelle[i];
        }  
        
        Arrays.sort(reihenfolge, new VereinComparator());
        for (int i = 0; i < registrierte; i++) {
            System.out.println("Platz "+ (i+1) +") "+ reihenfolge[i].name+" mit "+reihenfolge[i].punkte+" Punkten");
        }  
    }

Vielen Dank an alle Mitdenker!

Matthias
 
Edit2: Böööser Gedankenfehler^^

Außerdem bringt es nichts, dass Array reihenfolge zu sortieren und dann das Array tabelle auszugeben 😉

Edit: zu langsam^^
 
Zuletzt bearbeitet:
Hier noch mal die 3 Klassen, mit denen ich diese Aufgabe komplett löste:


Der Verein:
Java:
public class Verein
{
    public String name;
    public int gewonnen;
    public int unentschieden;
    private int punkteProGewonnen;
    private int punkteProUnentschieden;
    

    /**
     * K o n s t r u k t o r
     */
    public Verein(String name)
    {
        this.name=name;
        gewonnen = 0;
        unentschieden = 0;
        punkteProGewonnen = 3;
        punkteProUnentschieden = 1;
    }
    
    /**
     * Erhöht die Anzahl der gewonnenen Spiele um 1
     */
    public void gewonnen()
    {
        gewonnen++;
    }

    /**
     * Erhöht die Anzahl der unentschiedenen Spiele um 1
     */
    public void unentschieden()
    {
        unentschieden++;
    }
    
    /**
     * Gibt die Anzahl der Punkte aus
     */
    public int gibPunkte()
    {
        return (unentschieden * punkteProUnentschieden) + (gewonnen * punkteProGewonnen);
    }
    
    /**
     * Gibt den Namen des Vereins aus
     */
    public void gibName()
    {
        System.out.println(name);
    }
}


Die Ligatabelle:
Java:
import java.util.Comparator;
import java.util.Arrays;

public class Ligatabelle
{
    private int anzahlVereine;
    private Verein[] tabelle; // Array deklarieren =>  Array-Typ[] Array-Name
    private int registrierte; // enthält Anzahl der registrierten Vereine

    /**
     * K o n s t r u k t o r
     */
    public Ligatabelle()
    {
        anzahlVereine = 20; // Anzahl der möglichen Vereine
        tabelle = new Verein[anzahlVereine]; // Array-Objekt mit [n] Elementen erstellen (alle sind nun "null")
        registrierte = 0; // Anzahl der registrierten Vereine
    }

    
    /**
     * Diese Methode gibt die Anzahl der maximal zu vergebenen Plätze aus
     */
    public int gibAnzahlPlaetze()
    {
        return anzahlVereine;
    }
    
    /**
     * Diese Methode registriert einen Verein. Ist die Liga voll, wird ein 
     * Hinweis ausgegeben und die Registrierung abgebrochen
     */
    public void registriere(Verein verein)
    {
        // Wenn die Zahl der Registrierten kleiner ist als die der Möglichen, dann...
        if(registrierte < anzahlVereine) {
            // dann fülle das nächste Array-Element mit dem Verein (registrierte dient als index)
            tabelle[registrierte] = verein;
            // erhöhe die Zahl der Registrierten um 1
            registrierte++;
        } else {
            // ... ansonsten gib Hinweis aus
            System.out.println("Die Liga ist voll. Es können keine weiteren Eintragungen gemacht werden.");
        }
    }
    
    /**
     * Diese Methode gibt die Anzahl der bereits reigistrierte Vereine an
     */
    public int gibRegistrierte()
    {
        return registrierte;
    }
    
   
    
    /**
     * Diese Methode gibt die registrierten Vereine in einer Übersicht aus
     */
    public void gibVereine()
    {
        for (int i = 0; i < registrierte; i++) {
            System.out.println(tabelle[i].name+" ) gewonnen: "+tabelle[i].gewonnen+" / unentschieden: "+tabelle[i].unentschieden);
        }  
    }
   

    /**
     * Diese Methode gibt die registrierten Vereine in einer nach den erzielten
     * Punkten geordneten Übersicht aus (mittels Comparator Klasse "VereinComparator")
     */
    public void gibTabelleAus()
    {
        // Neues Array reihenfolge zur Vermeidung einer NullPointerExeption anlegen
        Verein[] reihenfolge = new Verein[registrierte];
        
        // ...und befüllen mit den gefüllten Elementen des Arrays tabelle
        for (int i = 0; i < registrierte; i++) {
            reihenfolge[i] = tabelle[i];
        }  
        
        // Sortieren des Arrays
        Arrays.sort(reihenfolge, new VereinComparator());
        
        // das sortierte Array reihenfolge ausgeben
        for (int i = 0; i < registrierte; i++) {
            System.out.println("Platz "+ (i+1) +") \t "+ reihenfolge[i].name +" mit "+ reihenfolge[i].gibPunkte() +" Punkten");
        }  
    }
}


Der Comparator
Java:
import java.util.Comparator;

public class VereinComparator implements Comparator<Verein> 
{ 
  // @Override 
  public int compare( Verein v1, Verein v2 ) 
  {
    if (v1.gibPunkte() == v2.gibPunkte()) {
      return 0;
    }
    else if (v1.gibPunkte() > v2.gibPunkte()) {
      return -1;
    }
    else {
      return 1;
    }
  }
}

Das Wochenende war zwar im Eimer, aber ich hab einiges gerafft. :toll:

Danke noch mal und Grüße,

Matthias
 

Neue Themen


Zurück
Oben