带有ArrayList的Java堆栈

带有ArrayList的Java堆栈,java,arraylist,stack,Java,Arraylist,Stack,嘿,伙计们,我又被卡住了,我可以设法把东西推到一堆上,然后把它们弹下来。我甚至还做了一个有开括号和闭括号的堆栈。但是,当我用()或{}或[]用我创建的代码括起来时,它似乎忽略了if语句,并转到了其他任何想法 Main.java public class DifferentBrackets { public static void main(String[] args) { Stack brackets = new Stack(); Scanner k =

嘿,伙计们,我又被卡住了,我可以设法把东西推到一堆上,然后把它们弹下来。我甚至还做了一个有开括号和闭括号的堆栈。但是,当我用
()
{}
[]
用我创建的代码括起来时,它似乎忽略了if语句,并转到了其他任何想法

Main.java

public class DifferentBrackets {

    public static void main(String[] args) {
        Stack brackets = new Stack();
        Scanner k = new Scanner(System.in);
        System.out.println("* to Terminate or Enter bracket : ");
        String tempBrack = k.next();
        while (!tempBrack.equals("*")) {
            System.out.println("* to Terminate or Enter bracket : ");

            switch (tempBrack) {
                case "(":
                    brackets.push("(");
                    System.out.println(tempBrack + " is added");
                    break;

                case "{":
                    brackets.push("{");
                    System.out.println(tempBrack + " is added");
                    break;

                case "[":
                    brackets.push("[");
                    System.out.println(tempBrack + " is added");
                    break;

                case ")":

                    if (tempBrack.equals(brackets.arrayTop()))
                            {
                            System.out.println(brackets.pop() + " is popped");
                            }
                    else if(tempBrack.equals(brackets.arrayTop()))
                    {
                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
                    }
                    else 
                    {
                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
                    }
                    break;

//            case "}":
//                    if (tempBrack.equals(brackets.arrayTop()))
//                            {
//                            System.out.println(brackets.pop() + " is popped");
//                            }
//                    else if (!tempBrack.equals(brackets.arrayTop()))
//                    {
//                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
//                    }
//
//                    break;

//                case "]":
//                    if (tempBrack.equals(brackets.arrayTop()))
//                            {
//                       if (!tempBrack.equals(brackets.arrayTop()))
//                    {
//                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
//                    }
//                    break;
            }

            System.out.println("* to Terminate or Enter bracket : ");
            tempBrack = k.next();
        }

    }
}
这是我的Stack.java

import java.util.ArrayList;

public class Stack
{
    private ArrayList<String> a;

    public Stack()
    {
       a = new ArrayList(10);       //initial capacity of 10
    }

    public boolean isEmpty()
    {
         return a.isEmpty();
    }

    public String pop()          //pop integer element
    {
        String last;
        last = a.remove((a.size()- 1));
        return(last);      //underflow will crash
    }

    public void push(String x)      //push integer element
    {
        a.add(x);
    }

    public String arrayTop()
    {
        return(a.get(a.size() -1));
    }
}
import java.util.ArrayList;
公共类堆栈
{
私人ArrayList a;
公共堆栈()
{
a=新阵列列表(10);//初始容量为10
}
公共布尔值为空()
{
返回a.isEmpty();
}
公共字符串pop()//pop整数元素
{
最后一串;
last=a.remove((a.size()-1));
return(last);//下溢将崩溃
}
public void push(String x)//push整数元素
{
a、 加(x);
}
公共字符串arrayTop()
{
返回(a.get(a.size()-1));
}
}
添加
时,您希望检查堆栈顶部是否包含
”(“
,而不是
”)
。但这是你在这里实际测试的

if (tempBrack.equals(brackets.arrayTop()))
与(假设您的堆栈只包含
”(“
并且您输入了
”)
)相同:

这显然是错误的

您必须以这样一种方式进行检查:当您处于右括号/方括号中时,您必须检查堆栈顶部是否包含一个开头

case ")":

    if ("(".equals(brackets.arrayTop())){
        System.out.println(brackets.pop() + " is popped");
    }
    else {
        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
    }
    break;
同样的逻辑适用于
“{”
“[”

请注意:

  • API已经提供了一个类,无需重新发明轮子,您应该使用这个类
  • 考虑使用一堆
    字符
    ,而不是
    字符串
  • 如果右括号与右括号不匹配,则可以结束程序
  • 添加
    时,您希望检查堆栈顶部是否包含
    ”(“
    ,而不是
    ”)
    。但这是您在此处实际测试的内容

    if (tempBrack.equals(brackets.arrayTop()))
    
    与(假设您的堆栈只包含
    ”(“
    并且您输入了
    ”)
    )相同:

    这显然是错误的

    您必须以这样一种方式进行检查:当您处于右括号/方括号中时,您必须检查堆栈顶部是否包含一个开头

    case ")":
    
        if ("(".equals(brackets.arrayTop())){
            System.out.println(brackets.pop() + " is popped");
        }
        else {
            System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
        }
        break;
    
    同样的逻辑适用于
    “{”
    “[”

    请注意:

  • API已经提供了一个类,无需重新发明轮子,您应该使用这个类
  • 考虑使用一堆
    字符
    ,而不是
    字符串
  • 如果右括号与右括号不匹配,则可以结束程序

  • 请看评论以获得解释。对于OP,请阅读并理解邹祖的回答

    import java.util.Scanner;
    
    public class DifferentBrackets {
    
        public static void main(String[] args) {
            Stack brackets = new Stack();
            Scanner k = new Scanner(System.in);
            System.out.println("* to Terminate or Enter bracket : ");
            String tempBrack = k.next();
    
            while (!tempBrack.equals("*")) {
    
                // if the user added an opening bracket
                // push it on the stack
                if (isOpeningBracket(tempBrack)) {
                    brackets.push(tempBrack);
                }
                else if (isClosingBracket(tempBrack)) {
                    // first check to see of the element at the 
                    // top of the stack is the mirror of the closing bracket
                    if (brackets.arrayTop().equals(mirror(tempBrack))) {
                        // if it is pop it from the stack
                        System.out.println(brackets.pop() + " is popped");
                    }
                    else {
                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
                    }
                }
                else {
                    System.out.println(tempBrack + " is an unsuported character");
                }
                tempBrack = k.next();
            }
            // if there is nothing on the stack after the user enters "*"
            // the user has entered balanced brackets  
            if (brackets.isEmpty()) {
                System.out.println("Congrats your brackets are balanced");
            }
            else {
                System.out.println("Sorry your brackets are not balanced");
            }
            k.close();
        }
    
        // find the closing bracket's mirror
        public static String mirror(String str) {
            switch (str) {
            case ")":
                return "(";
            case "]":
                return "[";
            case "}":
                return "{";
            default:
                return null;
            }
        }
    
        public static boolean isOpeningBracket(String str) {
            return str.equals("(") || str.equals("{") || str.equals("[");
        }
    
        public static boolean isClosingBracket(String str) {
            return str.equals(")") || str.equals("}") || str.equals("]");
        }
    }
    

    请看评论以获得解释。对于OP,请阅读并理解邹祖的回答

    import java.util.Scanner;
    
    public class DifferentBrackets {
    
        public static void main(String[] args) {
            Stack brackets = new Stack();
            Scanner k = new Scanner(System.in);
            System.out.println("* to Terminate or Enter bracket : ");
            String tempBrack = k.next();
    
            while (!tempBrack.equals("*")) {
    
                // if the user added an opening bracket
                // push it on the stack
                if (isOpeningBracket(tempBrack)) {
                    brackets.push(tempBrack);
                }
                else if (isClosingBracket(tempBrack)) {
                    // first check to see of the element at the 
                    // top of the stack is the mirror of the closing bracket
                    if (brackets.arrayTop().equals(mirror(tempBrack))) {
                        // if it is pop it from the stack
                        System.out.println(brackets.pop() + " is popped");
                    }
                    else {
                        System.out.println("Closed Bracket Doesnt Match Top Open Bracket");
                    }
                }
                else {
                    System.out.println(tempBrack + " is an unsuported character");
                }
                tempBrack = k.next();
            }
            // if there is nothing on the stack after the user enters "*"
            // the user has entered balanced brackets  
            if (brackets.isEmpty()) {
                System.out.println("Congrats your brackets are balanced");
            }
            else {
                System.out.println("Sorry your brackets are not balanced");
            }
            k.close();
        }
    
        // find the closing bracket's mirror
        public static String mirror(String str) {
            switch (str) {
            case ")":
                return "(";
            case "]":
                return "[";
            case "}":
                return "{";
            default:
                return null;
            }
        }
    
        public static boolean isOpeningBracket(String str) {
            return str.equals("(") || str.equals("{") || str.equals("[");
        }
    
        public static boolean isClosingBracket(String str) {
            return str.equals(")") || str.equals("}") || str.equals("]");
        }
    }
    

    你有什么问题?我不明白。顺便说一句,你的
    否则如果
    没有用,因为它检查的条件与你的
    如果
    相同,那么你的问题是什么?我不明白。顺便说一句,你的
    否则如果
    没有用,因为它检查的条件与你的
    如果