Klammerung testen

Status
Nicht offen für weitere Antworten.

bigchris

Mitglied
Hallo an alle :)

Ich schreibe gerade an einer Klasse, welche mir einen String auf richtge Klammerung untersucht.

Beipiel: Ich habe die Zeichenkette (2*(a+3)+b)*(a-b) hier soll natürlich true zürückgegeben werden, da die Klammern alle richtig sind.

Bei dieser Zeichenkette )2*(a+3)/b( soll false zurückgegeben werden, da die Klammern falsch sind.

Wer kann mir da helfen. Ach ja ich will nicht den Befehl aus der Stringklasse replace benutzen.

Hier mein Code



Code:
public class Ausdruck {
    public String text;
    
public Ausdruck(String t) {
    
    text = t;
    
}

public boolean istKlammer() {
    
    boolean istRichtigKlammer = true;
    
    String t = text.toUpperCase();
    
    int laenge = t.length();
    
    int position = 0;
    while ((position < laenge / 2) && istRichtigKlammer) {
        
        if (t.charAt(position) != t.charAt(laenge - 1 - position)) {
            
            istRichtigKlammer = false;
      }
      
      position = position + 1;
    }
    
    return istRichtigKlammer;
  }


public String testeKlammer() {
    
    if (!text.equals("")) {
      
for (int laenge = text.length(); laenge > 0; laenge = laenge - 1) {
        
        
        for (int index = 0; index <= text.length() - laenge;
                index = index + 1) {
                  
          
          String klammer = text.substring(index, index + laenge);
          
          if (new Ausdruck(klammer).istKlammer()) {
            return klammer;
          }
          
        }
      }
    }
    
    
    return "";
  }

}

Das ist meine Klasse die ich bisher geschrieben habe. Aber irgendwie macht Sie nicht das was Sie soll????

Sie funktioniert nicht so wie ich es will. Wer kann helfen????

bigchris
 

mariopetr

Bekanntes Mitglied
hmm,

also vieleicht hilft es ja, sich zu ueberlegen was genau die richtigen kriterien fuer die korrektheit sind

-anzahl("(")==anzahl(")")
-an jeder belibigen stelle im string gilt anzahl("(")>=anzahl(")")
-zwischen klammerpaaren muessen zeichen stehen "()" ist also ungueltig

Code:
public class T03
{
	static String[] test=new String[]{
							 "(a*b)+((a-b)+(b-a))",// 		 //$NON-NLS-1$
							 "(a*b)+((a-b)+(b-a)",// 		 //$NON-NLS-1$
							 "a*b)+((a-b)+(b-a))",// 		 //$NON-NLS-1$
							 "(a*b)+((a-b)+(()b-a))"// 		 //$NON-NLS-1$		
	};
	
	public boolean isValid(String input)
	{
		boolean result=true;
		int open=0;
		int close=0;
		
		char[] array=input.toCharArray();
		for (int i= 0; i < array.length; i++)
		{
			if(array[i]==')')
				close++;
			if(array[i]=='(')
				open++;
			if(close>open)
			{
				result=false;
				break;
			}	
		}
		if(result=(open==close));
		{
			Pattern pattern=Pattern.compile("\\(\\)"); // hier kann man noch andere exclusionpatterns eintragen //$NON-NLS-1$
			Matcher matcher=pattern.matcher(input);
			if(matcher.find())
				result=false;
		}
		return result;
	}
	
	public static void main(String[] args)
	{
		T03 t=new T03();
		for (int i= 0; i < test.length; i++)
		{
			System.out.println(test[i]+" is valid="+t.isValid(test[i]));//  //$NON-NLS-1$
		}
	}
}
 
U

utnovetur

Gast
Es genügt, die Anzahl der geöffneten Klammern zu zählen.
Bei jeder öffnenden Klammer zählst du eins hoch,
bei jeder schließenden Klammer eins runter und überprüfst noch,
ob die Anzahl dadurch negativ geworden ist (zu viele schließende).
Am Ende muss die Anzahl wieder null sein (sonst zu viele öffnende).
 

bigchris

Mitglied
Wie kann ich das denn in meinem Code realisieren?

Nichts gegen deinen Code @mariopetr, aber du benutzt einige Befehle, die ich noch nicht hatte und nicht benutzen darf. Wenn ich deinen Code richtig verstehe, dann testest du nur die anzahl der Klammern. Was ist aber mit einem Beispiel )a+b( = false. Bei dir würde aber true rauskommen.




Mann muß doch auch mit meinem Code die Klammer Tests durchführen können oder? Ich weiß einfach nicht wo ich noch modifizieren muß, also abändern??????

Alles was ich benutzen darf steht in meinem Code. Ich glaube Verschachtelung darf ich auch noch nicht benutzen.


bigchris
 
M

martin

Gast
es ist eigentlich doch so leicht zu realisieren, wie
utnovetur es vorgeschlagen hat, da du nur einen
"typ" klammern (in diesem Fall die "runden) in deinem
ausdruck verwenden möchtest.
offene klammer: einen hochzählen
geschlossene klammer: einen runterzählen
wenn 0 rauskommt ist alles korrekt, doch dabei
muss man noch beachten, dass der wert nie
negativ werden darf, um dein beispiel ")a+b(" auch
zu berücksichtigen. wenn dies der fall wäre, muss
sofort abgebrochen werden und false zurückgegeben
werden.
 

bigchris

Mitglied
So die Klammer Test Klasse hab ich jetzt realisiert.

Wie kann ich jetzt noch aus einem Ausdruck die buchstaben zählen.

Ich möchte z.b. aus (a+b)*(a+b) die Anzahl der a haben. Hier wäre das dann 2.

Kann mir da jemand helfen?


Code:
public class Ausdruck {
    
    public String ausdruck;
    
    public Ausdruck(String a){
        
        ausdruck = a;
    }
    
    
    public boolean istEingeklammert() {
        
        boolean istKorrektEingeklammert = true;
        
        int laenge = ausdruck.length();
        int position;
        int counter = 0;
        
        for (position = 0; position <= (laenge - 1); position++) {
            
            if (ausdruck.charAt(position) == '(') {
                
                counter ++;
            }
            
            if (ausdruck.charAt(position) == ')'){
                
                counter--;
            }
            if (counter < 0){              
                                
                return false;
            }
        }
        if (counter != 0) {
            
            return false;
        }
        
        return true;
    }


// ab hier komme ich nicht mehr weiter

public int anzahlZeichen(char zeichen){

    int counter = 0;
      
    for (int position = 0; position <= (laenge - 1); position++) {
            
            if (ausdruck.charAt(position) == zeichen) {
                
                counter ++;
            }
    }
    
    
}
}
 
U

utnovetur

Gast
Das sieht doch gut aus - es fehlt nur noch
Code:
return counter;
 

bigchris

Mitglied
Was meinst du??

Also das mit dem Abzählen klappt noch nicht. Ich weiß nicht wie ich eine Schleife hinbekomme um aus dem Beispiel: (a+b)*(a+b) die a's zu zählen. Müsste ja 2 rauskommen.

Diese Methode muß noch zusätzlich implementiert werden. Komme aber irgendwie nicht weiter. Das was ich da hingeschrieben habe ist nur ein gedankengang der aber falsch ist.

bigchris
 

mariopetr

Bekanntes Mitglied
wieso falsch. der compiler muesste dier irgend etwas in der art "returnwert fehlt" sagen, was daran liegt das in deiner methode der count nicht mit return zurueckgegeben wird
 

bigchris

Mitglied
Also ich spreche jetzt von dieser Methode

Code:
public int anzahlZeichen(char zeichen){

    int counter = 0;
    int laenge = ausdruck.length();
    
    for (int position = 0; position <= (laenge - 1); position++) {
            
            if (ausdruck.charAt(position) == zeichen) {
                
                counter ++;
            }
       
} 
return counter;
}
}

Diese soll mir ausgeben wie oft das (siehe oben) a in einer Zeichenkette vorkommt. Aber ich glaube das das diese Methode die ich hier angefangen habe nicht tut. Oder liege ich da falsch????

Ich glaube ich bin jetzt total verwirrt.
 

BlueSky33

Neues Mitglied
Kurze Frage zu dem Thema wenn ich jetzt mit der Methode

Code:
public int anzahlZeichen(char zeichen){ 

    int counter = 0; 
    int laenge = ausdruck.length(); 
    
    for (int position = 0; position <= (laenge - 1); position++) { 
            
            if (ausdruck.charAt(position) == zeichen) { 
                
                counter ++; 
            }


die Anzahl von einem Zeichen ermittel, also z.B. ich will wissen wie oft das 'a' in Radar vorkommt, sagt er 2 ist ja auch korrekt. Nur wenn ich jetzt wissen will wie oft 'ra' darin vorkommt bringt er mir einen fehler, also ich kann die Methode nur mit einem zeichen ausführen. Was muss ich ändern damit ich auch kleine Zeichenketten wie 'ra' prüfen kann.

Grüße
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Klammerung testen Java Basics - Anfänger-Themen 10
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