2017-11-02 1 views
0

これは私のコードが数学的演算(実装スタック)の括弧の括弧を調べています。Javaスタックで数学的結果を検索するには?

私のコードが乗算、除算、加算、減算の結果をどのように得ることができるかをお伺いしたいと思います。まず乗算と除算の優先順位付けができます。例えば

String rumus = "(20 - 2 * 3) * 2 + ((2 + 7) + 20)" 

は、結果が(20 - 2 * 3) * 2 + ((2 + 7) + 20) = 57になる場合があります。

public class Stack4Fix { 

public int top = 0; 
public char[] data = new char[100]; 
public boolean q = true; 

public void kerja(String rumus) { 

    for (int i = 0; i < rumus.length(); i++) { 
     if (rumus.charAt(i) == '(' | rumus.charAt(i) == '{' | rumus.charAt(i) == '[' | rumus.charAt(i) == '<') { 
      data[top] = rumus.charAt(i); 
      top++; 
     } 

     if (rumus.charAt(i) == ')' | rumus.charAt(i) == '}' | rumus.charAt(i) == ']' | rumus.charAt(i) == '>') { 
      if (top > 0) { 
       top--; 
       if (rumus.charAt(i) == ')' && data[top] == '(') { 
        data[top] = '\u0000'; 
       } else if (rumus.charAt(i) == '}' && data[top] == '{') { 
        data[top] = '\u0000'; 
       } else if (rumus.charAt(i) == '>' && data[top] == '<') { 
        data[top] = '\u0000'; 
       } else if (rumus.charAt(i) == ']' && data[top] == '[') { 
        data[top] = '\u0000'; 
       } else { 
        q = false; 
       } 
      } else { 
       q = false; 
      } 
     } 
    } 
} 

public void cek() { 

    if (data[0] != '\u0000') { 
     q = false; 
    } 
    if (q == false) { 
     System.out.println("Invalid data"); 
    } else { 
     System.out.println("Valid"); 
    } 
} 


public static void main(String[] args) { 
    Stack4Fix rofy = new Stack4Fix(); 
    String rumus = "(20 - 2 * 3)* 2 + ((2 + 7) + 20)" 
    rofy.kerja(rumus); 
    rofy.cek(); 
} 
} 
+0

ifブロックの中に何か「ポップ」するときに 'top'を減らす必要があります。すべてのブロックが同一であるため、条件を括弧と '||' - 演算子と組み合わせることができます。 – Haem

答えて

0

私は、既成のスタックの実装を使用しない理由があると推測します。

ifブロック内に何かをポップすると、topを減らす必要があります。すべてのブロックが同一であるため、条件をかっこやor演算子と組み合わせることができます。また、論理演算には2つのパイプ(||)があります。

現在、topという要素は、少なくともあなたの目的のために割り当てが解除されます。 top>0の条件は、ゼロインデックスに何かがある可能性があるため、>=を使用する必要があります。インデックスtopに何かを書き込む前に、topを-1に初期化してインクリメントする必要があります。

+0

"*既成のスタックの実装* ..." 'java.util.Stack'のように?それはひどいです。 – Michael

関連する問題