Hallo Ich hab einen ADT STACK gebaut und ihn anschließend für eine Infix-Postfix umwandlung genutzt!
jezz bekomm ich leider einen Fehler wenn ich die Umwandlung starte... und ich glaub der Fehler sitzt aber in der Stack.java
hier mal die beiden Codes:
Stack.java
und hier meine infix2postfix.java
Der Fehler latuet dann beim Starten der Infix2Postfix.java (also net beim compilieren) :
danke schonma
jezz bekomm ich leider einen Fehler wenn ich die Umwandlung starte... und ich glaub der Fehler sitzt aber in der Stack.java
hier mal die beiden Codes:
Stack.java
Code:
public class Stack {
char [] stack;
char [] stackTmp;
int n, k, l;
int counter = 0;
char letztesElement;
int freieFelder;
//Konstruktor 1
public void stack (int initialSize, int increment, int decrement) {
n = initialSize;
k = increment;
l = decrement;
}
//Konstruktor 2
public void stack (int initialSize) {
n = initialSize;
k = 5;
l = 5;
}
//Konstruktor 3
public void stack() {
n = 4;
k = 5;
l = 5;
}
//Loescht den Stack
public void clear() {
char [] stack = new char[0];
}
// Fuegt ein neues Element als oberstes Element in den Stack ein
public void push(char a) {
if (counter < n) {
stack[counter] = a;
counter = counter + 1;
}
else {
stackTmp = new char[n];
for (int i = 0; i < n; i++) {
stackTmp[i] = stack[i];
}
stack = new char[n+k];
for (int i = 0; i < n; i++) {
stack[i] = stackTmp[i];
}
stack[counter+1] = a;
stack(n+k);
}
}
// Gibt das oberste Element aus und loescht es anschließend aus dem Stack
public char pop() {
for (int i = n; i >= 0; i--) {
if (stack [i] != ' ') {
letztesElement = stack[i];
freieFelder = n - i;
stack[i] = ' ';
}
}
if (freieFelder >= l) {
stackTmp = new char[n];
for(int i = 0; i < n; i++) {
stackTmp[i] = stack[i];
}
stack = new char[n-l];
stack(n-l);
for (int i = 0; i < n; i++) {
stack[i] = stackTmp[i];
}
}
return letztesElement;
}
//Ueberpueft ob Elemente im Stack sind
public boolean isEmpty() {
return stack[0] != ' ';
}
public void main(String [] args) {
stack();
stack = new char [n];
}
}
und hier meine infix2postfix.java
Code:
/** Das Programm wandelt vollstaendig geklammerte Infix-Ausdruecke
* in Postfix-Ausdruecke um. Operanden der Infixausdruecke sind positive
* Zahlen mit einer Ziffer.
*
*
* version: 4.12.2006
*/
public class Infix2Postfix {
public static void main ( String[] args ) {
int arrayLaenge;
String infix = "(5 * (((9 + 8) * (4 * 6)) + 7))";
String leerzeichen = " ";
String plus ="+";
String mal = "*";
String klammer = ")";
char arrayInhaltTMP;
char [] ausdruck = infix.toCharArray();
char [] leerzeichenVergleich = leerzeichen.toCharArray();
char [] plusVergleich = plus.toCharArray();
char [] malVergleich = mal.toCharArray();
char [] klammerVergleich = klammer.toCharArray();
arrayLaenge = ausdruck.length;
//Arrayfelder mit Leerzeichen löschen
for ( int i=0; i<(arrayLaenge - 1); i++) {
if (ausdruck[i] == leerzeichenVergleich[0]) {
for (int j = i; j<(arrayLaenge - 1); j++) {
ausdruck[j] = ausdruck [j+1];
}
i = i - 1;
arrayLaenge = arrayLaenge - 1;
}
}
Stack.stack(arrayLaenge);
//Ausgabe und Zwischenspeichern
for ( int i=0; i<(arrayLaenge - 1); i++) {
//Ziffer wird sofort ausgegeben
if (Character.isDigit(ausdruck[i])) {
System.out.println(ausdruck[i]);
} else if ( (ausdruck[i] == plusVergleich[0]) || (ausdruck[i] == malVergleich[0]) ) {
//Operator wird zwischengespeichert
arrayInhaltTMP = ausdruck[i];
Stack.push(arrayInhaltTMP);
//Bei ')' werden der zuletzt gespeicherte Operator ausgegeben
} else if ( ausdruck[i] == klammerVergleich[0]) {
System.out.println(Stack.pop());
}
}
}
}
Der Fehler latuet dann beim Starten der Infix2Postfix.java (also net beim compilieren) :
Exception in thread main java.lang.NullPointerException
at Stack.push(Stack.java:39)
at Infix2Postfix.main(Infix2Postfix.java:52)
danke schonma