2

「ProgramminginObjective-C」第4版を読んでいます。スティーブン・G・コチャン著。この本には、iPhone用の電卓アプリケーションを作成するためのサンプルコードがあります。私はコードを理解しています、少なくともその90%。-分数オブジェクトを格納するメソッドがあり、さまざまな基本的な分数算術演算を実行する方法を説明するFractionクラスがあります-それに加えて、ユーザーが合計、除算などを試みます。

ビューコントローラには、ユーザーがインターフェイスで数字を押したときの次の方法があります。

-(IBAction)clickDigit:(UIButton *)sender {
int digit = sender.tag;     //sender or the argument inthis case is  the button

[self processDigit:digit];
}

ご覧のとおり、このメソッドは次のように呼び出されます。

-(void) processDigit:(int)digit {
currentNumber = currentNumber * 10 + digit;

[displayString appendString:
 [NSString stringWithFormat:@"%i", digit]];
display.text = displayString;

}

私の唯一の質問(そしておそらく最も簡単な答えの質問)は次のとおりです:currentNumberが常に10倍されるのはなぜですか?コンパイラが上記のメソッドに入るまで、currentNumberの値は常に0です(XCodeのデバッガを使用してこれを確認しました)ので、なぜ10を掛ける必要があるのか​​わかりません。その掛け算を削除しましたが、結果は正しくありません。 、私はまだ理由を理解することはできません。

ありがとうございました

4

4 に答える 4

2

たぶん、これについて考える最良の方法は例を使うことです。

ユーザーが次の数字を順番にクリックしたと想像してください:1、2。次に、コードが機能していると仮定すると、の数値はcurrentNumber12になります。

次に、ユーザーが次に「3」をクリックしたと想像してください。ここで、値を123にします。これは、前の値(12)に10を掛けてから、3を加算することで取得できます。次に、「4」をクリックすると、値は1,234になり、10で達成されます。 * 123+4など。

于 2012-07-01T04:21:44.023 に答える
1

デバッガーは、時々そうであるように、誤解を招く可能性があります。

掛け算を外すと結果が間違っている場合、掛け算は明らかに何かをすることを考慮してください!

デバッグ専用に以下を試してください。

int lastCurrentNumber = currentNumber;
currentNumber = 10 * lastCurrentNumber + digit;

次に、デバッガーで、の値を確認し、lastCurrentNumberこれら2つのステートメントを実行しますcurrentNumberdigit

于 2012-07-01T04:28:31.013 に答える
1

*10、10進数のさまざまな場所(10桁、100桁など)で数字を移動するために使用されます。

配列を使用する必要をなくすための一種の「ハック」です。他の電卓アプリは、数字を配列に「ポップ」および「プッシュ」します。これにより、10進数以外の数値(2進数、16進数など)の操作だけでなく、より強力な操作が可能になります。

iTunes Uの無料iOS開発コースには、配列を使用する電卓アプリが含まれています。違いを比較したい場合は、ここからソースコードをダウンロードできます。

http://www.stanford.edu/class/cs193p/cgi-bin/drupal/

Fractionオブジェクトもありますが、*10メソッドを使用しません。

于 2012-07-01T04:29:23.067 に答える
1

電卓の画面に「123」が表示されていて、これを「1234」に変換したいとします。文字列の場合は、末尾に「4」を追加すれば問題なく動作します。しかし、これは整数であり、整数値に4を追加すると127になります。したがって、123を取得し、10を掛けて1230を取得し、次に4を追加して1234を取得します。

于 2012-07-01T04:21:34.570 に答える