# Sortieren und Suchen



## Guest (13. Dez 2007)

Hallo. Ich find das Forum hier super und sehr hilfreich. Und nun würde ich euch um ein wenig Hilfe bitten. Ich betrete mti dem Programmieren so ziemlich Neuland und nun steht mir folgende Aufgabe bevor. Es wäre nett wenn ihr mit ein paar Lösungswege und Tipps zur Verfügung stellen könntet, damit ich mich Mittwoch nicht so ganz blamiere 



> Nutzen Sie das Ergebnis aus der Wertungsaufgabe 5: Team. Fügen Sie der Klasse eine
> Methode (NICHT statisch!) hinzu, die diese Objekt-Sammlung nach dem Namen der
> Teammitglieder sortiert. Nutzen Sie das Sortierverfahren Select-Sort: Finden des
> Minimums, Setzen des Minimums an den Anfang, Sortieren des Restes.
> ...




Hier noch die Lösung zur gegebenen Klasse Team.

```
public class Team
{   private Student[] team;
    private int zTeam;
    private int maxTeam;
    private int i;
    

    /**
     * Constructor for objects of class Team
     */
    
    private Student [] s;
    
    Student a = team[i];
    
    public Team(int anzahl) {
        this.a = new Student [anzahl];
        
        
            }

    public void einfuegen (Student s) {
        for (int i=0; i < team.length; i++) {
            if (team [i] == null) {
                team [i] = s;
                break;
                
            } 
        } 
    }
                
    public void entfernen (Student s) {
        for(int i = 0; i < team.length; i++) {
            if (team[i].equals(a)) {
                team [i] = null;
                break;
                
            } 
        } 
    }
          
    
    public void gibAus ()
      {
          int i=0;
          while( i < team.length) {
              System.out.printeln("Index:"+i+" hat den Wert "+team[i]);
              i++;
            } 
        } 
    }
```


----------



## fincky87 (13. Dez 2007)

Der Post ist von mir sorry. Hab bloß vergessen mich einzuloggen!


----------



## fincky87 (18. Dez 2007)

Also ich hab jetzt erstmal was erarbeitet, aber das funktioniert noch nicht so ganz, kann mir jemand helfen und sagen was daran noch falsch ist?


```
public interface Comparable{
 
public class Team {
// instance variables:
private Student[] team;
private int zteam; //Zeiger auf Array team = Anzahl der Teammitglieder
/**
   * Constructor for objects of class Team
   */
public Team(int maxTeam) {
// initialise instance variables 
team = new Student[maxTeam];
zteam=0;
}//Team
// nicht gefordert: Standard-Team mit Größe 10
public Team(){ this(10); }
public void add(Student neu) {
if(zteam<team.length) {
team[zteam] = neu;
zteam++;
}//if  
}//sampleMethod
public int size(){ return zteam;}
public Student get(int index){
if(index>=0 &&index<zteam) return team[index];
// es könnte auch ein Student objekt ohne Inhalte geliefert werden:
// return new Student("","",0);
else return null; //kein Objekt - leere Adresse
}//get
public void remove(int index){
if(index>=0 &&index<zteam) {
for(int i=index;index<zteam-1;index++)team[index] = team[index+1];
zteam--; //Ein Mitglied weniger
}//if  
}//remove
public void ausgabe(){
IntIO io = new IntIO();
io.writeln("Unser Team:");
for(int i=0;i<zteam;i++) io.writeln((i+1)+". "+team[i]);
}//ausgabe
 
public void sort(Student[] a)
{
	for(int i = a.length - 1; i > 0; i--)
	{
     	for(int j = 0; j < i; j++)
     	{
         	if((a[j].compareTo(a[j + 1])) > 0)
         	{
             	Student z = a[j];
             	a[j] = a[j + 1];
             	a[j + 1] = z;
         	}
     	}
 	}
}
}
}//Team
```



