В этом проекте есть два класса.Метод Main - это Test2, а дочерний класс - это Stack.Часть ошибки здесь является этой частью:
Stack s = new Stack (20);
И всякий раз, когда я запускаю его, он выдает следующее:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(Unknown Source)
at com.stack.Test2.prefixToPostfix(Test2.java:31)
at com.stack.Test2.main(Test2.java:18)
Как мне поставить "n items", если генерики Stack продолжают отвечать на сообщения об ошибках?
MainМетод ниже:
package com.stack;
import java.util.Stack;
//PREFIX TO POSTFIX
public class Test2 {
public static void main(String[] args) {
String prefix1 = "A + B * C";
System.out.println(prefixToPostfix(prefix1));
}
static String prefixToPostfix(String prefix) {
Stack<String> s = new Stack(100);
String[] tokens = prefix.split(" ");
for (int i = tokens.length-1; i>=0; i--) {
String token = tokens[i];
if (Character.isLetterOrDigit(token.charAt(i))) {
String op1 = s.peek(); s.pop();
String op2 = s.peek(); s.pop();
String exp = op1 + op2 + token;
s.push(exp);
}
else {
s.push(token + " ");
}
}
return s.peek();
}
}
ЭТО ОДИН ИЗ СТЕКОВЫХ ОПЕРАЦИЙ ДЛЯ ISEMPTY, ISFULL, PEEK, PUSH, ETC.
package com.stack;
public class Stack<T> {
int size;
T A[];
int top = -1;
public Stack(int size) {
this.size = size;
A = (T[]) new Object[size];
top = -1;
}
public void push(T item) {
top++;
A[top] = item;
}
public void pop() {
top--;
}
public boolean isEmpty() {
if(top == - 1) {
return true;
}
return false;
}
public T peek() {
return A[top];
}
}