gpt4 book ai didi

java - java中的括号检查器

转载 作者:行者123 更新时间:2023-12-01 12:20:03 25 4
gpt4 key购买 nike

我用java制作了一个括号检查程序,它从标准输入读取文本流,并使用堆栈来确定其括号是否正确平衡。例如,它应该为 [()]{}{[()()]()} 打印 true,为 [(]) 打印 false。我为这个问题制作了自己的堆栈类:

public class Stack {
private char items[];
private int top;

Stack(int n){
items = new char[n];
top = -1;
}

void push(char c){
if(top == items.length-1){
System.out.println("Stack full.");
return;
}
top++;
items[top] = c;
}

char pop(){
if(isEmpty()){
System.out.println("Stack empty");
return (char)0;
}
char p;
p = items[top];
top--;
return p;
}

boolean isEmpty(){
if(top == -1)
return true;
else
return false;
}

}

下面的 checkValid 方法接受一个字符串输入,如果括号匹配则返回 true,如果不匹配则返回 false。

    public static Boolean checkValid(String str){
char sym,prev;
Stack s = new Stack(str.length());
for(int i=0; i<str.length();i++){
sym = str.charAt(i);
if(sym == '(' || sym=='{' || sym=='['){
s.push(sym);
}
if(sym == ')' || sym=='}' || sym==']'){
if(s.isEmpty()){
return false;
}
else{
prev = s.pop();
if(!isPairMatch(prev,sym))
return false;
}
}

}
if(!s.isEmpty())
return false;
return true;
}
public static boolean isPairMatch(char character1, char character2){
if(character1 == '(' && character2 == ')')
return true;
else if(character1 == '{' && character2 == '}')
return true;
else if(character1 == '[' && character2 == ']')
return true;
else
return false;
}
}

有没有办法打印不匹配括号的位置?

最佳答案

如果您的堆栈不是保存 chars,而是保存一个类,该类同时包含 char 以及该 char 在输入字符串,您将能够打印不匹配括号的索引。

编辑:

仅当您想要未通过 isPairMatch 测试的两个不匹配括号的索引时,才需要此解决方案。

例如,如果您有字符串“[{}{}{})”,则不匹配的对是第一个“[”和最后一个“)”,其索引分别为 0 和 7。

如果您只需要第一个不匹配括号的索引(即索引为 0 的第一个“[”),则只需检查删除该括号后堆栈的大小即可。在此示例中,当检查最后一对时,堆栈将为空,因此堆栈的大小将为 0,这是失败的 isPairMatch 测试的第一个字符的索引。

关于java - java中的括号检查器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com