# Nach Namen sortieren und diese in 3 Gruppen aufteilen



## Silam (13. Jun 2007)

Hi erstmal,

studiere seit kurzem Medizinische Informatik, der Mathe und Medizinteil ist super aber bei Informatik hab ich noch einige Probleme, ich hoffe ihr könnt mir da weiterhelfen.

Aufgabe:
- (Vor - und Nach) Name , Matrikelnummer, Semester einse Studenten erfragen und diese in 3 Gruppen aufteilen 
- pro Gruppe dürfen max. 20 teilnehmer
-ich soll diese in einer Klasse TeilnehmendePersonen, in einer Klasse Uebungsgruppen in diese dann in einer Benutzerkommunikation wiedergeben

angefangen hab ich auf jeden Fall:

was ich bisher hab: 







bei den Gruppen weiß ich gar nicht wie ich das machen soll, hab ich noch nie gemacht

das hab ich bis jetzt







tja bei der Benutzerkommunikation werd ich schon hinkriegen hoff ich

Ich danke im voraus wenn ihr mir helfen könntet dankeeeeeeeeeeeeeeeee ))))))


----------



## Tobias (13. Jun 2007)

1. Ist eine Übungsgruppe eine teilnehmende Person?
2. Was hat diese switch-Abfrage zu bedeuten?

mpG
Tobias


----------



## merlin2 (13. Jun 2007)

switch-Abfrage?


----------



## Silam (13. Jun 2007)

ehmm die teilnhemer werden in diese Übungsgruppen unterteilt undzwar nach dem Alphabet soll das ganze sein, und 3 gruppen soll es geben, daher die if else anweisung, sprich wenn der name von a - i ist soll die Person in die Gruppe 1 also sollte da unten noch return gruppe1 und so weiter halt

das hab ich mir mit google geholt weiß aber net obs stimmt, die sache mit char at, wie gesagt hab ich noch nie gemacht, aber... naja 
wie sortiert man denn dann namen?


----------



## Tobias (13. Jun 2007)

Vergiß Frage 2, ich hab da was durcheinandergeworfen. Beantworte Frage 1: Ist eine Übrungsgruppe eine teilnehmende Person?

mpG
Tobias


----------



## Silam (13. Jun 2007)

nein sind sie nicht, das sind 2 verschiedene Klassen ..... )))
die Teilnehmenden Personen werden in die Übungsgruppen eingeteilt

achja und danke ))


----------



## Tobias (13. Jun 2007)

Warum erbt Uebungsgruppe dann von TeilnehmendePersonen?

mpG
Tobias


----------



## Silam (13. Jun 2007)

hmmmm ok hast recht jetzt hab ich verstanden was du meinst, ok das kommt mal raus )
hab ich vergessen ,
ok mein einziges Problem ist eigentlich wie sorteir ich diese namen nach dem alphabet und gib die namen dann in der jeweiligen gruppe wieder  *großes Fragzeichen im Kopf hab*


----------



## Tobias (13. Jun 2007)

Weiß ich doch. Nun, um deine TeilnehmendenPersonen nach Namen sortieren zu können, solltest du zunächst einmal Comparable implementieren. Für eine Beschreibung von Comparable guckst du in die Javadocs.

mpG
Tobias

P.S.: Wenn du den Profi raushängen lassen willst, benutzt du die Klasse Collator in deiner compareTo(). Lass mal Code sehen, wenn du soweit bist ...


----------



## Silam (13. Jun 2007)

ich hab mir jetzt mal den ganzen Text durchgelesen aber ich weiß net also gibt es da net noch ne andere möglichkeit denn im unterricht kam sowas wirklich noch nie vor, bisher war das nämlich immer der stoff vom unterricht oder aus dem buch BlueJ, welches ich natürlich auch hab ????????????

edit:

nebenbei noch ne bemerkung den Stoff des Themas arrays sollten wir uns anschauen also Tipp vom Prof 

edit: was mir noch aufgefallen ist: mit dem comperable der sortiert mir das automatisch kann das sein, ich will aber die Namen in den Gruppen haben also wäre doch die if else anweisung besser oder nicht, zumindest kenne ich nur diese Möglichkeit bisjetzt oder sollte sie gut kenen  in Anführungszeichen ehe ehe


----------



## Quickbeam2k1 (13. Jun 2007)

Also du brauchst einfach einen Sortieralgorithmus für z.B den nachnamen, ich meine, dass kann man noch alles mit kleiner  und größer machen oder? Am besten Quicksort oder sowas.
www.sortieralgorithmen.de Musst dann halt auf die objekte im Array und von denen auf den Nachnamen zugreifen. Notfalls muss man sich dort noch um die Ordnung kümmern, wenns mit kleiner nicht gehen sollte. Dann wäre Comparable wirklich am besten 

Diese Leute stehen dann sortiert in einem Array, und dann gibst du einfach die positionen 0-19, 20-39, und 40-... zurück musst halt nur sehen wieviele Leute es insgesamt gibt.


----------



## Tobias (13. Jun 2007)

Mh, ok, wollte ich zu "professionell" an die Sache ran... Gut, dann machen wir es auf nicht-Java Art und Weise:

Du hast eine Klasse TeilnehmendePerson, eine Klasse Uebungsgruppe und eine Main-Klasse, die die Verteilung der Teilnehmer auf die Übungsgruppen vornimmt (und ausserdem den ganzen Eingabekrams abhandelt). TeilnehmendePerson hast du bereits oben angegeben.

Uebungsgruppe sieht etwa so aus:

```
class Uebungsgruppe {

    private TeilnehmendePerson[] teilnehmer;

    private String name;

    public Uebungsgruppe(String name) {
        this.name = name;
        teilnehmer = new TeilnehmendePerson[20]();
    }

    public void addTeilnehmer(TeilnehmendePerson p) throws IndexOutOfBoundsException {
        teilnehmer[teilnehmer.length] = p;
    }

    public int getTeilnehmerAnzahl() {
        return teilnehmer.length;
    }

    public String getName() {
         return name;
    }

}
```


```
class Main {

    public static void main(String[] args) {
         Uebungsgruppe uebungAK = new Uebungsgruppe("A-K");
         Uebungsgruppe uebungLR = new Uebungsgruppe("L-R");
         Uebungsgruppe uebungSZ = new Uebungsgruppe("S-Z");

         // Read Ahead Operationen für ersten Loop

         while(/*irgendeine Form von Abbruchbedingung, z.B. x eingegeben oder so*/) {
             TeilnehmendePerson p = new TeilnehmendePerson(eingegebenerName, eingegebenerNachname);
             char anfangsbuchstabe = p.getNachname().getCharAt(0);
             if(anfangsbuchstabe >= 'A' && anfangsbuchstabe <= 'K') {
                  if(uebungAK.getTeilnehmerAnzahl() < 20) {
                       uebungAK.addTeilnehmer(p);
                  }
                  else {
                      System.out.println("Zuviele Teilnehmer in Gruppe " + uebungAK.getName());
                  }
             }
             if(anfangsbuchstabe >= 'L' && anfangsbuchstabe <= 'R') {
                  if(uebungAK.getTeilnehmerAnzahl() < 20) {
                       uebungAK.addTeilnehmer(p);
                  }
                  else {
                      System.out.println("Zuviele Teilnehmer in Gruppe " + uebungLR.getName());
                  }
             }
             if(anfangsbuchstabe >= 'S' && anfangsbuchstabe <= 'Z') {
                  if(uebungAK.getTeilnehmerAnzahl() < 20) {
                       uebungAK.addTeilnehmer(p);
                  }
                  else {
                      System.out.println("Zuviele Teilnehmer in Gruppe " + uebungSZ.getName());
                  }
             }

             // Einlesen nächster Teilnehmer
         }
    }
}
```

Aller Code ungetestet und nur als Beispiel gedacht.

mpG
Tobias


----------



## Silam (13. Jun 2007)

vav hammer du bischd der beste 
dankeeee

ich werde deins mit meinem kombinieren wenn du nix dagegen hast ))


----------



## Tobias (13. Jun 2007)

Nein, aufs Kombinieren wollte ich hinaus.

mpG
Tobias


----------



## Silam (13. Jun 2007)

ok dankeee,dass du dir zeit genommen hast ))
dann schaff ich die aufgabe noch bis morgen *freu*


----------



## Silam (14. Jun 2007)

ehmm noch mal ne Frage was heißt denn dieses throws IndexOutOfBoundsException ?????


----------



## Tobias (14. Jun 2007)

Da jede Uebungsgruppe nur 20 Teilnehmer aufnehmen kann, wird beim hinzufügen des 21. eine IndexOutOfBoundsException ausgelöst. Die könnte man dann mit try-catch abfangen und darauf reagieren.

Da es sich um eine Subklasse von RuntimeException handelt ist die Deklaration nicht nötig, du kannst das "throws IndexOutOfBoundsException" also auch einfach weglassen. Ich hab es hingeschrieben, um deutlich zu machen, das die addTeilnehmer() nicht die Menge an bereits hinzugefügten Teilnehmern prüft.

mpG
Tobias


----------

