我刚刚学习java,我有一个任务,我必须编写一个程序来检查关于集合的表达式的有效性。有效的表达式是大写字母,前面带有波浪号的表达式,可以使用 + 和 x 以及括号组合。我编写了一个几乎可以工作的程序,但我不知道如何让二元运算符与括号一起工作。
也可能是我以错误的方式解决了问题(尝试从左到右进行验证,一旦验证就忽略左侧的所有内容)。对于此类问题,我可以使用任何我能获得的帮助来编写递归程序;也就是说,如果您对解决问题的更好方法有任何指示,那将非常有帮助。
作为参考,这是我拥有的代码:
public static boolean check(String expr) {
char spot;
int close=0;
expr = expr.trim();
//base case
if (expr.length() == 1 && expr.charAt(0)>= 'A' && expr.charAt(0) <= 'Z')
return true;
if (expr.charAt(0) == '~') {
if (expr.charAt(1) == 'x' || expr.charAt(1) == '+' || expr.charAt(1) == ')')
return false;
return check(expr.substring(1));
}
if (expr.indexOf('x') > 0 && expr.indexOf('x') > expr.indexOf(')')) {
int x = expr.indexOf('x');
if (check(expr.substring(0, x)) && check(expr.substring(x)))
return true;
}
if (expr.indexOf('+') > 0 && expr.indexOf('+') > expr.indexOf(')')) {
int plus = expr.indexOf('+');
if (check(expr.substring(0, plus)) && check(expr.substring(plus+1)))
return true;
}
if (expr.charAt(0) == '(') {
close = findEnd(expr.substring(1));
if (close < 0)
return false;
if (check(expr.substring(1,close)) && check(expr.substring(close+1)))
return true;
}
return false;
}