2017-02-04 6 views
0

Я разрабатываю приложение, в котором мне нужен счетчик. У меня этот счетчик в if -clause, и каждый раз, когда этот блок запускается, он должен добавить 1 (один) к текущему номеру. Поэтому, если текущее число равно: 1, а if-block запускается, текущее число должно быть 2, затем 3 для следующего и так далее ... как всегда. При тестировании этого текущего числа меняется на 2, но больше не будет. Я уверен, что написал что-то неправильно, но не могу найти что-то.Функция подсчета не завершена

код ниже:

@Override 
public void onSensorChanged(SensorEvent event) { 
    float presure = event.values[0]; 
    altitude = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE, presure); 
    System.out.println("altitude => " + altitude); 
    Log.d("SENSOR alt: ", String.valueOf(altitude)); 
    int currentHigh = (int) altitude; 
    int reps = 1; 
    if (currentHigh > 44){ 
     reps = reps+1; 
     mTextView.setText(String.valueOf(reps)); 
    } 
    while(reps == 5){ 
     Vibrator vibrate = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
     vibrate.vibrate(500); 
     break; 
    } 
} 
+2

Опубликовать весь метод! – OBX

+0

... и стремиться форматировать код лучше, включая использование, но не чрезмерное использование пустых строк и пробелов. –

+1

Кроме того, в чем смысл времени? Он будет выполняться либо 0, либо 1 раз, в зависимости от перерыва. Используйте вместо этого. –

ответ

1

Я полагаю, что переменная reps Ваш счетчик в этом коде значений всегда reps со значением 2 и это поведение соответствует с вашим замечанием:

Во время тестирования это текущее число меняется слишком 2, но оно не будет считать больше. Я уверен, что написал что-то не так, но не могу показать .

Здесь вы указываете reps как локальную переменную, а не как поле экземпляра.
Так что при каждом вызове метода, reps переписывается:

int reps = 1; 
if (currentHigh > 10) { 
    reps = reps+1; 
    mTextView.setText(String.valueOf(reps)); 
} 

reps == 2 после каждого вызова, предположив currentHigh > 10.

Просто объявите reps как поле экземпляра (вне метода), и оно должно решить вашу проблему.

+1

Спасибо, я не думал об этом .. Но ты на 100% прав сэр! – Jack

+0

Другой вопрос, так как вы уже в этой теме. Когда я использую эту функцию, и функция If истинна, она рассчитывает до тех пор, пока функция истинна, как мне настроить одну и ту же функциональность с целью получения «одного счета», а не получения отсчетов, пока утверждение истинно. если вы знаете, что я имею в виду .. Я пробовал цикл while, но не получил меня там, где хотел. – Jack

+0

«Как мне настроить ту же функциональность с целью получения« одного счета », а не получать счета, пока утверждение верно »Извините, я не уверен, что понимаю. Можете ли вы переформулировать, пожалуйста? – davidxxx

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

  • Нет связанных вопросов^_^