2016-12-21 4 views
-1

Ich versuche, eine ArrayList mit der Z-Achse aus dem Beschleunigungsmesser mit einer Grenze von vier Elementen zu erstellen.Android Arraylist Reset-Index

Wenn das vierte Element aufgezeichnet wird, setzt es den Index des Arrays auf Null zurück und setzt das Array fort.

Beispiel: Array = 1, 2, 3, 4

dann ein neuer Wert kommt, in der 5

dann Array = 5, 1, 2, 3

ArrayList<Float> z = new ArrayList<>(); 

@Override 
public void onSensorChanged(SensorEvent Event) { 
    z.add(Event.values[2]); 

    if (z.size() > 3) { 
     z.remove(3); 
     z.add(0, Event.values[2]); 
    } 
} 
+0

Vielleicht sollten Sie feste Größe Array stattdessen verwenden und schreiben nur die Logik in dem Papier zuerst, wenn Bezifferung im Code heraus Ihnen Kopfschmerzen geben. Das riecht nach Hausaufgaben ... – vilpe89

Antwort

0

Wenn Sie wollen nur 4 Werte nur ein Array verwenden.

auch den Index halten, die hinzugefügt wird und verwenden Modulo es

float[] events = new float[4]; 
int eventIndex; 

@Override 
public void onSensorChanged(SensorEvent Event) { 
    events[ (++eventIndex) % events.length ] = Event.values[2]; 
} 

oder zurückgesetzt werden, wenn Sie einen „Stapel“ (oder eigentlich eine Warteschlange), die das Ende schiebt zu schaffen, dann sollten Sie wahrscheinlich einschränken, wo Sie die Daten basierend auf der Größe hinzufügen, und das Element nicht zweimal hinzufügen, wenn Sie diese Größe erreichen.

@Override 
public void onSensorChanged(SensorEvent Event) { 
    float value = Event.values[2]; 
    if (z.size() <= 3) { 
     z.add(value); 
    } else { 
     z.add(0, value); 
     z.remove(z.size() - 1); 
    } 
} 
+0

danke für deine Hilfe, aber es hat nicht funktioniert, ich brauche es also, wenn das Ereignis passiert, dann werden die Daten im Index Null gespeichert und der Rest der Daten wird nach rechts verschoben. – FrankW

+0

Gotcha. Versuchen Sie die Bearbeitung –

+0

danke für Ihre Hilfe, ich habe für Ihre Antwort gewählt, obwohl ich nicht sicher bin, ob es registriert, weil ich vor kurzem beigetreten ist. – FrankW

0

Ich habe eine Methode geschrieben, um die Eingabe gemäß Ihrer Anforderung zu erreichen.

public static void addToList(String s){ 
    if(list.size()>=5){ 
     list.add(0,s); 
     for (int i = list.size() - 1; i > 4; i--) { 
      list.remove(i); 
     } } 
    else if(list.size()<=4){ 
     list.add(s); 
    } 
    } 

enter image description here