使用&& amp;同时比较多个值

时间:2012-02-15 00:58:31

标签: objective-c if-statement operators logic

我有这段代码:

if ((total == (total1 && total2 && total3)))
     {
        [scrollview.contentOffset = CGPointMake (0,0)];
     }

这就是按钮操作的内容:

if (sender.tag == 1)
    {
        total1 = 10;
    }

if (sender.tag == 2)
    {
        total2 = 20;
    }

if (sender.tag == 3)
    {
        total3 = 30;
    }

如果用户点击了三个正确的按钮(类似于密码密钥),我试图回到滚动视图的起始页面。

逻辑运算符&&在Objective-C中是否运行良好,我是否正确使用它?

4 个答案:

答案 0 :(得分:3)

if ((total == (total1 && total2 && total3)))

你做不到。你必须分别明确地比较它们。

if ((total == total1) && (total == total2) && (total == total3)))

但是这留下了total如何同时等于所有三个的问题。

答案 1 :(得分:1)

在您的代码中:

if ((total == (total1 && total2 && total3)))
{
   [scrollview.contentOffset = CGPointMake (0,0)];
}

评估if表达式时,首先评估(total1 && total2 && total3)。这可以是YESNO(如果您愿意,可以是真或假),或者(0或1)。

所以你的代码等同于以下内容:

BOOL allVariablesAreNotZero = total1 && total2 && total3;
if (total == allVariablesAreNotZero)
{
   [scrollview.contentOffset = CGPointMake (0,0)];
}
在更好地解释问题之后

编辑

按下时按钮执行以下操作:

- (void)buttonClicked:(id)sender
{
    UIButton *button = (UIButton *)sender;
    buttonsCombination = buttonsCombination | (1 << button.tag);
}

其中buttonsCombination是NSUInteger。然后使用以下测试来查看按下的按钮是否正确(我用三个按钮做这个,但你猜这个想法)

NSUInteger correctCombination = (1 << button1) | (1 << button2) | (1 << button3)
if (buttonsCombination == correctCombination) {
// The combination is correct
} else {
    // The combination is incorrect
}
buttonsCombination = 0;

最后,请注意这是有效的,因为NSUInteger中有足够的位用于30个按钮。 在这里,我使用了bitwise operators |<<

答案 2 :(得分:0)

您当前的代码基本上说的是“如果total为'true'且total1total2total3也都是非零或{{1} }}为零且totaltotal1total2也都为零,然后执行某些操作“。

你所拥有的total3正在进行逻辑/布尔比较。它将其参数视为&&true,如果两个参数在任何其他情况下都评估为falsetrue,则返回truefalse==的值与从total表达式获得的truefalse值进行比较。这可能不是你想要的。

似乎您想要说的是“如果&&等于totaltotal1total2的总和,那就做点什么” 。假设是这种情况,你会这样做:

total3

答案 3 :(得分:0)

尝试通过对其他两个答案的评论来确定你的意思“我尝试了但是当我开始运行应用程序时执行代码”也许这就是你想要实现的目标:

/* all in your button handler */
switch(sender.tag)
{
   case 1:
      total1 = 10;
      break;
   case 2:
      total2 = 20;
      break;
   case 3:
      total3 = 30;
      break;
   default:
      break; // other buttons are ignored
}
// check it latest click means the total is now correct
if((total1 + total2 + total3) == total)
{
   [scrollview.contentOffset = CGPointMake (0,0)];
}

因此,您可以通过按钮单击更新任何totalX,然后检查条件以重置滚动。