對於我的CS類,我必須創建一個布爾函數isBalanced(String x),它接受一個字符串並計算括號/圓括號的數量,並且如果括號匹配它的對,則返回true (例如,{是一對},(是一對),[是一對]等)。如果括號正確匹配,該函數將返回true,否則返回false。爲了澄清,如果您想知道該對象是什麼,MyStack()是我自己的Java堆棧接口的實現。的代碼如何工作,並返回Java Stacks /找不到邏輯錯誤
實例:
{A(B [C])} d將返回真。
{A(B [C)] D}將返回false。
我的代碼中的問題是一個邏輯錯誤。出於某種原因,如果缺少支架,我的函數返回true,該支架應該返回false。
{A(B)C將返回false,但我的代碼讀取它爲true。你有任何解決方案可以幫助我的代碼正常工作嗎?謝謝!
Balancer.java
public static boolean isBalanced(String x) {
MyStack<String> stack = new MyStack();
if (x.substring(0,1).equals("}") || x.substring(0,1).equals(")") || x.substring(0,1).equals("]")) {
return false;
}
for (int i=0; i<x.length(); i++) {
if (x.substring(i,i+1).equals("{") || x.substring(i,i+1).equals("(") || x.substring(i,i+1).equals("[")) {
stack.add(x.substring(i,i+1));
}
if (x.substring(i,i+1).equals("}") || x.substring(i,i+1).equals(")") || x.substring(i,i+1).equals("]")) {
if (x.substring(i,i+1).equals("}") && stack.peek().equals("{")) {
stack.pop();
} else if (x.substring(i,i+1).equals(")") && stack.peek().equals("(")) {
stack.pop();
} else if (x.substring(i,i+1).equals("]") && stack.peek().equals("[")) {
stack.pop();
} else {
return false;
}
}
}
return true;
}
這個文件,標記Main.java,僅僅是一個測試。我忽略了代碼工作的其他情況。該函數返回false的原因是有一個缺失}應該在最後,但沒有,但我的函數由於某種原因返回true。
Main.java
public static void main(String[] args) {
...
String test4 = "{AA[B(CDE{FG()T})V]";
System.out.println("Missing final close (empty stack case)");
System.out.println("Should be false, is: " + Balancer.isBalanced(test4)); // does not work
}
我已經低估了這個問題,因爲沒有任何有關此代碼執行調試的證據。請[編輯]您的問題,向我們展示您的調試未發現的內容,以及關於特定代碼行的具體問題。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)和[如何調試小程序](https://ericlippert.com/2014/03/05 /如何調試的小程序/)。 –
'return stack.isEmpty();'我會期待 - 甚至沒有閱讀代碼。因爲所有開放的括號必須在最後關閉。 –