Ich habe an einer Schulaufgabe gearbeitet, die uns eine Zeichenfolge von Infix-Notation in Postfix-Notation konvertieren muss. Wir müssen dies tun, indem wir einen Stapel verwenden, der ein Array implementiert.Programm Konvertieren von Infix zu Postfix-Notation
Hier ist mein Code für die tatsächliche Umwandlung Klasse: Paketpraxis;
public class Praxis {
public static String infixToPostfix(String infix)
{
Practice2 operatorStack = new Practice2();
String output = "";
char curChar;
String input = infix;
boolean isOperator=false;
boolean empty=true;
int curCharPrecedence=0;
int topOfStackPrecedence=0;
for(int i =0; i<input.length();i++){
curChar = input.charAt(i);
switch(curChar){
case '+': isOperator=true;
case '-': isOperator=true;
case '/': isOperator=true;
case '*': isOperator=true;
case '(': isOperator=true;
case ')': isOperator=true;
break;
default: isOperator=false;
}
if(!isOperator){
output=output+curChar;
}
else if(isOperator){
output+=" ";
if(empty){
empty=false;
operatorStack.Push(curChar);
}
else if(!operatorStack.empty()){
switch(curChar){
case ')': topOfStackPrecedence=0;
case '+': curCharPrecedence=1;
case '-': curCharPrecedence=1;
case '/': curCharPrecedence=2;
case '*': curCharPrecedence=2;
case '(': topOfStackPrecedence=3;
}
switch((Character) operatorStack.peek()){
case ')': topOfStackPrecedence=0;
case '+': topOfStackPrecedence=1;
case '-': topOfStackPrecedence=1;
case '/': topOfStackPrecedence=2;
case '*': topOfStackPrecedence=2;
case '(': topOfStackPrecedence=3;
}
if(curCharPrecedence>topOfStackPrecedence){
operatorStack.Push(curChar);
}
else{
while(!operatorStack.empty()&&topOfStackPrecedence>curCharPrecedence){
output+= operatorStack.pop();
output+=" ";
if(!operatorStack.empty())
switch((Character) operatorStack.peek()){
case ')': topOfStackPrecedence=0;
case '+': topOfStackPrecedence=1;
case '-': topOfStackPrecedence=1;
case '/': topOfStackPrecedence=2;
case '*': topOfStackPrecedence=2;
case '(': topOfStackPrecedence=3;
}
}
operatorStack.Push(curChar);
}
}
}
}
while(!operatorStack.empty()){
output+=" ";
output+= operatorStack.pop();
}
return output;
}
public static void main(String[] args)
{
System.out.println(infixToPostfix("a+b*c"));
}
}
hier Dann ist mein Code für die Stapelklasse:
package practice;
import java.util.EmptyStackException;
public class Practice2<T> extends Object{
public T[] stack = (T[]) new Object[10];
int topOfStack =-1;
public Practice2()
{
stack = (T[]) new Object[10];
}
public Practice2(int capacity)
{
stack = (T[]) new Object[capacity];
}
public T Push(Object item)
{
if(topOfStack<=stack.length-1){
T[] temporary = (T[]) new Object[stack.length];
for(int i=0; i<stack.length-1;i++){
temporary[i]=stack[i];
}
stack = (T[]) new Object[temporary.length+10];
for(int i=0; i<temporary.length-1;i++){
stack[i]=temporary[i];
}
}
topOfStack++;
stack[topOfStack]= (T) item;
return (T) item;
}
public T peek()
{
return stack[topOfStack];
}
public T pop()
{
if(topOfStack==-1){
throw new EmptyStackException();
}
else
return stack[topOfStack--];
}
public boolean empty()
{
if(topOfStack==-1)
return true;
else
return false;
}
public int size(){
return topOfStack+1;
}
}
Jedes Mal, wenn ich versuche, das ich die folgende Fehlermeldung auszuführen:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at practice.Practice2.peek(Practice2.java:49)
at practice.Practice.infixToPostfix(Practice.java:53)
at practice.Practice.main(Practice.java:106
Es scheint, dass das Problem meine Peek-Methode in der Stack-Klasse ist, aber ich bin mir nicht ganz sicher.
Jede Hilfe wird sehr geschätzt, ich habe viel zu viel Zeit in diesem Programm verbracht und brauche dringend jemand anderen, um es sich anzusehen.
Sie nicht brauchen, um dieses ... ** Klasse Praxis2 erstreckt Objekt ** zu tun, jedes Objekt erstreckt das Objekt cl Arsch standardmäßig ... –
@Xoce 웃 Пepeúpa hey danke für den Kommentar, nur das behoben. – skulltula