【问题标题】:Don't work subtraction/multiplication/division but work addition不工作减法/乘法/除法,但工作加法
【发布时间】:2012-08-04 15:27:43
【问题描述】:

你好! 在我的计算器程序中,不使用减法/乘法/除法方法,而是使用加法方法。

加法:

-(IBAction) clickPlus
{
    [self processOp: '+'];
}

减法:

-(IBAction) clickMinus
{
    [self processOp: '-'];
}

处理方法:

-(void) processOp: (char) theOp
{
    NSString *opStr;

    op = theOp;

    switch (theOp) {
        case '+':
            opStr = @" + ";
            break;
        case '-':
            opStr = @" – ";
            break;
        case '*':
            opStr = @" * ";
            break;
        case '/':
            opStr = @" ÷ ";
            break;
    }

    [self storeFracPart];
    firstOperand = NO;
    isNumerator = YES;

    [displayString appendString: opStr];
    display.text = displayString;
}

在该方法中使用了“op”变量:“clickEquals

-(IBAction) clickEquals
{
    if ( firstOperand == NO )
    {
        [self storeFracPart];
        [myCalculator performOperation: op];

        [displayString appendString: @" = "];
        [displayString appendString: [myCalculator.accumulator
                                      convertToString]];
        display.text = displayString;

        currentNumber = 0;
        isNumerator = YES;
        firstOperand = YES;
        [displayString setString: @""];
    }
}

你认为'op'为什么会收集垃圾?

如果您需要更多代码,请告诉我。

【问题讨论】:

  • 假设op 是一个实例变量或属性,它看起来会得到垃圾值,因为你在进行任何分配之前将opStr 复制到其中。如果您稍后使用op,结果将是随机的。
  • 您是否在各种 clickMinusclickMultiplyclickDivide(或其他任何名称)方法中放置断点或 NSLog 语句,以确保它们正确连接在界面生成器中?
  • 当你说它不起作用时,它什么也没做,或者它做了什么,但只是做错了?如果是后者,它在做什么?究竟你看到了什么行为,你想看到什么行为?
  • 在调试器中运行它。在processOp: 的第一行设置断点并单步执行。
  • 我更新了我的问题。请检查一下。

标签: objective-c ios xcode ios5 ios-simulator


【解决方案1】:

clickEquals 中的op 是什么?它应该是一个类 ivar 吗?如果是这样,processOp 是错误的,因为它使用了一个名为 op 的局部变量,因此永远不会分配 ivar。

你应该学会自己调试这类问题。这不是太难。如果您在调试器中逐行执行代码并观察发生了什么变化,您应该能够发现此类问题。

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2023-04-01
    • 1970-01-01
    • 2011-09-06
    • 2014-10-03
    相关资源
    最近更新 更多