我在java中製作了一個括號檢查程序,它從標準輸入讀入文本流並使用堆棧來確定它的括號是否正確平衡。例如,它應該爲[()]{}{[()()]()}
輸入true,在[(])
輸出false。我已經做了Stack類我自己對這個問題:java中的括號檢查器
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;
}
}
有沒有辦法打印不匹配圓括號的位置?
那麼,不匹配的圓括號的位置應該與堆棧的大小(或「大小-1」)相同。 – Tom 2014-11-04 10:03:43