首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实验室项目中的平衡推理

实验室项目中的平衡推理
EN

Stack Overflow用户
提问于 2022-09-16 15:22:10
回答 1查看 18关注 0票数 0
代码语言:javascript
复制
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()对于类型表达式的未定义”,我有什么想法吗?当我试图平衡实验室项目的括号时,我总是遇到这个问题。

EN

回答 1

Stack Overflow用户

发布于 2022-09-16 18:13:27

您对pushpop的调用不存在。因此,编译器会抱怨。

如果您打算在您自己的类Expressions上调用这些方法,则需要定义这些方法。就像定义precedenceisOperand一样。参见甲骨文中的Java教程

如果您打算在另一个类的实例(例如神秘的RStack类)上调用这些方法,那么在调用这些方法之前,需要对此类实例进行引用。见Java教程

顺便说一句,char类型基本上是从Java2开始中断的,从Java5开始就已经过时了。作为一个16位的值,char在物理上无法表示大多数字符。

若要处理单个字符,请使用码点整数。您将在类中找到各种codePoint方法,如StringStringBuilderCharacter

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73747046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档