0

我在编程方面是全新的,对于我第一次尝试应用程序,我正在编写一个基本的计算器。现在,我可以使用所有 4 个运算符(+、-、*、/)进行计算,但如果我再次按下等于,它就会崩溃。如何让它再次运行计算?例如,如果我输入“2+2=4”,我如何按等于第二次产生“6”,然后按第三次产生“8”等等......

这是我到目前为止所拥有的。我正在使用 switch 语句。

-(void)equalsButton:(id)sender

{
    second = [display.text integerValue];

    int result;

    NSArray* components;


    switch (operator)
    {
        case 0:
            components = [display.text componentsSeparatedByString:@"+"];
            first = [(NSString*)[components objectAtIndex:0] integerValue];
            second = [(NSString*)[components objectAtIndex:1] integerValue];
            result = first + second;
            break;
        case 1:
            components = [display.text componentsSeparatedByString:@"-"];
            first = [(NSString*)[components objectAtIndex:0] integerValue];
            second = [(NSString*)[components objectAtIndex:1] integerValue];
            result = first - second;
            break;
        case 2:
            components = [display.text componentsSeparatedByString:@"*"];
            first = [(NSString*)[components objectAtIndex:0] integerValue];
            second = [(NSString*)[components objectAtIndex:1] integerValue];
            result = first * second;
            break;
        case 3:
            components = [display.text componentsSeparatedByString:@"/"];
            first = [(NSString*)[components objectAtIndex:0] integerValue];
            second = [(NSString*)[components objectAtIndex:1] integerValue];
            result = first / second;
            break;
            }

    NSString * result1 = [NSString stringWithFormat:@"%i",result];
    display.text = result1;


}
4

1 回答 1

0

根据我收集的信息,您将该显示字段用作输入和输出。因此,当您第一次计算时,它现在只有结果,并且您丢失了运算符和第二个操作数,您正试图将其重新应用于结果。

所以我想说,如果您不想进行太多更改,您可以做的一件事是在每次计算结果时将运算符和第二个操作数存储在实例变量中。那样的话,如果你不能确定运营商,就意味着你要召回最后一个。所以本质上它会在你的 switch 语句中添加一个新的案例:

  • 用作display.text第一个操作数
  • 使用最后保存的运算符作为运算符
  • 使用最后保存的值作为第二个值

一旦达到这一点,您可能希望将冗余代码合并到一个evaluate:(int)operator a:(int)a b:(int)b方法或类似的东西中,这样您就不必为该新案例块中的所有运算符重复所有 eval 代码。

更新

我的工作计算机上没有 XCode,所以我不能尝试它,而且我没有你的其余代码,但试试这个。它应该适用于+。如果是这样,请为其他操作员复制。

-(void)equalsButton:(id)sender

{
int result;

NSArray* components;


switch (operator)
{
    case 0:
        components = [display.text componentsSeparatedByString:@"+"];
        first = [(NSString*)[components objectAtIndex:0] integerValue];
        if([components count] > 1) {
            second = [(NSString*)[components objectAtIndex:1] integerValue];
        }
        result = first + second;
        break;
    case 1:
        components = [display.text componentsSeparatedByString:@"-"];
        first = [(NSString*)[components objectAtIndex:0] integerValue];
        second = [(NSString*)[components objectAtIndex:1] integerValue];
        result = first - second;
        break;
    case 2:
        components = [display.text componentsSeparatedByString:@"*"];
        first = [(NSString*)[components objectAtIndex:0] integerValue];
        second = [(NSString*)[components objectAtIndex:1] integerValue];
        result = first * second;
        break;
    case 3:
        components = [display.text componentsSeparatedByString:@"/"];
        first = [(NSString*)[components objectAtIndex:0] integerValue];
        second = [(NSString*)[components objectAtIndex:1] integerValue];
        result = first / second;
        break;
        }

NSString * result1 = [NSString stringWithFormat:@"%i",result];
display.text = result1;


}
于 2012-08-07T19:37:03.447 回答