1

iPhone 電卓のチュートリアルに取り組んでいますが、数字の表示に問題があります。

電卓画面では、2 番目に入力されたオペランド (数値) が最初のオペランドのすぐ隣に「印刷」され、currentNumber がこの文字列からフィードされるため、誤った計算が行われます。

数値と演算子 (+、-、​​、/) をすべて表示し、計算を正しく実行するにはどうすればよいですか?

- (IBAction)pressedDecimal:(id)sender {
    calculatorScreen.text = [calculatorScreen.text stringByAppendingString:@"."];
}
- (IBAction)pressedDigit:(id)sender  {
    calculatorScreen.text = [calculatorScreen.text stringByAppendingFormat:@"%d", [sender tag]];
    currentNumber = [calculatorScreen.text floatValue];
}
- (IBAction) pressedOperation: (id) sender {
    if (currentOperation == 0) result = currentNumber;
    else {
        switch (currentOperation) {
            case 1:
                result = result + currentNumber;
                break;
            case 2:
                result = result - currentNumber;
                break;
            case 3:
                result = result * currentNumber;
                break;
            case 4:
                result = result / currentNumber;
                break;
            case 5:
                currentOperation = 0;
                break;
        }
    }
    currentNumber = 0;
    calculatorScreen.text = [NSString stringWithFormat:@"%g", result];
    if ([sender tag] == 0) result = 0;
    currentOperation = [sender tag];
}

OK、これは完全に入力された文字列 1.11+2.22 です - すべて一緒に配置されていることに注意してください..

完全に入力された文字列のスクリーンショット 1.11+2.22

ここに完成した計算がありますが、これは間違っています..文字列に演算子を表示させたいのですが、小数の問題はNSRangeを使用する必要がありますか?

完成した計算のスクリーンショット 2

4

1 に答える 1

1

対応するボタンが押されるとすぐに、各算術演算を実行しようとしています。考えてみると、これはおそらく正しくないことがわかります。たとえば、ユーザーが 12+34 を実行しようとした場合、電卓は「+」が押されたときに何かを追加する必要があることしか知りません。 12.

さて、あなたがビルド・ア・キュレーターのチュートリアルから作業しているなら、ほぼ確実にそれを書いた人は誰でもこれに対する解決策を持っています. しかし、これが私がすることです。シンプルなバージョンと、より複雑なバージョンがあります。

シンプルバージョンはこちら。

現在表示されている数字を 1 つ覚えるだけでは十分ではありません。これまでに を押したとします1 2 + 3。電卓は、(1) 数字の 12 を入力したこと、(2) それを何かに追加するように要求したこと、(3) 別の数字を入力していて、これまでに まで到達したことを知る必要があります3。(それは 345 か何かになるかもしれません。)

ということで、電卓の状態は以下の3つで構成されています。(1) 操作キーまたは「=」を押したときに表示されていた最後の完全な値。(または、それらよりも最近にクリア ボタンを押した場合は 0。) (2) 数字ボタンを押すことによって現在構築されている値。(3) 最後に押された操作キー。(または、「=」またはクリアボタンをそれらのいずれかよりも最近押した場合は「操作なし」。)

このすべてのポイントは、これがまさに、要求したことを実行するために電卓が必要とする情報であるということです。考えられる各キーを押したときにその状態がどのように変化するかを理解することはあなたにとって良いことなので、詳細には立ち入りません.

これをすべて行うと、コードにバグがなくても、電卓が意図したとおりに動作しない場合があることがわかります。12+34*56 と入力するとします。算数の本、コンピューター ソフトウェア、およびより高価な計算機では、これは (12+34)*56 ではなく 12+(34*56) を意味します。これは、掛け算が足し算よりも「優先度が高い」ためです。上記の方法で実装された電卓は、逆の方法で (12+34)*56 を計算します。それが気になる場合は、計算機に「適切に」実行させることができますが、それははるかに複雑になるため、少なくとも今のところは気にしないことを強くお勧めします.

于 2012-04-29T19:30:07.360 に答える