String index out of range

Sigmar

Mitglied
Hallo zusammen
ich habe hier nochmal ein Problem mit einem anderen Programm. Ich sollte diesmal ein Programm schreiben welches zwei Wörter nehmen und bestimmen ob das kürzere im längeren enthalten ist. Ich habe zuerst die zwei Wörter abgefragt und sichergestellt dass String one das längere ist.
Danach habe ich eine for-Schleife die durch jeden Buchstaben von one cycled un überprüft ob er mit dem ersten Buchstaben von two übereinstimmt.
Falls ja kommt die nächste for-Schleife bei der durch alle Buchstaben von two gecycled wird bis ein Buchstabe nicht mehr übereinstimmt oder das Wort vollständig vorhanden ist.
Im Grunde ist der Code vollständig implementiert aber ich habe jedes mal eine String index out of range Fehlermeldung die sich auf die Zeile if
Code:
(two.charAt(o) == one.charAt(i))[CODE] bezieht (Die gesamte Meldung ist weiter unten).

Hat jemand evt. eine Idee was der Fehler sein könnte den ich finde ihn einfach nicht.
Gruss Sigmar

[CODE] public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String one;
        String two;
        String test;
        int i;
        int o;
        boolean f = false;

        System.out.println("Geben sie das erste Wort ein.");
        one = sc.nextLine();

        System.out.println("Geben sie das zweite Wort ein.");
        two = sc.nextLine();

        //ONE WIRD ZUM GRÖSSEREN WORT
        if (one.length() < two.length()) {
            test = one;
            one = two;
            two = test;
        }
        //CYCLED DURCH JEDEN BUCHSTABEN VON ONE
        for (i = 0; i <= one.length() - 1; i++) {
            //ÜBERPRÜFT OB DER ERSTE BUCHSTABE VON TWO VORKOMMT
            if (two.charAt(1) == one.charAt(i)) {
                //CYCLED DURCH JEDEN BUCHSTABEN VON TWO
                for (o = 1; o <= two.length()-1; i++) {
                    //ÜBERPRÜFT OB DAS WORT WEITERHIN ÜBEREINSTIMMT
                    if (two.charAt(o) == one.charAt(i)) {
                        if (o == two.length() - 1) {
                            i = one.length()-1;
                            f = true;
                        }
                        i++;
                    } else {
                        o = two.length()-1;
                    }
                }
            }
        }
       
        if (f == true){
            System.out.println(two+" ist in "+one+" enthalten.");
        }else{
            System.out.println(two+" ist in "+one+" nicht enthalten.");
        }
    } [CODE]

[CODE]
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.lang.String.charAt(String.java:658)
    at M411.Str_5.main(Str_5.java:41)
C:\Users\Liam\AppData\Local\NetBeans\Cache\11.2\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\Liam\AppData\Local\NetBeans\Cache\11.2\executor-snippets\run.xml:94: Java returned: 1
BUILD FAILED (total time: 5 seconds) [CODE]
 
Ach ja, der Boolean f ist dafür da dass ich ohne grosse Probleme aus der for-Schleife raus kann und trotzdem ein anderes Ergebnis habe als wenn sie einfach fertig durchgelaufen wäre.
 
Also so würde es mit contains funktionieren 🙂
Java:
public static void main(String[] args) {
        String a = "test";
        String b = "atesta";
        
        if(b.contains(a)) {
            System.out.println("Der String " + a + "  ist in " + b + " enthalten!");
        }else if(a.contains(b)) {
            System.out.println("Der String " + b + "  ist in " + a + " enthalten!");
        }else {
            System.out.println("Es ist nicht enthalten");
        }

    }
Ich schaue mir mal eben deinen Code an 🙂
 
Du hattest die falsche Variable inkrementiert 😉
Java:
public static void main(String[] args) {
        String one = "test";
        String two = "abctesta";
        String test;
        boolean f = false;

        //ONE WIRD ZUM GRÖSSEREN WORT
        if (one.length() < two.length()) {
            test = one;
            one = two;
            two = test;
        }
        //CYCLED DURCH JEDEN BUCHSTABEN VON ONE
        for (int i = 0; i < one.length(); i++) {
            //ÜBERPRÜFT OB DER ERSTE BUCHSTABE VON TWO VORKOMMT
            if (two.charAt(i) == one.charAt(i)) {
                //CYCLED DURCH JEDEN BUCHSTABEN VON TWO
                for (int o = 0; o < two.length(); o++) {
                    //ÜBERPRÜFT OB DAS WORT WEITERHIN ÜBEREINSTIMMT
                    if (two.charAt(o) == one.charAt(i)) {
                        if (o == two.length() - 1) {
                            i = one.length()-1;
                            f = true;
                        }
                        i++;
                    } else {
                        o = two.length()-1;
                    }
                }
            }
        }
      
        if (f == true){
            System.out.println(two+" ist in "+one+" enthalten.");
        }else{
            System.out.println(two+" ist in "+one+" nicht enthalten.");
        }
    }
 
Du hattest die falsche Variable inkrementiert 😉
Java:
public static void main(String[] args) {
        String one = "test";
        String two = "abctesta";
        String test;
        boolean f = false;

        //ONE WIRD ZUM GRÖSSEREN WORT
        if (one.length() < two.length()) {
            test = one;
            one = two;
            two = test;
        }
        //CYCLED DURCH JEDEN BUCHSTABEN VON ONE
        for (int i = 0; i < one.length(); i++) {
            //ÜBERPRÜFT OB DER ERSTE BUCHSTABE VON TWO VORKOMMT
            if (two.charAt(i) == one.charAt(i)) {
                //CYCLED DURCH JEDEN BUCHSTABEN VON TWO
                for (int o = 0; o < two.length(); o++) {
                    //ÜBERPRÜFT OB DAS WORT WEITERHIN ÜBEREINSTIMMT
                    if (two.charAt(o) == one.charAt(i)) {
                        if (o == two.length() - 1) {
                            i = one.length()-1;
                            f = true;
                        }
                        i++;
                    } else {
                        o = two.length()-1;
                    }
                }
            }
        }
     
        if (f == true){
            System.out.println(two+" ist in "+one+" enthalten.");
        }else{
            System.out.println(two+" ist in "+one+" nicht enthalten.");
        }
    }
Also wenn ich das jetzt richtig verstanden habe beziehst du dich auf die Zeile for (o = 0; o < two.length(); i++), bei der du 1 zu 0 gewechselt hast stimmt das? Btw ich bekomme immernoch den gleichen Fehler.
 
Also ich habe die Schleifen Köpfe geändert und angepasst und das Inkrement von i++ zu o++ ersetzt 😉 Mit meiner Lösung sollte das Problem nicht auftreten 😉 Mit welchen Wörtern testet du denn?
 

Zurück
Oben