gpt4 book ai didi

java - 我的代码以某种方式返回 null,我不知道为什么

转载 作者:行者123 更新时间:2023-12-02 06:24:58 24 4
gpt4 key购买 nike

我正在创建一个迷宫生成器作为一个有趣的副项目,但我遇到了一个问题

newTile.getxCoord()

正在创建一个空指针异常,我不知道为什么。我检查以确保我的“图 block ”的创建使用的是我的板范围内存在的正值。

这里是整个方法和代码的链接 https://github.com/Dibes/Maze/blob/master/src/MazeCreation/DepthFirst.java#L30 .

快速浏览一下我对此代码的思考过程

// Set the starting tile as visited and current
TileGenerator.setTileVisible(Maze.startingTile.getxCoord(), Maze.startingTile.getyCoord(), 0);
// Set the starting tile as the current tile
TileGenerator.setTileCurrent(Maze.startingTile.getxCoord(), Maze.startingTile.getyCoord(), 1);
// Set the last tile as the starting tile
Tile lastTile = Maze.startingTile;
// Grab a new tile that is within the bounds of the map and is greater than 0
Tile newTile = TileGenerator.getTile(Utility.getHorizNext(lastTile.getxCoord(), -1, 1), Utility.getVertNext(lastTile.getyCoord(), -1, 1));
while(!TileGenerator.isTilesVisited()) {
// Debug testing
if (newTile.getxCoord() < 0 || newTile.getyCoord() < 0) {
System.out.println(newTile.getxCoord() + " " + newTile.getyCoord());
}
// Set the current tile visible
TileGenerator.setTileVisible(newTile.getxCoord(), newTile.getyCoord(), 0);
// Set the last tile marked as not current
TileGenerator.setTileCurrent(lastTile.getxCoord(), lastTile.getyCoord(), 0);
// Set the newly found tile marked as current (shows up as red on the board)
TileGenerator.setTileCurrent(newTile.getxCoord(), newTile.getyCoord(), 1);
// Grab new tile
lastTile = newTile;
newTile = TileGenerator.getTile(Utility.getHorizNext(lastTile.getxCoord(), -1, 1), Utility.getVertNext(lastTile.getyCoord(), -1, 1));
// A sleep in the thread so i could see the generation slowly
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

抱歉,很简短,我只是不确定为什么它会创建一个空指针。

最佳答案

newTileTileGenerator.getTile() 创建 - 根据 TileGenerator 的源代码,此方法可以返回 null 实例:

https://github.com/Dibes/Maze/blob/master/src/Components/TileGenerator.java#L78

public static Tile getTile(int xCoord, int yCoord) {
for (int[] tile : mapTiles) {
if (tile[Tile.XCOORD] == xCoord && tile[Tile.YCOORD] == yCoord) {
return new Tile(tile[Tile.XCOORD], tile[Tile.YCOORD], tile[Tile.XLOC], tile[Tile.YLOC], tile[Tile.ISFILLED], tile[Tile.ISVISITED], tile[Tile.ISCURRENT]);
}
}
return null;
}

您的代码会产生 NullPointerException,因为图 block 为 null - 您是否编写了涵盖您正在使用的情况的单元测试?

关于java - 我的代码以某种方式返回 null,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20622957/

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