# Bundesligatabelle sortieren



## tioz (5. Jul 2004)

Hallo!

Ich bin neu hier! Ich heiße Marco und bin in der 11. Klasse. In Informatik haben wir das Thema Java, was mich auch sehr interessiert. Jetzt haben wir allerdings eine Aufgabe bekommen, bei der ich nicht weiterkomme.

Wir sollen eine Bundesligatabelle schreiben.

Die Klasse "Mannschaft" war noch einfach. Sie sollte einfach nur einige Attribute haben (Spiele, Punkte, Tore, tore reinbekommen und name). Wenn eine Mannschaft gegen eine andere spielt soll der Aufruf 


```
spiel("kicker", "Bolzer", 3,1)
```
erfolgen (wenn die "kicker" gegen die "Bolzer" 3:1 gewinnen).

Außerdem sollen die Mannschaften sortiert werden. 
Falls A mehr punkte hat als B ist A besser
haben A und B gleich viele Punkte entscheidet die Tordifferenz
bei gleichvielen punkten und gleicher tordifferenz is die mannschaft besser, die mehr tore geschossen hat
sonst entscheidet der zufall

Die Liga soll eine Collection sein die sinnvoll zu wählen ist.

Ich habe alles soweit fertig, aber ich habe keine Ahnung, wie man die Mannschaften sortieren soll. Vielleicht kann mir ja hier jemand helfen, wäre echt toll 

danke schon mal im vorraus,
tioz


----------



## bygones (5. Jul 2004)

Ich würde eine List nehmen (z.b. ArrayList) - die ist auch eine Collection. Der fügst du die Teams hinzu und lässt dann spielen. Wenn du die Tabelle anzeigen lassen willst kannst du die Liste über Collections.sort(Liste l) sortieren lassen.

Wichtig hierbei ist, dass die Klasse die sortiert werden soll das Interface _Comparable_ implementieren muss. Das hat die Methode _compareTo(Object o)_ die dir sagt ob das zu vergleichende Objekt größer, kleiner oder gleich ist. In dieser Methode musst du dann die Vergleiche der Reihe nach durchgehen (so wie du sie geschrieben hast)....


----------



## tioz (5. Jul 2004)

So, damit ihr nich denkt, ich tu selbst nichts für mein programm ist hier das was ich bis jetzt selbst geschrieben
habe. Wir programmieren in der schule immer mit BlueJ. Da ich mich noch nicht allzu lange mit Java beschäftige bin ich eigentlich recht stolz auf meinen quelltext bis jetzt... aber wenn jemand verbesserungsvorschläge hat wäre ich auch dankbar.

```
public class Mannschaft
{
	
	public String name;
	public int spiele;
	public int punkte;
	public int toreGeschossen;
	public int toreReingekriegt;
	
	public Mannschaft(String name)
	{
		this.name = name;
		this.spiele = 0;
		this.punkte = 0;
		this.toreGeschossen = 0;
		this.toreReingekriegt = 0;
	}
	
	public String getName()
	{
	    return name;
	}


}
```


