java - 用于判断表达式语法有效性的递归程序(初学者)

时间:2013-04-24 01:16:01

标签: java recursion

我只是在学习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;

  }

1 个答案:

答案 0 :(得分:0)

我不确定为什么你的代码很复杂。递归对于整体而言非常简单;这就是我要做的事情:

public static boolean check(String str) {
    if(str.equals("")) return true;
    if(str.charAt(0).isAlphaNumeric() || str.charAt(0) == '(' || str.charAt(0) == ')') return check(str.substring(1));
    return false;
}

你的边缘情况是字符串是空的;如果是这种情况,则该字符串有效。如果角色与您要查找的内容不匹配,请返回false。否则,请检查下一个字符。