Java数组向第一个添加新值并删除最后一个

标签 java arrays push

我正在尝试更新我的数组,因此如果您向第一个数组 tail[0] 添加一些内容,整个数组都会更新并将 1 移动到下一个,最后最后一个 tail[49] 将被删除。

因此,如果我向 tail[0] 添加一个值,我希望 tail[1] 获得旧的 tail[0] 值,tail[2] 获得旧的 tail[1] 值,tail[3] 获得旧的 tail[2] 值。旧 tail[3] 的值将被删除。这就像每次删除最后一个值的数组推送。

到目前为止我已经试过了,但我无法让它工作。

创建数组:

Tail[] tail = new Tail[50];

给整个数组一个值:

for(int i = 0; i < tail.length; i++){
    tail[i] = new Tail(0,0);
}

更新数组,使其添加一个新值并删除最后一个值。

public void tail(){

    tail[0] = new Tail(ball.getX(),ball.getY());

    for(int i = 1; i < tail.length; i++){
        tail[i] = new Tail(tail[i-1].x,tail[i-1].x);
    }
}

尾部类:

public class Tail {

    public float x;
    public float y;

    ShapeRenderer shapeRenderer;
    SpriteBatch batch;

    public boolean active = false;

    public Tail(float x, float y){
        shapeRenderer = new ShapeRenderer();
        batch = new SpriteBatch();

        this.x = x;
        this.y = y;

          batch.begin();
          shapeRenderer.begin(ShapeType.Filled);
          shapeRenderer.circle(x, y, 16);
          shapeRenderer.setColor(Color.BLACK);
          shapeRenderer.end();
          batch.end();  

        Gdx.app.log("TailX"+x, "TailY"+y);
    }

}

tail void 最终导致我的游戏崩溃什么是解决这个问题的最佳方法?

最佳答案

首先,当您尝试移动尾部时,您似乎正在创建一个新的尾部。有什么理由吗?您应该能够通过移动引用来重复使用相同的实例。

此外,在您的代码中,您试图在位置 0 插入新元素,移动所有其他元素之前。您需要以相反的方式进行操作,以确保只删除最后一项。应该可以用这样的东西:

for(int i = tail.length - 2; i >= 0; i--){
    tail[i + 1] = tail[i];
}
tail[0] = new Tail(ball.getX(),ball.getY());

这样你只是移动 Tail 实例,而不是创建新实例。除非我误解了什么,否则这应该有效。

听起来您确实可以从使用队列中获益。队列旨在在一端插入元素并从另一端检索项目。

如果您使用的是 LinkedList(它实现了 Deque 接口(interface))而不是数组,您应该可以这样做:

tail.addFirst(new Tail(ball.getX(), ball.getY()));
tail.removeLast();

关于Java数组向第一个添加新值并删除最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28212228/

相关文章:

Java TreeSet不添加对象

php - 错误还是黑客? $全局

mysql - 如何将 NodeJs 响应转换为嵌套的 json 响应

java - ArrayList提前调用clear()?

java - 如何查询 mysql 数据库中的特定实体

c - 在嵌入式 C 中查找最接近给定值的多维数组中的值

javascript - 为什么这个简单的基于数组的事件发射器顺序敏感?

ios - 设备 token NULL

android - 使用自定义键盘时将 View 推到上方

java - 使用 maven jetty 插件生成带有嵌入式 Jetty 的 jar?