2

乗算を処理するときに、括弧とアスタリスクをブール式に挿入するために使用される次のメソッドがあります。たとえば、 を入力するとA+B+ABが得られA+B+(A*B)ます。

ただし、素数 (アポストロフィ) も考慮する必要があります。次に、入出力の例をいくつか示します。

A'B'+CD与えるべき(A'*B')+(C*D)

A'B'C'D'与えるべき(A'*B'*C'*D')

(A+B)'+(C'D')与えるべき(A+B)'+(C'*D')

次のコードを試しましたが、エラーがあるようです。何かご意見は?

public static String modify(String expression)
    {
        String temp = expression;
        StringBuilder validated = new StringBuilder();
        boolean inBrackets=false;

        for(int idx=0; idx<temp.length()-1; idx++)
        {
            //no prime
            if((Character.isLetter(temp.charAt(idx))) && (Character.isLetter(temp.charAt(idx+1))))
            {
                if(!inBrackets)
                {
                    inBrackets = true;
                    validated.append("(");
                }
                validated.append(temp.substring(idx,idx+1));
                validated.append("*");
            }

            //first prime
            else if((Character.isLetter(temp.charAt(idx))) && (temp.charAt(idx+1)=='\'') && (Character.isLetter(temp.charAt(idx+2))))
            {
                if(!inBrackets)
                {
                    inBrackets = true;
                    validated.append("(");
                }
                validated.append(temp.substring(idx,idx+2));
                validated.append("*");
                idx++;
            }

            //second prime
            else if((Character.isLetter(temp.charAt(idx))) && (temp.charAt(idx+2)=='\'') && (Character.isLetter(temp.charAt(idx+1))))
            {
                if(!inBrackets)
                {
                    inBrackets = true;
                    validated.append("(");
                }
                validated.append(temp.substring(idx,idx+1));
                validated.append("*");
                idx++;
            }

            else
            {
                validated.append(temp.substring(idx,idx+1));
                if(inBrackets)
                {
                    validated.append(")");
                    inBrackets=false;
                }
            }
        }
        validated.append(temp.substring(temp.length()-1));
        if(inBrackets)
        {
            validated.append(")");
            inBrackets=false;
        }
        return validated.toString();
    }

どうぞよろしくお願いいたします。前もって感謝します!:)

4

2 に答える 2

0

文字列内の文字の位置から始めることをお勧めします+。それらが 1 異なる場合は、何もしません。それらが 2 だけ異なる場合は、2 つの可能性があります:ABまたはA'. だからあなたはそれをチェックします。それらが2つ以上異なる場合は、記号を確認して'必要な記号を入力してください。

于 2013-11-07T04:17:15.217 に答える