1

私は学校の式ツリーを作るのに忙しく、ツリーが作られている部分をすでに構築しており、算術式の結果を出力することもできます。
課題を完了するためのこの余分な部分があります。それも機能させたいと思います。追加の割り当ては、プログラムが式を読み取れるようにすることです。
私はこれについてかなり進んでいますが、整数の最後に数字を配置してこのことを良い方法でコーディングしたかどうかはわかりません。私が解決しようとしている問題は、次のような式がある場合です...
(3*(8-2))+(12/4)
... 文字の配列から 12 を取得するにはどうすればよいですか?彼らは2つの異なるキャラクターですか?コードの残りの部分では文字の配列を使用しましたが、もちろん String を使用して 2 つの文字を取得することもできます。

私はこのようにしました:

// if the next character is a digit...
if (Character.isDigit(expression[i])) {
    // ... make local variables 'nextNumber'...
    int nextNumber = 0;
    // ... and 'a' which already contains this first digit...
    String a = Character.toString(expression[i]);
    // ... so when we check for the next character... 
    for (int k = i+1; k < expression.length; k++) {
        // ... wether it is a digit,...
        if (Character.isDigit(expression[k])) {
            // ... we can add that digit to 'a',...
            a = a + Character.toString(expression[k]);
        }
        // ... and if it is not a digit...
        else if (!Character.isDigit(expression[k])) {
            // ... we will exit the for loop.
            break;
        }
    }
    // now we have to change the String to an integer...
    nextNumber = Integer.getInteger(a);
    // ... and then we are sure we have the whole number as it was ment to be
    // in the given expression
    return new ET(nextNumber);
}

しかし、それはとてもずさんなようです。私はGoogleで長い間検索しましたが、見つけたのはこの方法だけでしたが、もっと簡単な、または少なくともずさんな方法はないと思います. 皆さんはもっと良い方法を知っていますか、それともこれが進むべき道ですか?

私が構築したソリューションは、式ツリーの問題を解決するための比較的簡単な方法です。もっと解決することもできますが、私が理解していることを先生に示すことができる限り、必要以上に時間をかけたくありません。レッスン。対象のコースはアルゴリズムなので、実際には Java を学ぶことではありません。つまり、先生が解決するように頼んだ問題の解決策を私が求めているわけではないということです。

前もって感謝します!

4

1 に答える 1

2

あなたは数字ごとに数字を積み上げることができます(擬似コード):

number = 0
for each digit {
    number = number * 10 + value_of(digit)
}

これによりnumber、基数10の数字列(左から右)の値として生成されます。

あなたの場合:digits = (1,2)

number = 0
number = number * 10 + 1  // <= number = 0*10+1=1
number = number * 10 + 2  // <= number = 1*10+2=12    
于 2011-09-28T14:56:01.720 に答える