Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist)

cmn489

Neues Mitglied
Hallo,
zu Beginn meines Programmes erzeuge ich ein Array[7]. Im Laufe des Programmes möchte ich dann eine Funktion aufrufen, die einen Parameter entgegennimmt und diesen im ersten freien Platz des Feldes speichert und daraufhin beendet wird, bis sie erneut aufgerufen wird. Ausserdem soll es eine Exception geben, falls mehr als 7 Aufrufe stattfinden. Das Problem ist, dass die Funktion zwar an sich aufgerufen wird und auch ohne Fehlermeldung durchläuft, allerdings weiß ich durch die Fehlermeldung der folgenden Funktion, dass nicht alle 7 Plätze am Ende eine Referenz speichern. Ich vermute, dass mit meinem counter etwas nicht stimmt. Kann mir eventuell jemand weiterhelfen? Die Funktion bei der der Fehler liegt, sieht wie folgt aus:

Java:
public void fuegeWettkampfrichterHinzu(Wettkampfrichter richter) throws IllegalStateException{
        int counter = 0;
        for(++counter ; counter<bewertungsverfahren.length; counter++) {
            if(counter == bewertungsverfahren.length + 1) {
                throw new IllegalStateException("Es können maximal 7 Richter aufgenommen werden");
            }
            if(bewertungsverfahren[counter] == null) {
                bewertungsverfahren[counter] = richter;
                
                break;
            
            }
        
        }
    }
 
Also so ganz verstehe ich nicht, was Du vor hast.

Aber was direkt auffällt:
a) das if(counter == bewertungsverfahren.length + 1) macht absolut keinen Sinn. Denn counter ist immer kleiner als bewertungsverfahren.length, denn das ist die Prüfung in der for Schleife.
b) Zusätzlich enthält es einen Denkfehler, denn ein array geht beim Index von 0 bis length-1!
c) die for Schleife ist dubios. Was soll das das ++counter? Wenn Du aus irgend einem Grund bei 1 loslegen willst, dann lass counter direkt bei 1 starten. Aber wie in b) gesagt: Index fängt bei 0 an.
d) Da lokale Variablen einen minimalen Geltungsbereich haben sollen, kann die Deklaration in den for-Schleifen-Kopf wandern:
for(int counter=0 ; counter<bewertungsverfahren.length; counter++) {

Die übliche Lösung ist oft nach dem Pattern:
Gehe alle Elemente durch und prüfe, wirst Du fündig, dann mach etwas und verlasse die Methode. Nach der Schleife mache die negativ-Behandlung.

Das könnte dann bei Dir so aussehen:
Java:
public void fuegeWettkampfrichterHinzu(Wettkampfrichter richter) throws IllegalStateException {
    for(int counter = 0 ; counter<bewertungsverfahren.length; counter++) {
        if(bewertungsverfahren[counter] == null) {
            bewertungsverfahren[counter] = richter;
            return;
        }
    }
    throw new IllegalStateException("Es können maximal 7 Richter aufgenommen werden");
}
Das wäre dann eine Lösung, die nach einem freien Platz im Array sucht um da einen Richter hinzu zu fügen wenn ein Platz frei ist. Und wenn kein freier Platz gefunden wird, dann wird eine Exception geworfen.

Generell würde ich aber auch die Namen der Variablen prüfen. Oder ist ein Wettkampfrichter ein Bewertungsverfahren? Die Variable bewertungsverfahren scheint ja Wettkampfrichter zu enthalten. Dann sollte man die ggf. auch so benennen.
 

Zurück
Oben