Klammerung testen

chrisööö

Mitglied
Hallo Leute,
ich habe zwei Klassen geschrieben. Die Text Klasse enthält eine Methode die die richtige Klammerung prüfen soll und eine Methode die eine Zeichenkette innerhalb einer anderen Zeichenkette auf die Anzahl des Vorkommens prüft. Die zweite Methode funktioniert, jedoch die erste nicht. Ich erhalte immer ein "true" Ergebnis. Ich hab da jetzt schon so oft drüber geschaut, jedoch fällt mir der Fehler einfach nicht auf. Vielleicht kann mir Jemand helfen.

Die zweite Klasse ist eine Testklasse für die Klasse Text.

Klasse Text:
Java:
/**
 *
 * @author Christian
 * Diese Klasse prüft eine eingegebene Zeichenfolge auf korrekte klammerung
 * und auf das vorkommen einer Zeichenfolge innerhalb dieser Zeichenfolge.
 */
public class Text {
    final char klammerAuf = '(';
    final char klammerZu = ')';
    private String zeichenkette;

    //Konstruktor der die Zeichenfolge representiert
    public Text (String zeichenkette) {
            this.zeichenkette = zeichenkette;
    }
    /**
     * Instanzmethode die auf richtige Klammerung innerhalb der eingegebenen
     * Zeichenfolge mittels einer Schleife prüft. Geprüft wird mittels eines
     * Counter der hoch bzw. heruntergezählt wird und genau 0 bei korrektheit
     * liefert.
     */
    public boolean istKorrektGeklammert() {

        int zeichenlaenge = zeichenkette.length() - 1;
        int zeichenposition = 0;
        int klammeranzahl = 0;
        boolean wert ;


        while (zeichenposition <= zeichenlaenge) {
                if (klammeranzahl < 0) {
                    wert = false;
                    zeichenposition = zeichenlaenge;
                }
                else{
                    if (zeichenkette.charAt(zeichenposition) == klammerAuf) {
                        klammeranzahl++;
                    }
                    else if(zeichenkette.charAt(zeichenposition) == klammerZu) {
                        klammeranzahl--;
                    }
                }
                zeichenposition++;
        }
        
        if(klammeranzahl == 0) {
                wert = true;
        }
        else{
                wert = false;
        }
         
        return wert;
    }
    /**
     * Liefert die Anzahl einer bestimmten Zeichenfolge die innerhalb einer
     * Zeichenfolge auftritt.
     */
    public int gibAnzahl(String zeichenfolge) {
        
        int zeichenposition = 0;
        int anzahlZeichen = 0;
        int zeichenlaenge = zeichenkette.length();

        while (zeichenposition < zeichenlaenge - (zeichenfolge.length() - 1)) {

             if (zeichenkette.substring(zeichenposition, zeichenposition +
                     zeichenfolge.length()).equals(zeichenfolge)){
                     anzahlZeichen++;
             }
             zeichenposition++;
             
        }
        return anzahlZeichen;
    }
    
}

Test Klasse:
Java:
/**
 *
 * @author Christian
 */
public class TextTest {

