java stack 问题
答案:3 悬赏:0
解决时间 2021-03-12 19:17
- 提问者网友:晨熙污妖王
- 2021-03-12 01:39
我用stack类 进行括号匹配问题。。代码如下
import java.util.*;
public class expTest{
public static void main(String[] args) throws Exception{
Stack stack=new Stack();
Scanner sc=new Scanner(System.in);
System.out.print("请输入一括号表达式:");
String str=sc.next();
String[] list=new String[str.length()];
for(int i=0;i String ss=str.substring(i, i+1);
list[i]=ss;
}
for(int i=0;i
if((list[i].equals(new String("(")))||(list[i]).equals(new String("["))||(list[i].equals(new String("{"))))
stack.push(list[i]);
else if((list[i].equals(new String(")"))) && (stack.peek().equals(new String("("))) && (! stack.isEmpty())){
stack.pop();
}
else if((list[i].equals(new String(")"))) && (! stack.peek().equals(new String("(")))){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("]"))) && (stack.peek().equals(new String("["))) && (! stack.isEmpty())){
stack.pop();
}
else if((list[i].equals(new String("]"))) && (! stack.peek().equals(new String("[")))){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("}"))) && (stack.peek().equals(new String("{"))) && (! stack.isEmpty())){
stack.pop();
}
else if((list[i].equals(new String("}"))) && (! stack.peek().equals(new String("{")))){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String(")")))||(list[i].equals(new String("]")))||(list[i].equals(new String("}"))) && (stack.isEmpty())){
System.out.println("右括号多于左括号!");
}
}
if(! stack.isEmpty())
System.out.println("左括号多于右括号!");
else
System.out.println("括号匹配正确!");
}
}
运行,当我这样输入的时候:
请输入一括号表达式:{}}}}
Exception in thread "main" java.util.EmptyStackException
抛出了异常。。。请问这哪里出错了。。求助高手
最佳答案
- 二级知识专家网友:强势废物
- 2021-03-12 03:05
else if((list[i].equals(new String("}"))) && (! stack.peek().equals(new String("{")))){
stack.peek挂了。
你的判断有问题,第2个}stack已经empty了,你再调用stack.peek()就会挂,判断里的stack.peek().equals(new String。。。这个方法要用之前得先判断stack是否为空。给你改了下循环,后面的输出你看着改把,有问题发消息:
for(int i=0;i
if((list[i].equals(new String("(")))||(list[i]).equals(new String("["))||(list[i].equals(new String("{"))))
stack.push(list[i]);
else if((list[i].equals(new String(")"))) && (stack.peek().equals(new String("("))) && (! stack.isEmpty())){
stack.pop();
}
else if((list[i].equals(new String(")"))) && (! stack.isEmpty())&& (! stack.peek().equals(new String("(")))){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("]"))) && (! stack.isEmpty())&& (stack.peek().equals(new String("["))) ){
stack.pop();
}
else if((list[i].equals(new String("]"))) && (! stack.isEmpty())&& (! stack.peek().equals(new String("["))) ){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String("}"))) && (! stack.isEmpty())&& (stack.peek().equals(new String("{"))) ){
stack.pop();
}
else if((list[i].equals(new String("}"))) && (! stack.isEmpty())&& (! stack.peek().equals(new String("{"))) ){
System.out.println("左右括号匹配不正确!");
return;
}
else if((list[i].equals(new String(")")))||(list[i].equals(new String("]")))||(list[i].equals(new String("}"))) && (stack.isEmpty())){
System.out.println("右括号多于左括号!");
}
}
全部回答
- 1楼网友:温柔刺客
- 2021-03-12 04:42
我没仔细看你的代码,但是有个问题题我要给你说一下。就是String类的subString(begin,end)方法截取的字符串是String索引位置从begin到(end-1)。你看看你的代码,像你那样截取实际上时没有截取的。
- 2楼网友:初心未变
- 2021-03-12 03:13
闲着实在无聊......
写了个简单的双链表实现stack。未引用任何包。
public class main {
public static void main(string[] args) {
stack s = new stack();
s.put("abc");//压栈
s.put("def");//压栈
s.put("ghi");
system.out.println(s.pop());//出栈
system.out.println(s.isempty());//判断栈是否为空
system.out.println(s.pop());
system.out.println(s.isempty());
system.out.println(s.pop());
system.out.println(s.isempty());
}
}
class stack {
private node root = new node();
private node top = root;
public object pop() {
if(top != null) {
object value = top.getvalue();
top = top.getprevious();
return value;
} else {
return null;
}
}
public void put(object value) {
node n = new node(top, value);
top.setnext(n);
top = n;
}
public boolean isempty() {
return top.getprevious() == null;
}
}
class node {
private node next;
private object value;
private node previous;
public node() {
}
public node(node previous, object value) {
this.previous = previous;
this.value = value;
}
public node getnext() {
return next;
}
public void setnext(node next) {
this.next = next;
}
public object getvalue() {
return value;
}
public void setvalue(object value) {
this.value = value;
}
public node getprevious() {
return previous;
}
public void setprevious(node previous) {
this.previous = previous;
}
}
我要举报
大家都在看
推荐资讯