【问题标题】:If and Else if StatementIf 和 Else if 语句
【发布时间】:2012-07-24 03:54:17
【问题描述】:

我想知道为什么这段代码不起作用。这是一个计算器:) 我需要计算器识别符号(香蕉)并根据用户输入的内容使用 +,-。

NSString *list = [Sum_TextField text]; 
NSArray *listItemsArray = [list componentsSeparatedByString:@" "];
int batman = [[listItemsArray objectAtIndex: 0] intValue]; 
NSString *banana = [listItemsArray objectAtIndex: 1];
int joker = [[listItemsArray objectAtIndex: 2] intValue];
{

    Calculator* calc = [[Calculator alloc] init];
    [calc setNum1:batman];
    [calc setNum2:joker];
    if ((banana = @"-"))
    {
        [calc minus];
    }
    else if ((banana = @"+"))
    {
        [calc add];
    } 

    [Answer_TextField setText:[NSString stringWithFormat:@"%d", [calc answer]]];  
}
}

【问题讨论】:

  • 至少你需要使用== 来测试相等性。
  • 你需要 isEquals (或类似的东西)函数。您目前正在将 @"+" 分配给香蕉。
  • 请注意,编译器会警告您使用=,但您输入了一个双括号,明确关闭了编译器警告。以这种方式关闭编译器警告时要非常小心。

标签: objective-c ios calculator if-statement


【解决方案1】:

判断NSString是否相等,必须使用[@"AAAA" isEqualToString : @"BBBB"]。你不能使用==,因为它们不在同一个内存地址。

【讨论】:

  • @DavidMurray 你不能像这样编辑它“[@"AAAA" isEqualToString : @"BBBB"]"。因为我的 AAAA 和 BBBB 是 NSString *.
【解决方案2】:

你想这样做:

 if ([banana isEqualToString:@"-"])
 {
     [calc minus];
 }
 else if ([banana isEqualToString:@"+"])
 {
     [calc add];
 } 

【讨论】:

  • 我真的很爱你,只是说
  • 嘿,为什么? :P 你认识我还是你只是喜欢我的回答? :P
  • 我喜欢你的回答,效果很好:),而且回答也很快。非常感谢
  • 不客气。 :) 也不要忘记将其标记为正确答案 ;)
【解决方案3】:

= 是赋值。这与比较完全无关。

== 正在比较两个表达式,看看它们是否相等。这可用于比较整型(如enumcharintshortlonglong longBOOL)或引用(检查是否有 2 个指针指向同一个对象)。请注意,2 个指针可以指向内部包含相同值的 2 个不同对象,但 == 会将它们比较为不同。 (floatdouble 等浮点类型需要稍微不同的方法来比较相等性。

作为一种防止=== 之间混淆的方法,对于== 的相等性测试,有些人将值放在左侧,将变量放在右侧(例如2 == variable )。如果他们碰巧把== 打错了=,编译器会报错。

如果要比较2个对象的内容,本例为NSString,则应搜索isEquals类型的函数。对于NSString,如果要比较两个字符串的内容是否相同,则应使用isEqualToString

【讨论】: