2017-02-04 2 views
0

Ich entwickle eine App, in der ich einen Zähler brauche. Ich habe diesen Zähler innerhalb einer if -Klausel und jedes Mal, wenn dieser Block ausgelöst wird, sollte 1 (eins) zur aktuellen Nummer hinzugefügt werden. Wenn also die aktuelle Nummer: 1 ist und der if-Block ausgelöst wird, sollte die aktuelle Nummer 2 sein, dann 3 für die nächste und so weiter ... wie auch immer. Während dies getestet wird, ändert sich die aktuelle Anzahl auf 2, aber es zählt nicht mehr. Ich bin sicher, ich habe etwas falsch geschrieben, aber ich finde nicht, was zu finden ist.Zählfunktion nicht vollständig

-Code unten:

@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

post die gesamte Methode! – OBX

+0

... und bemühen Sie sich, Ihren Code besser zu formatieren, einschließlich der Verwendung, aber nicht übermäßiger Verwendung von Leerzeilen und Leerzeichen. –

+1

Auch, was ist der Sinn der Zeit dort? Es wird entweder 0 oder 1 mal ausgeführt, basierend auf der Pause. Verwenden Sie stattdessen ein if. –

Antwort

1

Ich nehme an, die reps Variable Ihre Zähler wie diese Codewerte ist immer reps mit dem 2 Wert und dieses Verhalten übereinstimmt mit der Bemerkung:

Während des Tests dies ändert sich die aktuelle Zahl zu 2 aber es wird nicht mehr zählen. Ich bin sicher, ich habe etwas falsch geschrieben, aber kann nicht scheinen was zu finden.

Hier deklarieren Sie reps als lokale Variable und nicht als Instanzfeld.
So bei jedem Aufruf des Verfahrens wird reps überschrieben:

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

reps == 2 nach jedem Aufruf von currentHigh > 10 annimmt.

Erklären Sie einfach reps als Instanz Feld (außerhalb der Methode) und es sollte Ihr Problem lösen.

+1

Danke, daran habe ich nicht gedacht .. Aber Sie sind 100% richtig, Sir! – Jack

+0

Eine andere Frage, da Sie bereits in diesem Thread sind. Wenn ich diese Funktion verwende und die If-Funktion wahr ist, zählt sie solange, wie die Funktion wahr ist. Wie sollte ich die gleiche Funktionalität einrichten, um "eine Zählung" zu erhalten, anstatt Zählungen zu erhalten, solange die Aussage wahr ist. Wenn Sie wissen, was ich meine .. Ich versuchte eine Weile Schleife, aber nicht bekommen, wo ich wollte .. – Jack

+0

"Wie sollte ich die gleiche Funktionalität für den Zweck" eine Zählung "anstatt zu bekommen zählt so lange wie die Aussage ist wahr "Entschuldigung, ich bin mir nicht sicher zu verstehen. Kannst du bitte umformulieren? – davidxxx