```
public class Student implements Comparable {
 
// Merkmale eines Studenten
private String mname;
private String mvorname;
private int mmatrikel;
private int mects;
/**
   * Erster Konstrukor mit allen Parametern:
   * @param name- Name des Studenten
   * @param vorname - Vorname
   * @param matNr   - Matrikelnummer
   * @param pkte- Anzahl bisheriger ECTS-Punkte
   */
public Student(String name, String vorname, int matNr, int pkte){
mname = name;
mvorname = vorname;
mmatrikel= matNr;
mects = pkte;
}//Student
/**
   * Zweiter Konstrukor für neuen Studenten ohne bisherige Punkte:
   * @param name- Name des Studenten
   * @param vorname - Vorname
   * @param matNr   - Matrikelnummer
   */
public Student(String name, String vorname, int matNr){
mname = name;
mvorname = vorname;
mmatrikel= matNr;
mects = 0;
}//Student
//-- Zugriffsmethoden -------------------------------------------
//-- lesende/sondirende Methoden:
public String getName () { return mname; }
public String getVorname () { return mvorname; }
public int getMatrikel() { return mmatrikel;}
public int getECTS () { return mects; }
//-- verändernde/schreibende Methoden:  
public void setECTS(int pkte){ mects=pkte; }
//-- Verarbeitung  
public void pruefungBestanden(int pkte) {
mects = mects + pkte;
}//pruefungBestanden  
//-- Hier die Ausgabe-Methode:
// Da nicht über Ausgabe gesprochen wurde, war dieses nicht entscheidend:
public void ausgabe(){
System.out.println(
mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS");
}//ausgabe  
//-- toString für die bequeme Ausgabe:
public String toString(){
return mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS";
}//toString
 
public int compareTo(Student student)
{
return mname.compareTo(student.getName());
}
 
}//Student
```


----------



## Marco13 (18. Dez 2007)

Welcher Mittwoch war da gemeint?

Ein cast in compareTo hat noch gefehlt. Und an diesem stück Code (das richtig eingerückt ist, und das man einfach rauskopieren, compilieren und starten kann, ohne sich mit mehreren Klassen-Dateien und einer fehlenden main-Methode rumschlagen zu müssen  :roll: ) sieht man, dass es dann funktioniert...

```
class Team
{
    // instance variables:
    private Student[] team;
    private int zteam; //Zeiger auf Array team = Anzahl der Teammitglieder
    /**
     * Constructor for objects of class Team
     */
    public Team(int maxTeam)
    {
        // initialise instance variables
        team = new Student[maxTeam];
        zteam = 0;
    } //Team

    // nicht gefordert: Standard-Team mit Größe 10
    public Team()
    {
        this(10);
    }

    public void add(Student neu)
    {
        if(zteam < team.length)
        {
            team[zteam] = neu;
            zteam++;
        } //if
    } //sampleMethod

    public int size()
    {
        return zteam;
    }

    public Student get(int index)
    {
        if(index >= 0 && index < zteam)
            return team[index];
        // es könnte auch ein Student objekt ohne Inhalte geliefert werden:
        // return new Student("","",0);
        else
            return null; //kein Objekt - leere Adresse
    } //get

    public void remove(int index)
    {
        if(index >= 0 && index < zteam)
        {
            for(int i = index; index < zteam - 1; index++)
                team[index] = team[index + 1];
            zteam--; //Ein Mitglied weniger
        } //if
    } //remove

    public void ausgabe()
    {
        //IntIO io = new IntIO();
        System.out.println("Unser Team:");
        for(int i = 0; i < zteam; i++)
            System.out.println((i + 1) + ". " + team[i]);
    } //ausgabe


    public void sort()
    {
        sort(team);
    }

    public void sort(Student[] a)
    {
        for(int i = a.length - 1; i > 0; i--)
        {
            for(int j = 0; j < i; j++)
            {
                if((a[j].compareTo(a[j + 1])) > 0)
                {
                    Student z = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = z;
                }
            }
        }
    }
}


public class Student implements Comparable
{
    public static void main(String args[])
    {
        Team team = new Team(4);
        team.add(new Student("C", "x", 1, 2));
        team.add(new Student("B", "x", 1, 2));
        team.add(new Student("A", "x", 1, 2));
        team.add(new Student("D", "x", 1, 2));
        team.ausgabe();
        team.sort();
        team.ausgabe();


    }


    // Merkmale eines Studenten
    private String mname;
    private String mvorname;
    private int mmatrikel;
    private int mects;
    /**
     * Erster Konstrukor mit allen Parametern:
     * @param name- Name des Studenten
     * @param vorname - Vorname
     * @param matNr   - Matrikelnummer
     * @param pkte- Anzahl bisheriger ECTS-Punkte
     */
    public Student(String name, String vorname, int matNr, int pkte)
    {
        mname = name;
        mvorname = vorname;
        mmatrikel = matNr;
        mects = pkte;
    } //Student

    /**
     * Zweiter Konstrukor für neuen Studenten ohne bisherige Punkte:
     * @param name- Name des Studenten
     * @param vorname - Vorname
     * @param matNr   - Matrikelnummer
     */
    public Student(String name, String vorname, int matNr)
    {
        mname = name;
        mvorname = vorname;
        mmatrikel = matNr;
        mects = 0;
    } //Student

    //-- Zugriffsmethoden -------------------------------------------
    //-- lesende/sondirende Methoden:
    public String getName()
    {
        return mname;
    }

    public String getVorname()
    {
        return mvorname;
    }

    public int getMatrikel()
    {
        return mmatrikel;
    }

    public int getECTS()
    {
        return mects;
    }

    //-- verändernde/schreibende Methoden:
    public void setECTS(int pkte)
    {
        mects = pkte;
    }

    //-- Verarbeitung
    public void pruefungBestanden(int pkte)
    {
        mects = mects + pkte;
    } //pruefungBestanden

    //-- Hier die Ausgabe-Methode:
    // Da nicht über Ausgabe gesprochen wurde, war dieses nicht entscheidend:
    public void ausgabe()
    {
        System.out.println(
            mname + ", " + mvorname + ", " + mmatrikel + " : " + mects + " ECTS");
    } //ausgabe

    //-- toString für die bequeme Ausgabe:
    public String toString()
    {
        return mname + ", " + mvorname + ", " + mmatrikel + " : " + mects + " ECTS";
    } //toString

    public int compareTo(Object object)
    {
        Student student = (Student) object;
        return mname.compareTo(student.getName());
    }

} //Student
```


