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:
Test Klasse:
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();
}
}