```
import java.util.ArrayList;

public class LigaVerwaltung extends ArrayList
{

    public LigaVerwaltung()
    {
       super();
    }
      
    
    public Mannschaft mannschaftHinzufuegen(String name)
    {
            Mannschaft neueMannschaft = new Mannschaft(name);
            this.add(neueMannschaft);
            return neueMannschaft;
            }
    
    
    public void spiel(String mannsch1, String mannsch2, int toreMannschaft1, int toreMannschaft2)
    {
        Mannschaft mannschaft1 = null;
        Mannschaft mannschaft2 = null;
        
        for (int i = 0; i < size(); i++)
            {
               if (mannschaftSehen(i).name == mannsch1)
               {
                   mannschaft1 = mannschaftSehen(i);
               }
            }
        
           for (int i = 0; i < size(); i++)
            {
               if (mannschaftSehen(i).name == mannsch2)
               {
                   mannschaft2 = mannschaftSehen(i);
               }
            }

        mannschaft1.spiele = mannschaft1.spiele + 1;
        mannschaft2.spiele = mannschaft2.spiele + 1;
        mannschaft1.toreGeschossen = mannschaft1.toreGeschossen + toreMannschaft1;
        mannschaft2.toreGeschossen = mannschaft2.toreGeschossen + toreMannschaft2;
        mannschaft1.toreReingekriegt = mannschaft1.toreReingekriegt + toreMannschaft2;
        mannschaft2.toreReingekriegt = mannschaft2.toreReingekriegt + toreMannschaft1;
        
        if (toreMannschaft1 == toreMannschaft2)
            {
                mannschaft1.punkte = mannschaft1.punkte + 1;
                mannschaft2.punkte = mannschaft2.punkte + 1;
            }
        else
            {
                if (toreMannschaft1 > toreMannschaft2)
                    mannschaft1.punkte = mannschaft1.punkte + 3;
                else
                    mannschaft2.punkte = mannschaft2.punkte + 3;
            }
    }
    
    public Mannschaft mannschaftSehen(int platz)
    {
        
        return  (Mannschaft)this.get(platz);
        
            
    }
    
    public void tabelleSehen()
    {
        
        for (int i = 0; i < size(); i++)
        {
            System.out.println(i + 1 + ".) " + mannschaftSehen(i).name + "\t \t" + mannschaftSehen(i).punkte+ "\t" 
                + mannschaftSehen(i).toreGeschossen+ " : " + mannschaftSehen(i).toreReingekriegt);
            
        }   
    }
}
```


----------



## Illuvatar (5. Jul 2004)

Verbesserungsvorschläge:
1. Von der Logik her passt es nicht so ganz, wenn die LigaVerwaltungsklasse eine ArrayList ist, oder? Mach lieber eine neue Klasse.
2.
x = x + y;
entspricht
x += y;
3.
x += 1;
entspricht
x++;


Zu deinem Problem: Mannschaft muss jetzt noch Comparable implementieren, und dann kannst du es sortieren.


----------



## Isaac (5. Jul 2004)

Jo, statt Vererbung einfach Agregation. Sprich du definierst innerhalb von LigaVerwaltung eine private ArrayList()


----------



## Isaac (5. Jul 2004)

Es gibt ne Menge das ich ändern würde.

1) Englische Bezeichnungen
2) Agregation statt Vererbung
3) mannschaftSehen(i).name == mannsch2 ist ein Stringvergleich. das geht in die Hose. equals nutzen
4) Variablen von Manschaft private machen und über getXXX und setXXX nutzen
5) Der Konstruktor in Ligaverwaltung ist überflüssig
6) Variablen mit ihrer Art starten lassen. Nicht "String team" oder "int goal" sondern "String strTeam" und "int iGoal"
7) Auch einzeilige ifs und elses mit {} versehen. Das minimiert Fehler
8 ) this. vermeiden. 
9) Übergabeparameter nicht genauso nenen wie Methodenparameter. Damit "this.name = name" geht. Gerade bei Veränderlichen Variablen hat man da schnell mal den falschen am wickel wenn man das this. mal vergisst.
10) Besser StringBuffer für lange String Verknüpfungen.

Sehe das bitte als Vorschläge und nicht als der Weissheit letzer Schluss. Zu ein zwei der Punkte haben andere hier sicher andere Meinungen. Gerade was die Vormatierung des Codes anbelangt.


----------



## tioz (5. Jul 2004)

Hmm... ich werds mal versuchen!! Manches wird vielleicht nich gleich klappen, weil ich das noch nich kann, aber man kann das ja sicher lernen  ihr könnt es ja auch... ich änder das alles ma noch ein bischen und poste dann später noch mal ne andere version.

danke für die Vorschläge bis jetzt


----------

