2017-02-04 54 views
0

我正在开发一个应用程序,我需要一个计数器。我在if条款中有这个计数器,每当这个模块被触发时,它应该加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次。改用if来代替。 –

回答

1

我猜想reps变量是你的,因为这码值计数器总是reps2值,这种行为与你的话相符:

虽然测试这当前的数字也在变化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函数为真时,只要函数为真就计数,如果声明为真,我应该如何设置相同的功能以获得“一次计数”而不是获得计数。如果你知道我的意思..我尝试了一段时间的循环,但没有得到我想要的地方.. – Jack

+0

“我应该如何设置相同的功能以达到”一次计数“的目的,而不是只要声明是真实的“抱歉,我不确定要理解。你能重新配制吗? – davidxxx