import stack.RStack;
public class Expressions {
private RStack data;
public Expressions() {
}
public boolean checkbalance(String expression) {
char charAt;
int i, len;
len = expression.length();
for(i = 0; i < len; i++) {
charAt = expression.charAt(i);
if(charAt == '(')
push(charAt);
else if(ch == ')') {
if(isEmpty())
return false;
else if((char)peek() == '(')
pop();
else
return false;
}
}
if(isEmpty())
return true;
else
return false;
}
public int precedence(char c) {
if((c == '*') || (c == '/'))
return 2;
else if((c == '+') || (c == '-'))
return 1;
else
return 0;
}
public boolean isOperand(char c) {
if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
return true;
else
return false;
}
public String infixToPostfix(String infix) {
char c;
int len, i;
String postfix = "";
len = infix.length();
for(i = 0; i < len; i++) {
c = infix.charAt(i);
if(isOperand(c))
postfix = postfix + c;
else if(c == '(')
push(c);
else if(c == ')') {
while((char)peek() != '(')
postfix = postfix + pop();
pop();
} else {
while(!isEmpty() && (precedence(c) <= precedence((char)peek())))
postfix = postfix + pop();
push(c);
}
}
while(!isEmpty())
postfix = postfix + pop();
return postfix;
}
public RStack getData() {
return data;
}
public void setData(RStack data) {
this.data = data;
}
}对于为什么我总是得到“类型表达式未定义的方法push(char)”、“类型表达式的方法peek()未定义”、“方法isEmpty()对于类型表达式的未定义”和“方法pop()对于类型表达式的未定义”,我有什么想法吗?当我试图平衡实验室项目的括号时,我总是遇到这个问题。
发布于 2022-09-16 18:13:27
您对push和pop的调用不存在。因此,编译器会抱怨。
如果您打算在您自己的类Expressions上调用这些方法,则需要定义这些方法。就像定义precedence和isOperand一样。参见甲骨文中的Java教程。
如果您打算在另一个类的实例(例如神秘的RStack类)上调用这些方法,那么在调用这些方法之前,需要对此类实例进行引用。见Java教程。
顺便说一句,char类型基本上是从Java2开始中断的,从Java5开始就已经过时了。作为一个16位的值,char在物理上无法表示大多数字符。
若要处理单个字符,请使用码点整数。您将在类中找到各种codePoint方法,如String、StringBuilder和Character。
https://stackoverflow.com/questions/73747046
复制相似问题