2016-04-23 6 views
-1

私はこのわずかに変更されたバージョンのコードをここではJava Stack Balancingのために100回以上使用しています。Javaスタックブール出力のカスタマイズ?

import java.util.Stack; 

public class Main { 

public static String testContent = "{(a,b)}"; 

public static void main(String args[]) 
{ 

    System.out.println(balancedParentheses(testContent)); 
} 

public static boolean balancedParentheses(String s) 
{ 
    Stack<Character> stack = new Stack<Character>(); 
    for(int i = 0; i < s.length(); i++) 
    { 
     char c = s.charAt(i); 
     if(c == '[' || c == '(' || c == '{') 
     { 
      stack.push(c); 
     }else if(c == ']') 
     { 
      if(stack.isEmpty()) return false; 
      if(stack.pop() != '[') return false; 

     }else if(c == ')') 
     { 
      if(stack.isEmpty()) return false; 
      if(stack.pop() != '(') return false; 

     }else if(c == '}') 
     { 
      if(stack.isEmpty()) return false; 
      if(stack.pop() != '{') return false; 
     } 

    } 
    return stack.isEmpty(); 
} 
} 

私は何をしたいのは、このようなことは「バランス」や「不均衡」の代わりに、真/偽のような出力なものであろうと出力をカスタマイズです。置き換えようとするとfalseが返されます。 「バランスの取れた」System.printlnがあれば、私には望ましくない出力ラインがたくさんあります。ここ1時間ほどで変化していて、私が探していた答えを見つけることができませんでした。どんな洞察?

+1

System.out.println(balancedParentheses(testContent)? "平衡":不均衡 "); –

+0

何らかの理由でこれを解決策としてマークすることはできませんが、間違いなくトリックでした。 – BEASTthisIndustry

+0

@BEASTthisIndustryこれは、スタックオーバーフローでは、あなたは答えを受け入れることができます – Nayuki

答えて

1

あなたは

System.out.println(balancedParentheses(testContent) ? "balanced" : "imbalanced");

たり、文字列を返すメソッドをしたい場合は、別の方法

String isBalanced(String expression) { 
    return balancedParentheses(expression) ? "balanced" : "imbalanced" 
} 

とメインで()

System.out.println(isBalanced(testContent)); 
にロジックをラップのようなものを使用することができます

このようなコードを書くことができます

public static boolean balancedParentheses(String s) { 
    Stack<Character> stack = new Stack<Character>(); 
    for (int i = 0; i < s.length(); i++) { 
     char c = s.charAt(i); 
     if (c == '[' || c == '(' || c == '{') { 
      stack.push(c); 
     } else if (c == ']' || c == ')' || c == '}') { 
      if (stack.isEmpty() || !matches(stack.pop(), c)) 
       return false; 
     } 
    } 
    return stack.isEmpty(); 
} 

private static boolean matches(char opening, char closing) { 
    return opening == '{' && closing == '}' || 
      opening == '(' && closing == ')' || 
      opening == '[' && closing == ']'; 
} 
+0

私はbalancedParentheses()コードの簡潔なバージョンが大好きです! – Nayuki

+1

''([" {".contains(c)')とマッチメソッド 'String brackets = opening +" "+閉じた; 'それから' brackets.equals( "()")|| brackets.equals( "[]") 'など –

関連する問題