2013-04-09 3 views
1

Я пытаюсь создать простое приложение для Android в Java с помощью следующего кода:Java: Если условие только проверяется один раз

public class MainActivity extends Activity { 

    //Declare variables 
    boolean first = true; 
    boolean secondorbefore = true; 

     Button ClickMe = (Button) findViewById(R.id.clicker); 

     ClickMe.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //Check to see if this is the first click 
       if (first = true) { 
       first = false; 
       // DO STUFF FOR FIRST CLICK 
       } else if ((secondorbefore = true) { 
        //so this is the second click? 
        secondorbefore = false; 
       // DO STUFF FOR SECOND CLICK     
        } else { 
        //OK it's the third click or later 
       // DO STUFF FOR THIRD OR LATER CLICKS 
       } 
      } 
     }); 


    } 

Однако, это только кажется, пробежать, если условие один раз. Он выполняет код в первом экземпляре, включая установку переменной secondorbefore в false, но последующие клики, похоже, ничего не делают. Код OnClickListener выполняется в последующих кликах, но он просто не работает через условный оператор.

Новое на Java, поэтому я, вероятно, совершу очень очевидную ошибку.

Большое спасибо заранее.

+1

попробовать, если (первый == верно), и если ((secondorbefore == TRUE) –

+0

@ZouZou, это должно быть ответом :) –

ответ

6

Подсказка:

  • = является оператором присваивания.
  • == - оператор равенства.
  • Что происходит, когда вы используете оператор присваивания в выражении if?
  • Что происходит, когда вы используете expressionoperator в выражении if?
+0

ответ на # 3 _should_ быть предупреждение компилятора. .. – Alnitak

+0

@ Алнитак не в случае булевых, хотя :) – PermGenError

+0

даже тогда, ИМХО. Общий намек на компилятор, чтобы сказать, что вы знаете, что вы делаете на других языках, - это обернуть присвоение в другую пару фигурных скобок, то есть 'if ((var = true)). – Alnitak

2

изменить это if (first = true) к { if (first == true) {

Здесь = оператор присваивания .Но == это оператор равенства.

3

Если вы используете = вместо ==, вы назначаете значение вместо сравнения. И возвращение обряда - это значение, которое назначается. Так что в этом случае это будет true Итак:

if(bool = true){...} 

и

if(true){...} 

эквивалентны в сравнении. Разница в том, что bool будет нести новое значение из этого утверждения.

1

При проверке, если переменная равно что-то другое всегда использовать ==

т.е.

public void onClick(View v) { 
    //Check to see if this is the first click 
    if (first == true) { 
     first = false; 
     // DO STUFF FOR FIRST CLICK 
    } else if ((secondorbefore == true) { 
     //so this is the second click? 
     secondorbefore = false; 
     // DO STUFF FOR SECOND CLICK     
    } else { 
     //OK it's the third click or later 
     // DO STUFF FOR THIRD OR LATER CLICKS 
    } 
} 
3

в if условиях вы всегда должны использовать оператор == для сравнения и не сингл =. Поэтому было бы:

if (first == true) { // this is comparison 
     first = false; // this is assignment 
     // DO STUFF FOR FIRST CLICK 
} else if ((secondorbefore == true) { 
     //so this is the second click? 
     secondorbefore = false; 
     // DO STUFF FOR SECOND CLICK     
} else { 
     //OK it's the third click or later 
     // DO STUFF FOR THIRD OR LATER CLICKS 
} 
Смежные вопросы