当前位置: 首页 > 知识库问答 >
问题:

在我的调车场实施中添加括号处理有困难

曾修真
2023-03-14
public void makePost(String e)
{
    String[] arr = e.split("");
    for(int i = 0; i < arr.length; i++)
    {
        if(arr[i].equals(" "))
        {
            continue;
        }
        Operator o = OperatorList.getOpMap().get(arr[i]);
        if(o == null){
            postfix += " " + arr[i];
            continue;
        }
        if(ops.isEmpty()){
            ops.push(o);
            continue;
        }
        else
        {

            while((!ops.isEmpty()  && (ops.peek().getPresedence() <= o.getPresedence()))){
                postfix += " " + ops.pop();
            }
            ops.push(o);
            continue;
        }

    }
    while(!ops.isEmpty())
    {
        postfix += " " + ops.pop();
    }
    postfix = postfix.trim();

}
    public void makePost(String e)
{
    String[] arr = e.split("");
    for(int i = 0; i < arr.length; i++){
        if(arr[i].equals(" ")){
            continue;
        }
        Operator o = OperatorList.getOpMap().get(arr[i]);
        if(o == null){
            postfix += " " + arr[i];
            continue;
        }
        if(ops.isEmpty()){
            ops.push(o);
            continue;
        }
        else
        {
            if(o.isParan())
            {
                Paran p = new Paran(o.toString());
                if(p.isOpen())
                {
                ops.push(o);
                System.out.println(ops);
                continue;
                }else{      
                    while(!ops.isEmpty()){ 
                        if(ops.peek().isParan()){
                            Paran n = new Paran(o.toString());
                            if(n.isOpen()){
                                ops.pop();
                                break;
                            }
                        }
                        postfix += " " + ops.pop();
                    }
                    continue;
                }
            }
            while((!ops.isEmpty()  && (ops.peek().getPresedence() <= o.getPresedence()))){
                postfix += " " + ops.pop();
            }
            ops.push(o);
            continue;
        }

    }
    while(!ops.isEmpty())
    {
        postfix += " " + ops.pop();
    }
    postfix = postfix.trim();

}
if(o.isParan())
            {
                Paran p = new Paran(o.toString());
                if(p.isOpen())
                {
                ops.push(o);
                System.out.println(ops);
                continue;
                }else{      
                    while(!ops.isEmpty()){ 
                        if(ops.peek().isParan()){
                            Paran n = new Paran(o.toString());
                            if(n.isOpen()){
                                ops.pop();
                                break;
                            }
                        }
                        postfix += " " + ops.pop();
                    }
                    continue;
                }

共有1个答案

巫培
2023-03-14

让它起作用了!我为逻辑区域的括号添加了一些检查,下面是最后的:

    public void makePost(String e)
{
    String[] arr = e.split("");
    for(int i = 0; i < arr.length; i++)
    {

        System.out.println(postfix + " " + i + " " + ops);
        if(arr[i].equals(" "))
        {
            continue;
        }
        if(arr[i].equals("(")){
            ops.push(new Paran("("));
            continue;
        }
        if(!ops.isEmpty() && arr[i].equals(")")){
            while(!ops.isEmpty() && !ops.peek().isOpen()){

                postfix += " " + ops.pop();
            }
            ops.pop();
        }
        Operator o = OperatorList.getOpMap().get(arr[i]);
        if(o == null){
            postfix += " " + arr[i];
            continue;
        }
        if(ops.isEmpty()){

            ops.push(o);

            continue;
        }
        else
        {

            while((!ops.isEmpty()  && (ops.peek().getPresedence() <= o.getPresedence()) && !(ops.peek() instanceof Paran))){

                postfix += " " + ops.pop();
            }
            ops.push(o);
            continue;

        }

    }

    while(!ops.isEmpty())
    {

        postfix += " " + ops.pop();
    }

   postfix = postfix.replaceAll("\\s[)]","");


}

我有replaceall()调用,因为输出保留了返回结束括号和corrent后缀,例如:

2 4 * 7 8 4 * 4 4 5 * ) / ) * ) +

我不知道它为什么那样做,但我很高兴它能起作用

 类似资料:
  • 我有一个带有GET服务的spring启动应用程序。 的值是一个编码值。 如果我把下面作为值传递给参数子 它无法捕获请求,并且控件不在函数内部。 如果我们作为值传递给参数子: 它很好用。 > 由于服务器无法处理该请求,所以返回400。我需要捕获这些请求,然后通过正确编码来处理它们。前进的道路是什么? 我是新来的Spring启动/Spring和Java本身。如果我能得到一些见解,那就太好了。 另外,我

  • 我使用作为sql选择。现在有了要转换为QueryDSL的本机查询。它由括号中的两个OR语句组成,后跟一个应用于两个OR部分的and和查询。 我需要以下内容: 在querydsl中,我可以编写以下示例:

  • 我将参与一个新项目,其中我们有5000个测试用例/场景。每个场景都有登录、金额转账等后续功能,因此每个场景都有特定的数据。因此,在5000种情况下,我觉得处理数据将非常困难。因为即使登录用户的密码被更改,我也需要在所有场景中从不同的功能文件中更新5000次密码。这与我们旨在减少手动工作量的自动化思想背道而驰。所以我在这里问,是否有人有任何想法/解决方法来处理这种情况,我希望应该有。谢谢

  • 我正在使用AWS Sagemaker部署在Sagemaker之外培训的语音模型。我能够将我的模型转换为Sagemaker能够理解的东西,并将其部署为endpoint。问题是Sagemaker直接加载模型并调用。预测得到推论。我无法确定在部署的模型中可以在何处添加预处理函数。建议使用AWS Lambda或其他服务器进行预处理。有没有什么方法可以将复杂的预处理(不能通过简单的Scikit、类似熊猫的框

  • 在本页和p5的文档中。Perlin noise的输出范围被描述为[0,1],但我发现的所有其他实现都有一个关于0的小范围对称,这似乎也是理论上应该保持的。Processing对柏林噪声的实施情况如何?他们有什么不同之处?比如说,我如何在python中复制这一点?