Hi Leute, es ist spät, ich bin wieder mal kurz vorm ausflippen, bzw. hab ich schon wieder einige Sachschäden an meinen Inventar zu verzeichnen. Wenn mir jemand sagen könnte, warum meine besch....ne Schleife beim ersten pushen auf den Stack einfach nicht pusht, dann würde er mein Herz schonen!
Wir sollen einen Klammerausdruck auf "wohlgeformtheit" überprüfen.Ich pushe also solange geöffnete Klammern auf den Stack, bis eine schließende kommt. Dann nehme ich die oberste geöffnete vom stack. So verfahre ich den gesamten Klammerausdruck entlang. Wenn der Stack am Ende leer ist, habe ich eine wgf Klammerausdruck, ansonsten eben nicht. Habe soweit auch eine Kontrollausgabe eingebaut.
Bitte nicht gleich wieder draufkloppen, meine Laune ist eh im Keller!
Danke im Voraus
ansonsten
juts nächtle!
Hier die ausführbare Klasse, die die angesprochene if-Schleife zur Abarbeitung des Klammerausdrucks enthält:
Hier die Klasse mit den Methoden, die das Interface implementiert:
Wir sollen einen Klammerausdruck auf "wohlgeformtheit" überprüfen.Ich pushe also solange geöffnete Klammern auf den Stack, bis eine schließende kommt. Dann nehme ich die oberste geöffnete vom stack. So verfahre ich den gesamten Klammerausdruck entlang. Wenn der Stack am Ende leer ist, habe ich eine wgf Klammerausdruck, ansonsten eben nicht. Habe soweit auch eine Kontrollausgabe eingebaut.
Bitte nicht gleich wieder draufkloppen, meine Laune ist eh im Keller!
Danke im Voraus
ansonsten
juts nächtle!
Hier die ausführbare Klasse, die die angesprochene if-Schleife zur Abarbeitung des Klammerausdrucks enthält:
Java:
import java.util.*;
public class Applikation{
public static boolean wgk(String klammerAusdruck, IStack stack ) throws IllegalArgumentException{
Scanner in = new Scanner(System.in);
for(int i=0;i<klammerAusdruck.length(); i++){ //for-Schleife durchläuft übergebenen Klammerausdruck
//if(klammerAusdruck.charAt(i)!= '('){ //Falls keine öffnende Klammer
// if(klammerAusdruck.charAt(i)!= ')'); //und keine schließende Klammer
// throw new IllegalArgumentException("Kein Klammerausdruck"); //wird Exception geworfen
//}//if
if(klammerAusdruck.charAt(i)== '(') //Wenn eine öffnende Klammer, auf den Stack pushen
stack.push(klammerAusdruck.charAt(i));
if(klammerAusdruck.charAt(i)== ')') //Wenn eine schließende Klammer, vom stack popen
stack.pop();
String ausgabe = stack.toString();
System.out.println(ausgabe);
}//for
if(stack.toString()=="leer")return true;
else return false;
}//wgk
public static void printBinary(int zahl, IStack stack ) throws IllegalArgumentException{
}// printBinary
/*
* In der main-Methode muss die Exceptionbehandlung durchgeführt werden
*/
public static void main(String[] argv){
IStack stack = new CharListe();
String s1 = "((())())";
String s2 = "(()())())";
printBinary(11, stack);
printBinary(185, stack);
try{
if(wgk(s1,stack)) System.out.println("Wohlgeformter Klammerausdruck!");
else System.out.println("Kein wohlgeformter Klammerausdruck!");
if(wgk(s2, stack))System.out.println("Wohlgeformter Klammerausdruck!");
else System.out.println("Kein wohlgeformter Klammerausdruck!");
}
catch(IllegalArgumentException e){
System.out.println(e.getMessage());
}
}//main
} //Applikation
Hier die Klasse mit den Methoden, die das Interface implementiert:
Java:
import java.util.*;
public class CharListe implements IStack {
/**
* Klasse beschreibt den Datentyp eines Stack-Elementes mit dem
* Informationsteil data und dem Organisationsteil next (Verweis zum nächsten Stackelement)
*/
class Element {
char data;
Element next;
}
private int size; // aktuelle Anzahl der StackObjekte
private Element topp; // oberstes Stack-Element des Stacks
public CharListe() { // Konstruktor initialisiert Attribute topp und size
System.out.println("ADT IStack, Listenimplementierung");
//Anweisungen
}
/**Methode entfernt alle Elemente aus dem Stack
*@param -
*@return - void
*/
public void clear() {
if(topp==null) return;
topp = null;
return;
//Anweisungen
}
/**Methode prüft, ob Stack Elemente enthält
*@param -
*@return - Wahrheitswert true, falls Stack leer, sonst false
*/
public boolean isEmpty() {
if(topp==null) return true;
return false;
}
/**Methode legt ein neues Element auf den Stack
*@param e - Informationsteil des neuen Elementes
*@return -void
*/
public void push(char e){
Element h = new Element();
h.data = e;
h.next = topp;
topp = h;
size += 1;
} // push
/**Methode gibt das zuletzt auf den Stack gelegte Objekt zurück, ohne es zu entfernen
*@param -
*@return Objekt vom Typ Element
*/
public char top() {
if(isEmpty()) return ' ';
return topp.data;
}//top
/**Methode entfernt das " oberste" Objekt von dem Stack
*@param -
*@return void
*/
public void pop() {
if(isEmpty()) return;
topp = topp.next;
size -= 1;
//Anweisungen
}//pop
/**
* Methode liest Infokomponente der Stackelemente aus
* und schreibt sie in eine Zeichenkette
*@param -
*@return Zeichenkette vom Typ String
*/
public String toString() {
String ausgabe = "";
Element h;
h = topp;
if(isEmpty()) return "leer";
while(h.next!=null){
ausgabe+= h.data;
h = h.next;
}
return ausgabe;
} // toString
}//CharList
Zuletzt bearbeitet: