2012-02-15 3 views
0

У меня есть этот код:Сравнивая несколько значений одновременно, используя &&

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, и я использовал его правильно?

+1

Вам нужно объяснить, какие значения итоговые, total1, total2 и total3 могут иметь. –

+0

там вы идете. надеюсь, что это поможет найти ответ на мой вопрос. – SeongHo

+1

Сколько у вас кнопок? Что происходит, когда пользователь нажимает эти кнопки, кроме других? Что происходит, когда пользователь нажимает одну из этих кнопок два или более раза? – sch

ответ

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

Вы не можете этого сделать. Вы должны явно сравнивать их отдельно.

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

Но что оставляет вопрос о том, как total может быть равным для всех трех одновременно, хотя.

+0

Я попробовал, но он выполняет коды, когда я начал запускать приложение. – SeongHo

0

Что ваш текущий код, по сути говоря, это «если total является„истинным“и total1, total2 и total3 также все отличны от нуля, или если total равен нулю и total1, total2 и total3 также все равны нулю, то сделать что-то ».

&& у вас есть логическое/логическое сравнение. Он рассматривает свои аргументы как true или false и возвращает true, если оба аргумента оцениваются в true и false в любом другом случае. Значение == сравнивает значение total с значением true или false, которое было получено из ваших выражений &&. Это, вероятно, не то, что вы хотите здесь.

Похоже, вероятно, что вы хотите, чтобы сказать, «если total равно сумме total1, total2 и total3, а затем сделать что-то». Если предположить, что это так, то вы могли бы сделать:

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

Я попробовал, но он выполняет коды, когда я начал запускать приложение. – SeongHo

1

В коде:

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

Когда, если выражение вычисляется, (total1 && total2 && total3) оценивается первым. И это может быть либо YES, либо NO (true или false, если вы предпочитаете), или (0 или 1).

Так что ваш код эквивалентен следующему:

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

Edit после того, как вопрос был лучше объяснить

Сделайте ваши кнопки выполняют следующие действия при нажатии:

- (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| и <<.

+0

Могу я задать немой вопрос? что кнопка1, кнопка2 и кнопка3 ?? извините, я такой новичок. – SeongHo

+0

теги кнопок, которые образуют правильную комбинацию. – sch

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 нажатием кнопки, а затем проверяете условие сброса прокрутки.

+0

не работает тоже. – SeongHo

Смежные вопросы