0

私はちょうど 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;

  }
4

1 に答える 1

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 を返します。それ以外の場合は、次の文字を確認してください。

于 2013-04-24T01:37:11.447 に答える