带有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;
同样的逻辑适用于“{”
和“[”
请注意:
字符
,而不是字符串
“
时,您希望检查堆栈顶部是否包含”(“
,而不是”)
。但这是您在此处实际测试的内容
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;
同样的逻辑适用于“{”
和“[”
请注意:
字符
,而不是字符串
请看评论以获得解释。对于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("]");
}
}
你有什么问题?我不明白。顺便说一句,你的
否则如果没有用,因为它检查的条件与你的如果相同,那么你的问题是什么?我不明白。顺便说一句,你的否则如果没有用,因为它检查的条件与你的如果