2017-02-04 9 views
0

카운터가 필요한 앱을 개발하고 있습니다. 이 카운터는 if - 절 내에 있으며이 블록이 트리거 될 때마다 현재 숫자에 1을 더해야합니다. 따라서 현재 숫자가 1이고 if 블록이 트리거되면 현재 숫자는 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 변수가이 코드 값으로 당신의 카운터 2 값이 항상 reps 입니다 가정이 동작은 당신의 말과 일치합니다

동안 테스트 이것은 현재 숫자가 너무 많이 변하고 있지만 숫자는 입니다. 나는 틀린 것을 썼지 만 어떤 것처럼 보이지는 않는다는 것을 확신한다. 무엇을 발견한다.

여기서는 reps을 인스턴스 변수가 아닌 로컬 변수로 선언합니다.
따라서 방법의 각각의 호출에, reps 덮어된다

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

reps == 2currentHigh > 10를 가정하여 각각의 호출 후에.

reps을 메서드 필드 외부의 인스턴스 필드로 선언하면 문제가 해결됩니다.

+1

고마워, 나는 그걸 생각하지 않았다.하지만 너는 100 % 맞다! – Jack

+0

당신이이 스레드에 이미 있기 때문에 또 다른 질문입니다. 이 함수를 사용하고 If 함수가 true이면 함수가 true 인 동안 함수가 true로 계산됩니다. 진술이 참일 경우 카운트를 얻는 대신 "한 카운트"를 얻기 위해 동일한 기능을 어떻게 설정해야합니까? 내가 무슨 뜻인지 안다면 .. 나는 잠시 동안 루프를 시도했지만 내가 원하는 곳으로 가지 못하게했다. " – Jack

+0

"얼마나 오랫동안 카운트를 얻기보다는 "하나의 카운트"를 얻기 위해 동일한 기능을 어떻게 설정해야합니까? 진술은 사실입니다. "미안하지만 나는 이해할 수 없다. 제발 다시 주시겠습니까? – davidxxx

관련 문제