----------



## fincky87 (18. Dez 2007)

Cool. Erstmal danke. Ja der morgige Mittwoch ist gemeint, also keine Angst.

Aber...

Ist die Sortmethode nicht ein Bubblesort? Bzw. hab ich doch da nur eine statische Methode? Oder wie bekomm ich da neue Objekte als Studenten einem Team zugeordnet?


----------



## Marco13 (18. Dez 2007)

Jo, kann schon sein, dass das ein Bubblesort ist. Das war ja nicht die Frage. (Jetzt auf eine Websuche zu verweisen, wäre ermüdend....). Statisch ist da erstmal nichts außer der main. Und ... wenn man die Teamgrößen ändern können will, ist das eben etwas, was man noch einbauen muß. ArrayList statt eines Arrays, oder die Arraygröße per Hand anpassen... Hm...  :roll:


----------



## fincky87 (18. Dez 2007)

ich seh nich mehr durch... wir haben jetzt ein Prog was läuft aber eine statische mainmethode und ein team können wir auch nicht mehr erzeugen


----------



## Marco13 (18. Dez 2007)

Die main muss statisch sein. Die Aufgabenstellung würde ich so interpretieren, dass es eben nicht 
public *static* void sort(Team team) // sortiert das übergebene team
sondern
public void sort() // sortiert 'this' team
sein sollte, und das ist es ja auch.

Ein Team wird in der main ja erzeugt. Das geht jetzt genauso wie vorher. 

Schreib' eine konkrete Frage, oder sag' genauer, was unklar ist.


----------



## fincky87 (18. Dez 2007)

das anlegen von Objekten im Objektinspektor funktioniert nicht unter BlueJ. Wenn man implements Comparable rausnimmt erscheint das Menü erst wieder....


----------



## Marco13 (18. Dez 2007)

Da das jetzt nichtsmehr mit "Sortieren und Suchen" zu tun hat, solltest du ggf. einen neuen Thread starten wie "Programm starten mit BlueJ" (oder so) (oder eben gleich das Programm von der Kommandozeile aus starten...) Da ich mit BlueJ noch nicht gerbeitet habe, kann ich dazu nichts sagen...


----------

