循环通过坐标

时间:2016-12-24 04:47:51

标签: java nullpointerexception minecraft bukkit

我正在开发一个SkyBlock,Bukkit java插件。

我试图这样做,它在x中创建了100个岛屿,然后一个到达100就增加了一个...

示例第一个岛将是(0,0),(1,0)...... 100个岛(0,1)

但是让我们说(3,0)被删除我想填写那个插槽

我尝试使用

    private static Vertex2 getNextGrid(int x){
    if(islands.isEmpty()) return new Vertex2(0, 0);
    ArrayList<Island> currentX = new ArrayList<>();
    for(Island island : islands){
        if(island.getGrid().getX() == x)
            currentX.add(island);
    }
    int z = 0;
    ArrayList<Integer> total = new ArrayList<>();
    for(int i = 0; i < 100; i++) total.add(i);

    for(Island island : currentX)
        total.remove(island.getGrid().getY());
    if(total.isEmpty())
        getNextGrid(x++);
    return new Vertex2(total.get(0), z);
}

但是我只是在上得到一个NullPointerException if(island.getGrid()。getX()== x)

1 个答案:

答案 0 :(得分:0)

由于您获得了空指针,这意味着您正在尝试在尚未设置的实例上调用方法(或访问字段) - 在您和&# #39; ve表示,有两个地方可能就是这种情况。

  1. island - 如果您的孤岛列表中有任何空值,则在到达时会导致空指针。由于我们不知道对片段之外的岛屿做了什么,情况可能就是这样。如果列表中允许空值,则在对其进行循环时对其进行验证。如果没有,请确保没有任何内容可以通过验证任何向其添加元素的方法来向列表添加null。如果某个岛为null,则getGrid()调用将失败并导致空指针。
  2. island.getGrid() - 如果island不为null,则网格很可能是。检查此方法返回的内容永远不会为null,或者在您使用它时对其进行验证。 假设getGrid()有一个支持字段,请确保该字段已初始化而不是刚刚声明,即已为其设置了值。 如果getGrid()返回null,则会导致getX()调用失败,并导致空指针。