0

私は次のような文字列を回す必要があります

class freud IF : 0.010<=cst0.1<=0.02 ^ 0.012<=cst0.2<=0.014 ^ 0.01<=cst0.3<=0.011 ^ 0.009<=cst0.4<=0.01 ^ cst0.5=0.009 ^ 0.008<=cst0.6<=0.009 ^ 0.008<=cst0.7<=0.009 ^ 0.007<=cst0.8<=0.009 ^ 0.007<=cst0.9<=0.009 ^ 0.008<=cst1.0<=0.012

実際のJavaifステートメントに:すなわち

if(0.010 <= cst0.1 && cst0.1 <= 0.02 .....)

ここで、cst0.1はfloatなどの名前になります。

何か案は?文字列をコンポーネントに分割しようとしましたが、必要な文字列はすべて異なります。

ありがとう

4

3 に答える 3

0

表示されている内容から、たとえばXとYが数字で_ある形式の文字列では、ドットを有効な識別子文字に置き換え、。に置き換えるだけで十分です。cstX.Y^&&

結果のifステートメントを有効にするには、cstX_Y導入したすべての変数も宣言する必要があります。

于 2012-08-17T09:14:32.033 に答える
0

boolean evaluate(String stringToEvaluate) 文字列をセグメントに分割し、各ビットを評価する評価メソッドを作成してみてください

public class MyClass {
    public boolean evaluate(String stringToEvaluate)
    {
    boolean exprvalue = true;
    for (String string : stringToEvaluate.split("^"))
            {
            exprvalue = exprvalue && evaluateLE(string);
            }
    return exprvalue;
    }

    private boolean evaluateLE(String string) {
        String[] values = string.split("<=");
        if (values.length==2)
        {
            return evaluateVal(values[0]) <= evaluateVal(values[1]); 
        }

        return evaluateOtherLogicalExpr(string);
    }

    private float evaluateVal(String string) {
        if (isExpresion(string)) return evaluateArthmeticalExpr(string);
        if (isVariable(string)) return evaluateVariable(string);

        return Float.parseFloat(string);
    }
}
于 2012-08-17T09:59:52.847 に答える
0

答えがあると思います。これが私のステップとコードです:

  1. ラインにIFが含まれているかどうかを確認します
  2. 含まれている場合は、split( "^")を使用してラインを等式コンポーネントに分割します。これは構造によって異なります。
  3. 次に、各コンポーネントをチェックインし、同等性があるかどうかを確認します "<="、 "="
  4. 構造に応じてそれぞれを独立して処理します。
  5. 各「0.025」(たとえば)をフロートに変換します
  6. 3,5とそれと比較したいデータに基づいてJAVAifステートメントを作成します。
  7. すべての平等が行全体で成り立つ場合は、順調に進んでいると記録します。1つが失敗した場合は、離れて、新しい行を取得します。すべてが保持されている場合、関数は初期値、つまりアーティスト文字列を返します。

とにかくここにコードがあります:

while(line != null ){
            boolean equality = false;

            String[] split_line;
            String[] first_part;
            String[] statements;
            String[] components;

            if(line.contains("IF")){
                split_line = line.split(":");
                statements = split_line[1].split(" ^ ");
                int attrib_pos = 0;

                for(int pos = 0; pos < statements.length; pos++){
                    if(statements[pos].contains("<=")){
                        components = statements[pos].split("<=");
                        float component_1 = new Float(components[0]);
                        // middle component is attribute
                        float component_2 = new Float(components[2]);

                        if(!(( component_1 <= data[attrib_pos]) && (data[attrib_pos] <= component_1))){
                            break;
                        }
                    }
                    else if(statements[pos].contains("=") ){
                        components = statements[pos].split("=");
                        float component_1 = new Float(components[1]);
                        if(!(component_1 == data[attrib_pos])){
                            break;
                    }
                        // if we have not found a false statement, increase no of attributes which hold
                        attrib_pos++;
                }
                }
                // if we have run through all attributes as holding then return, as we have found a true rule
                if(attrib_pos-1 == statements.length){
                    _return = (split_line[0].split("\\s+"))[2];
                    return _return;
                }
            }
            // once we have read the line, read another 
        line = read.readLine();

        }               
    }
于 2012-08-17T10:08:51.367 に答える