これは私のコードが数学的演算(実装スタック)の括弧の括弧を調べています。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();
}
}
ifブロックの中に何か「ポップ」するときに 'top'を減らす必要があります。すべてのブロックが同一であるため、条件を括弧と '||' - 演算子と組み合わせることができます。 – Haem