    public static void testeKlammerung() {
        Text t1;
        Text t2;
        Text t3;
        Text t4;
        Text t5;
        Text t6;
        Text t7;
        Text t8;
        Text t9;
        Text t10;

        t1 = new Text("(2*(a+3)+b)*(a-b)+c");
        System.out.println("Ist (2*(a+3)+b)*(a-b)+c korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t2 = new Text("c+(2*(a+3)+b)*(a-b)");
        System.out.println("Ist c+(2*(a+3)+b)*(a-b) korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t3 = new Text("(())()");
        System.out.println("Ist (())() korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t4 = new Text("a)b(a+3)/b(");
        System.out.println("Ist a)b(a+3)/b( korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t5 = new Text("(a)b)a+3(/b()");
        System.out.println("Ist (a)b)a+3(/b() korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t6 = new Text("(1+a)b)+2*(a+3)/b(a");
        System.out.println("Ist (1+a)b)+2*(a+3)/b(a korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t7 = new Text("f[g(x))");
        System.out.println("Ist f[g(x)) korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t8 = new Text("");
        System.out.println("Ist \"\"  korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t9 = new Text(" ");
        System.out.println("Ist \" \" korrekt geklammert? " +
                t1.istKorrektGeklammert());
        t10 = new Text("ANANAS");
        System.out.println("Ist ANANAS korrekt geklammert? " +
                t1.istKorrektGeklammert());
         
    }

    public static void testeZeichenfolge() {
        System.out.println("Wie oft ist An in Anna aß die Ananas, da war die "
                + "ganze Anna nass vorhanden?");
        System.out.println(new Text("Anna aß die Ananas, da war die ganze "
                + "Anna nass").gibAnzahl("An"));

        System.out.println("Wie oft ist an in Anna aß die Ananas, da war die "
                + "ganze Anna nass vorhanden?");
        System.out.println(new Text("Anna aß die Ananas, da war die ganze "
                + "Anna nass").gibAnzahl("an"));

        System.out.println("Wie oft ist na in Anna aß die Ananas, da war die "
                + "ganze Anna nass vorhanden?");
        System.out.println(new Text("Anna aß die Ananas, da war die ganze "
                + "Anna nass").gibAnzahl("na"));

        System.out.println("Wie oft ist e A in Anna aß die Ananas, da war die "
                + "ganze Anna nass vorhanden?");
        System.out.println(new Text("Anna aß die Ananas, da war die ganze "
                + "Anna nass").gibAnzahl("e A"));

        System.out.println("ANA in ANANAS vorhanden");
        System.out.println(new Text("ANANAS").gibAnzahl("ANA"));

        System.out.println("Wie oft ist aaa in aaaaa vorhanden?");
        System.out.println(new Text("aaaaa").gibAnzahl("aaa"));

    }



    public static void main(String[] args) {

       testeKlammerung();
       testeZeichenfolge();
       
 }
}
 
B

bone2

Gast
du musst mit [c]break;[/c] die while schleife verlassen sollte anzahlklammern jemals <0 werden. es wird bei )( sonst wieder true, da er das letzte zeichen noch einliest

bekomme mit deinem code für t5 ein false
 
Zuletzt bearbeitet von einem Moderator:
B

bone2

Gast
Java:
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());
t1.istKorrektGeklammert());

ist dein zweites problem

kein break;?
edit: ah kleinigkeit übersehn, brauchst kein break, passt schon
 
Zuletzt bearbeitet von einem Moderator:
B

bone2

Gast
so findet man den fehler ganz einfach:
Java:
                    if (zeichenkette.charAt(zeichenposition) == klammerAuf) {
                        klammeranzahl++;
                        System.out.print("+");
                    }
                    else if(zeichenkette.charAt(zeichenposition) == klammerZu) {
                        klammeranzahl--;
                        System.out.print("-");
                    }

System.out.print ist sehr hilfreich beim finden bekloppter fehler ;)
 

Marco13

Top Contributor
Oh ja nee hatte ich übersehen :oops: Ist doch OK - wie sollte man es sonst machen? So ist's ja sowieso ein bißchen langweilig. Wenn's <{[()]}> verschiedene Klammern wären könnte man einen Stack nehmen, aber bei EINER Klammerart würde der Stack ja nur "den int emulieren" :D
 

frostbyte

Aktives Mitglied
@michael: ich hatte auch schon nach Stack schreien wollen, aber so ist es ja wirklich einfach.

Etwas habe ich noch gefunden, was man abkürzen kann:

Java:
 if(klammeranzahl == 0) {
                wert = true;
        }
        else{
                wert = false;
        }
         
        return wert;

wird zu

Java:
return klammeranzahl == 0;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Klammerung testen Java Basics - Anfänger-Themen 12
O Klammerung bei Strings Java Basics - Anfänger-Themen 10
J implizite Klammerung Java Basics - Anfänger-Themen 70
C Do-While Schleife (Fehler bei der Klammerung?) Java Basics - Anfänger-Themen 8
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
U Sortierung in collections testen Java Basics - Anfänger-Themen 11
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
T Kann jemand kurz das Programm testen? Java Basics - Anfänger-Themen 13
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
scratchy1 doppelt verkettete Liste testen Java Basics - Anfänger-Themen 8
K Testen in BlueJ Java Basics - Anfänger-Themen 2
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
G Testen mit JUnit Java Basics - Anfänger-Themen 4
J Worte auf Gültigkeit bzgl. Alphabet testen Java Basics - Anfänger-Themen 1
T OOP Zwei Klassen Testen (Arrary Iterieren) Java Basics - Anfänger-Themen 6
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
K Testen von Methoden Java Basics - Anfänger-Themen 5
kilopack15 Java Array Skalarprodukt testen Java Basics - Anfänger-Themen 21
K Testen von Methoden Java Basics - Anfänger-Themen 1
R Teilinhalt eines Strings testen Java Basics - Anfänger-Themen 10
S File mit canRead() testen Java Basics - Anfänger-Themen 4
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
I Programm testen, aber wie? Java Basics - Anfänger-Themen 14
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
W Testen auf Existenz des Verzeichnisses Java Basics - Anfänger-Themen 4
M Wie private Methoden mit Asserstions testen? Java Basics - Anfänger-Themen 3
P OOP Testen ob 2 Strings gleich sind Java Basics - Anfänger-Themen 8
B Void Mehoden Testen Java Basics - Anfänger-Themen 13
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
E Arrays testen Java Basics - Anfänger-Themen 4
D Assertion Error beim Testen Java Basics - Anfänger-Themen 4
T Junit --Exception testen Java Basics - Anfänger-Themen 15
S Sortierverfahren - wie Stabilität testen (im array) Java Basics - Anfänger-Themen 3
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
B Testen eines Bridge-Spiels Java Basics - Anfänger-Themen 5
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
H Input/Output Testen ob Datei leer Java Basics - Anfänger-Themen 14
C Methode Testen Java Basics - Anfänger-Themen 12
J Programm in main Methode testen Java Basics - Anfänger-Themen 29
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
xehpuk In JUnit über eigenen Thread testen Java Basics - Anfänger-Themen 3
? Fehler bei Testen Java Basics - Anfänger-Themen 17
vandread Internationalisierung von einem Projekt testen? Java Basics - Anfänger-Themen 2
F Interface Testen Java Basics - Anfänger-Themen 5
T Methoden Testen und schaun ob richtiges Ergebnis? Java Basics - Anfänger-Themen 5
J Testen Java Basics - Anfänger-Themen 3
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
B OOP Testen - JUnit Java Basics - Anfänger-Themen 30
J Hash-Maps / ArrayLists testen Java Basics - Anfänger-Themen 12
A Programm mit Daten einer Datei testen Java Basics - Anfänger-Themen 4
G netzwerkapplikationen testen Java Basics - Anfänger-Themen 7
S Testen ob ein String ein Datum ist. Java Basics - Anfänger-Themen 5
T Testen ob eine Zahl im array doppel vorkommt. Java Basics - Anfänger-Themen 7
G *.java Datei mit Editor starten und testen Java Basics - Anfänger-Themen 6
reno Testen ob String leer ist Java Basics - Anfänger-Themen 12
G testen ob int gleich null Java Basics - Anfänger-Themen 15
G testen ob in String zahl Java Basics - Anfänger-Themen 10
K Program Testen mit Macintosh Java Basics - Anfänger-Themen 2
F Testen ob Double-Variable Java Basics - Anfänger-Themen 13
G SSL Verbindung testen? Java Basics - Anfänger-Themen 1
G Methoden mit Junit testen? Java Basics - Anfänger-Themen 2
M Kostenloser webspace zum testen von Javaprogrammen ? Java Basics - Anfänger-Themen 3
A mit Junit testen Java Basics - Anfänger-Themen 7
G Baum testen Java Basics - Anfänger-Themen 20
H Testen, ob Thread schläft Java Basics - Anfänger-Themen 3
S Testen ob ein Char Array noch nicht belegt ist! Java Basics - Anfänger-Themen 3
M Testen ob ein Sample noch abgespielt wird Java Basics - Anfänger-Themen 6
G wie eine selbstgeschriebene Klasse testen? Java Basics - Anfänger-Themen 15
P programm testen ohne main-funktion Java Basics - Anfänger-Themen 19

Ähnliche Java Themen

Neue Themen


Oben