解読、説明、改善のための推奨事項を提供するためのコードスニペットが提供されました。私はそれが機能すると言われ、それをテストするためのコードを実行することはできません。私はそれをかなり理解していますが、私が理解していることが正しいことを確認するために誰かがそれを実行する必要があります、そして私が理解していないことを説明するのに助けを求めてください。私はたくさんの研究をしていて、まだいくつかあります質問。
このコードは、乗算と加算のみを使用する接尾辞式を読み取るために使用される実装です。次に、結果をスタックに保存しながら式を評価します。次に、結果を出力します。オペランドはスタックにプッシュされ、演算子を読み取るときに、スタックから上位2つのオペランドがポップされて計算が実行され、結果がスタックに格納されます。
プログラムは、整数と演算子が空白などの文字で区切られていることを前提としていますが、入力の合法性はまったくチェックしていません。
public static void main(String[] args)
{
char[] a = args[0].toCharArray();
int N =a.length;
intStack s = new intStack();
for (int i = 0; i<N; i++)
{
if (a[i]=='+')
{
s.push(s.pop() + s.pop());
}
if (a[i]=='*')
{
s.push(s.pop() * s.pop());
}
if ((a[i] >= '0') && (a[i] <= '9'))
{
s.push(0);
}
while ((a[i] >= '0') && (a[i] <= '9'))
{
s.push(10*s.pop() + (a[i++]-'0'));
}
Out.println(s.pop() + "");
}
}
修正後の式の例:2 3 5 + * = 16
最後のifステートメントとwhileループに関しては混乱しています。
したがって、最初に0〜9の数字をプッシュすると、#0が格納され、その0がポップアウトされ、10で乗算されて、intに変換される次の数字(存在する場合)に追加されます。結果をスタックにプッシュバックしますか?もしそうなら、なぜ0がスタックにプッシュされるのですか?
最初の0〜9の番号付き文字をintデータ型に変換し、それをスタックにプッシュしてから、whileループに移動するべきではありませんか?
次に、Whileループで、配列を読み取り、0〜9の番号付き文字をintデータ型に変換し続け、異なる文字が読み取られるまでスタックにプッシュしますか?
また、whileループのどこでint iをインクリメントしているのか、次の文字に進むためにwhileループから抜け出しているのかわかりませんか?