我是一名计算机科学专业的学生刚刚开始我的二年级编程课程,而且我在处理Stacks和集合的项目中遇到了一些实际问题。
基本上,这是一个依赖于ArrayStack类(特定于ArrayStack)的项目,用于在后缀和中缀形式之间转换数学表达式。
基本上,ArrayStack用于接受类似45 *(26 - 5)/ 54的表达式,将其转换为集合,然后以后缀形式重写,如45 26 5 - * 54 /
问题是,首先,每当我尝试在main方法中用Character替换时(因为堆栈需要存储运算符和操作数,也许这里有一个更好的数据类型,我在这里丢失),我得到了一些奇怪的语法错误,通常涉及程序认为ArrayStack.System以某种方式是一个语句(System.out.println正好在ArrayStack语句下面,这表明存在某种语法问题)
这是我到目前为止的代码:
public class ArrayStack<T> implements StackADT<T>
{
private static final int DEFAULT_CAPACITY = 100;
private int top;
private T[] stack;
public ArrayStack() {
top = -1;
stack = (T[]) (new Object[DEFAULT_CAPACITY]);
}
public void push(T element) {
stack[top+1] = element;
top++;
}
public T pop() {
T element = stack[top];
stack[top] = null;
top--;
return element;
}
public T peek() {
return stack[top];
}
public boolean isEmpty() {
if(stack[0]==null)
return true;
else{
return false;
}
}
public int size() {
int length = 0;
for(int count=0;count<stack.length;count++) {
if(stack[count]!=null) {
length++;
}
else if(stack[count]==null) {
break;
}
}
return length;
}
public String toString() {
String array = "";
for(int count=0;count<stack.length;count++) {
array = array+stack[count]+" ";
}
return array;
}
}
对于主要方法:
public class StackTester {
public static void main(String[] args) {
boolean quit = false;
int input;
String expression;
do {
System.out.println("1. Convert infix to postfix");
System.out.println("2. Convert postfix to infix");
System.out.println("3. Exit.");
java.util.Scanner keyboard = new java.util.Scanner(System.in);
input = keyboard.nextInt();
switch(input) {
case 1:
//ArrayStack stack = new ArrayStack();
//System.out.println("Enter an infix expression: ");
expression = keyboard.next();
for(int count=0;count<expression.length();count++) {
Character a = expression.charAt(count);
stack.push(a);
}
for(int count=stack.size()-1;count>=0;count--) {
if(stack.peek()=='+') {
}
}
}
break;
}
while(!quit);
}
}
错误通常发生在用//标记的行上,每当我尝试插入类似的东西时,程序会给出一些奇怪的语法错误,就像它试图将它与下面的行一起读取一样。任何想法在这里发生了什么?