Java Android arraylist重置索引
我正在尝试使用加速度计的z轴创建一个限制为四个元素的Java Android arraylist重置索引,java,android,Java,Android,我正在尝试使用加速度计的z轴创建一个限制为四个元素的阵列列表 记录第四个元素时,它会将数组的索引重置为零并继续数组 示例:数组=1,2,3,4 然后会出现一个新值,即5 然后数组=5,1,2,3 ArrayList<Float> z = new ArrayList<>(); @Override public void onSensorChanged(SensorEvent Event) { z.add(Event.values[2]); if (z.s
阵列列表
记录第四个元素时,它会将数组的索引重置为零并继续数组
示例:数组=1,2,3,4
然后会出现一个新值,即5
然后数组=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] );
}
}
ArrayList z=new ArrayList();
@凌驾
传感器更改时的公共无效(传感器事件){
z、 添加(事件值[2]);
如果(z.size()>3){
z、 移除(3);
z、 添加(0,事件值[2]);
}
}
如果只需要4个值,只需使用数组即可
还要保留添加到的索引,并使用模来重置它
float[] events = new float[4];
int eventIndex;
@Override
public void onSensorChanged(SensorEvent Event) {
events[ (++eventIndex) % events.length ] = Event.values[2];
}
或者,如果您想要创建一个“堆栈”(或者实际上是一个队列)来推送末端,那么您可能应该根据大小限制添加数据的位置,并且在达到该大小时不要再添加两次元素
@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);
}
}
@覆盖
传感器更改时的公共无效(传感器事件){
浮动值=事件值[2];
如果(z.size()我已经根据您的要求编写了一个方法来实现输入
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);
}
}
publicstaticvoidaddtolist(字符串s){
如果(list.size()>=5){
列表。添加(0,s);
对于(int i=list.size()-1;i>4;i--){
列表。删除(i);
} }
else if(list.size()也许你应该使用固定大小的数组,如果在代码中找到它让你头疼的话,你应该先把逻辑写在纸上。这闻起来像是家庭作业……谢谢你的帮助,但它不起作用,我需要它,所以当事件发生时,数据会存储在索引0中,其余的数据会右移。谢谢你的帮助帮助,我对你的答案投了赞成票,虽然我不确定它是否注册,因为我最近加入了。你不能用少于10个代表的投票。如果答案解决了你的问题,你可以使用复选标记,否则,你可以评论说这仍然不是你想要的。