gpt4 book ai didi

java - 尝试添加到本地初始化的数组列表时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 16:46:03 25 4
gpt4 key购买 nike

我创建了一个矩形数组来存储我的蛇体。在增长方法中,我创建一个本地 ArrayList 并初始化它,添加矩形数组的内容。然后我尝试向 ArrayList 添加新的矩形,但是此时,我收到 NullPointerException,并且我不确定为什么以及如何修复它。我尝试在谷歌和本网站上搜索它,但是我没有找到存在此问题的主题。

public class Snake extends GameObject
{
private Rectangle[] snake;
private int speed;

public Snake(int locX, int locY, int width, int height, int speed, ID id)
{
super(locX, locY, width, height, id);
snake = new Rectangle[3];
snake[0] = new Rectangle(locX, locY, width, height);
this.speed = speed;
grow();
}

public void render(Graphics g)
{
g.setColor(Color.GREEN);
drawSnake(g);
}

public Rectangle getBounds()
{
return new Rectangle(locX, locY, width, height);
}

private void drawSnake(Graphics g)
{
for(int i = 0; i < snake.length - 1; i++)
{
g.fillRect(locX, locY, width, height);
}
}

private void grow()
{
ArrayList<Rectangle> tempBody = new ArrayList<Rectangle>(Arrays.asList(snake));

tempBody.add(new Rectangle(snake[snake.length - 1].x, snake[snake.length - 1].y, width, height));

snake = tempBody.toArray(snake);
}
}

最佳答案

原因如下:

  • snake = new Rectangle[3]; :您为 3 Rectangle 创建一个数组
    1. 所以snake[null, null, null]
  • snake[0] = new Rectangle(locX, locY, width, height); :用一个对象填充第一个框

  • 所以snake[rect, null, null]
  • snake[snake.length - 1].x你想得到Rectangle最后一个框的,但请参阅2.:此框包含 null ,所以你打电话 null.x -> NPE

<小时/>

要改进,您可以添加属性 size ,当您想要grow()时您将在这个地方添加一个矩形,例如:

private void grow(){
ArrayList<Rectangle> tempBody = new ArrayList<Rectangle>(Arrays.asList(snake));

tempBody.add(new Rectangle(snake[size].x,
snake[size].y, width, height));

snake = tempBody.toArray(snake);
size++;
}

# 但真正更好的方法是使用 List<Rectangle> snake并且永远不要使用数组(如果可能),因为您需要一个大小可变的元素,所以 List很完美

我建议 Rectangle您添加不会有相同的位置吗?但在这里你必须做出决定

关于java - 尝试添加到本地初始化的数组列表时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377959/

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