2

我正在阅读“Objective-C 编程”第 4 版。斯蒂芬 G. Kochan。书中有一个示例代码,用于为 iPhone 创建一个计算器应用程序。我理解代码,至少 90%。- 有一个 Fraction 类,它具有存储分数对象的方法,并描述了如何执行不同的基本分数算术运算 - 除此之外,还有一个计算器类,它根据用户是否在 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。然后,假设代码有效,数字值currentNumber应该是 12。

现在想象用户接下来点击“3”。现在您希望该值为 123。您可以通过将先前的值 (12) 乘以 10,然后添加 3 来获得此值。如果他们随后单击“4”,则该值应变为 1,234,即 10 * 123 + 4。依此类推。

于 2012-07-01T04:21:44.023 回答
1

想象一下你的计算器屏幕上有“123”,而你想把它变成“1234”。如果它是一个字符串,您可以在末尾添加“4”,它可以正常工作。但它是一个整数,如果你在整数值上加 4,你会得到 127。所以你所做的就是取 123,乘以 10 得到 1230,然后加上 4 得到 1234。

于 2012-07-01T04:21:34.570 回答
1

调试器一定会误导您,就像它有时那样。

考虑一下,如果将乘法取出会使结果错误,那么乘法显然会起作用!

尝试以下仅用于调试:

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

现在在调试器中检查 的值lastCurrentNumbercurrentNumberdigit在您逐步执行这两个语句时。

于 2012-07-01T04:28:31.013 回答
1

用于将*10数字移动到十进制数的各个位置(十位、百位等)

避免使用数组是一种“黑客”。其他计算器应用程序“pop”和“push”数字到数组上,这允许更强大的操作以及非十进制数(二进制、十六进制等)的操作

iTunes U 上的免费 iOS 开发课程包括一个使用数组的计算器应用程序。如果您想比较差异,可以在此处下载源代码:

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

它也有一个 Fraction 对象,但不使用该*10方法。

于 2012-07-01T04:29:23.067 回答