gpt4 book ai didi

Java 堆栈与 ArrayList

转载 作者:行者123 更新时间:2023-11-29 03:26:49 25 4
gpt4 key购买 nike

大家好,我又遇到困难了,我可以设法将项目插入堆栈并将它们弹出。我什至开始使用带开括号和闭括号的堆栈。但是当我用我创建的代码使用 (){}[] 括号时,它似乎忽略了 if 语句并去其他任何想法为什么。

主.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));
}
}

最佳答案

当你添加一个 ")" 时你想检查栈顶是否包含一个 "(", not a ")"。但这是您在这里实际测试的内容。

if (tempBrack.equals(brackets.arrayTop()))

与(假设您的堆栈仅包含 "(" 并且您输入了 ")")相同:

if (")".equals("("))

这显然是错误的。

您必须以一种方式进行检查,当您位于右括号/括号中时,您必须检查堆栈的顶部是否包含

case ")":

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

同样的逻辑适用于 "{""["

请注意:

  1. API 已经提供了一个 Stack类,无需重新发明轮子,就用这个。
  2. 考虑使用一堆字符,而不是字符串
  3. 如果右括号与左括号不匹配,您可以结束程序。

关于Java 堆栈与 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595624/

25 4 0