Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调车场中括号的保留_Java_String_Algorithm_Shunting Yard - Fatal编程技术网

Java 调车场中括号的保留

Java 调车场中括号的保留,java,string,algorithm,shunting-yard,Java,String,Algorithm,Shunting Yard,我正在研究本质上是调车场算法,但将中缀改为前缀,而不是RPN 我在努力保留括号,我现在过得很糟糕。目前我的代码是 String s = inFixList.get(i); Stack<Character> opStack = new Stack<Character>(); Stack<Character> solutionStack = new Stack<Character>();

我正在研究本质上是调车场算法,但将中缀改为前缀,而不是RPN 我在努力保留括号,我现在过得很糟糕。目前我的代码是

        String s = inFixList.get(i);
        Stack<Character> opStack = new Stack<Character>();
        Stack<Character> solutionStack = new Stack<Character>();
        String solution = "";

        for(char c : s.toCharArray())
        {
            if(Character.isLetter(c)||Character.isDigit(c))
            {
                solutionStack.push(c);
            }
            else if(c == '(')
            {
                opStack.push(c);
                solutionStack.push(')');
            }
            else if(c == ')')
            {                   
                while(opStack.peek() != '(')
                {
                    solutionStack.push(opStack.pop());
                    solutionStack.push('(');
                }
                opStack.pop();
            }
            else if (!Character.isSpaceChar(c))
            {
                if(opStack.isEmpty())
                {
                    opStack.push(c);
                }                       
                else if(opStack.peek()!='(' &&(OPERATORS.indexOf(c) < OPERATORS.indexOf(opStack.peek())))
                {
                    opStack.push(c);
                }
                else if(!opStack.isEmpty()&&(opStack.peek()!='('))
                {
                    solutionStack.push(opStack.pop());
                    solutionStack.push('(');
                    opStack.push(c);

                }
                else
                {
                    opStack.push(c);
                }

            }
        }
        while(opStack.size() != 0)
        {
            solutionStack.push(opStack.pop());
            solutionStack.push('(');
        }
        while(!solutionStack.isEmpty())
        {
            solution+=solutionStack.pop();
        }

        System.out.println("Final Answer!"+solution);
String s=inFixList.get(i);
Stack opStack=新堆栈();
堆栈解决方案堆栈=新堆栈();
字符串解=”;
for(char c:s.toCharArray())
{
if(Character.islitter(c)| | Character.isDigit(c))
{
溶液粘度推压(c);
}
else如果(c=='(')
{
opStack.push(c);
溶液粘度推压(');
}
如果(c=='),则为else)
{                   
而(opStack.peek()!='(')
{
solutionStack.push(opStack.pop());
溶液粘度.推力('(');
}
opStack.pop();
}
else如果(!Character.isSpaceChar(c))
{
if(opStack.isEmpty())
{
opStack.push(c);
}                       
else if(opStack.peek()!='('&&&(OPERATORS.indexOf(c)

这正确地输出了左括号,但只输出了一种右括号。有人知道我应该在哪里添加它们吗?我发誓我错过了最后一个逻辑步骤,无法确定这是否是问题所在,但我在您编写的代码中注意到了这一点

else if(c == '(')
{
   opStack.push(c);
   solutionStack.push(')');
}
你真的想在这里加一个右括号吗?加一个左括号似乎更合理,尽管我可能错了