gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:13:05 24 4
gpt4 key购买 nike

我正在尝试更新我的数组,因此如果您向第一个数组 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com