Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist.

Timo2905

Neues Mitglied
Zur Zeit bereite ich mich auf meine erste Klausur zum Thema Programmierung vor. Nun soll ich eine Methode schreiben, die einem Array ein weiteres Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Soweit sieht meine Programmcode schlüssig aus, wenn ich jedoch versuche etwas auszugeben, erhalte ich die Meldung java.lang.ArrayIndexOutOfBoundsException: und kann mir leider echt nicht erklären woran es liegt. Vielen Dank schonmal für eure Antworten und nun mein Programmcode:


Java:
public static String[] fuegeHinzu(String[] woerter, String wort){
        
        String [] woerter2 = new String[woerter.length + 1];
        
        for(int i = 0; i < woerter.length; i++){
            
            if(wort != woerter[i]){
                
             woerter[i + 1] = wort;   
              
            } 
                            
        }
        return woerter2;
    }
    
    public static void main(String[] args){
        
        System.out.println(fuegeHinzu(new String[]{"Haus", "Maus", "Raus"}, "Raus"));
        System.out.println(fuegeHinzu(new String[]{"Haus", "Maus", "Raus"}, "Haus"));
        System.out.println(fuegeHinzu(new String[]{"Haus", "Maus", "Raus"}, "Klaus"));
    }
        
}
 
Soweit sieht meine Programmcode schlüssig aus
Das sehe ich anders. Du vergleichst jeden String im Array mit einem Wort (per Referenz, was an sich schon falsch ist) und wenn sich diese unterscheiden, platzierst Du das Wort an die nächste Stelle in diesem Array. Dafür gibst Du ein ganz anderes Array zurück. Kurz: an dem Code stimmt praktisch gar nichts 🙂
 
Also ich würde hier auch erst einmal Abstand vom Code nehmen und genau überlegen, was da überhaupt passieren soll!

Du hast ja drei Beispiele gegeben:
"Haus", "Maus", "Raus" / "Raus"
"Haus", "Maus", "Raus" / "Haus"
"Haus", "Maus", "Raus" / "Klaus"

Was soll da die jeweils das Ergebnis sein? Kannst Du erst einmal das genau sagen?

Du musst eine Aufgabenstellung genau verstanden haben - wenn das nicht der Fall ist, dann kann nichts richtiges heraus kommen.

Und dann würde ich dir empfehlen, ganz viel praktisch zu üben - bei dem Code liegt so viel im argen - Da aber der Ansatz offensichtlich schon falsch ist, lohnt es sich kaum, darauf einzugehen, aber in Kürze einmal:
- Exception tritt auf, weil die Schleife bis length-1 des Arrays läuft und du aber us das Element mit +1 zugreifst.
- Nimm ordentliche Namen! Das Problem ist, dass Du Zuweisungen in woerter hast, aber das Ziel ist doch eigentlich woerter2 (das auch um ein Feld größer ist und daher wäre die Exception weg - aber der Algorithmus würde dadurch nicht besser!)

Kein Schleifenende?
Doch, er hat eine saubere Schleife, die auch ein klares Schleifenende hat - genau richtig um über alle Elemente in woerter zu iterieren.
 
Java:
import java.util.Arrays;

public class Utils {
    public static String[] fuegeHinzu(String[] woerter, String wort) {
        for (String string : woerter) {
            if (string.equals(wort)) {
                return woerter;
            }
        }
        int len = woerter.length;
        String[] woerter2 = new String[len + 1];
        for (int i = 0; i < len; i++) {
            woerter2[i] = woerter[i];
        }
        woerter2[len] = wort;
        return woerter2;
    }

    public static void main(String[] args) {
        String[] mystrings = new String[] { "Haus", "Maus", "Raus" };
        System.out.println(Arrays.toString(mystrings = fuegeHinzu(mystrings, "Raus")));
        System.out.println(Arrays.toString(mystrings = fuegeHinzu(mystrings, "Haus")));
        System.out.println(Arrays.toString(mystrings = fuegeHinzu(mystrings, "Klaus")));
        System.out.println(Arrays.toString(mystrings = fuegeHinzu(mystrings, "Barbara")));
    }
}
 

Zurück
Oben