有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从ArrayList更改对象中的变量<Object>

我目前正在尝试为基于网格的游戏创建一种基于a*方法算法的寻路方法。但是,我在操作PathNode类实例中的变量时遇到了一个基本问题:

public void AStarPathfinding(PathNode snakeHead, PathNode foodLocation) {

    System.out.println(food.xFood);
    System.out.println(food.yFood);

        openNodes.add(snakeHead);

        int xHead = (int) snakeSegments.get(0);
        int yHead = (int) snakeSegments.get(1);


        snakeHead.xCoordinate = (int) xHead;
        snakeHead.yCoordinate = (int) yHead;
        foodLocation.xCoordinate = (int) food.xFood;
        foodLocation.yCoordinate = (int) food.yFood;

但是,我收到空点异常错误:

Exception in thread "Thread-2" java.lang.NullPointerException
    at ArtificialSnake.AStarPathfinding(ArtificialSnake.java:136)

这是哪一行:

snakeHead.xCoordinate = (int) xHead;

想法是将startNode(蛇头)设置为当前蛇头的位置。。。。但是如上所述,我无法确定如何修改PathNode类的snakeHead实例中的xCoordinate变量

看另一个问题:Edit variables from object in ArrayList?

它建议使用setter,我已经厌倦了这一点,但是仍然会出现空点异常错误

注意:Thread2是独立于Swing U.I的gameLoop线程,这个寻路方法所在的类是同一线程的一部分

我错过了什么


共 (1) 个答案

  1. # 1 楼答案

    如果在snakeHead.xCoordinate = (int) xHead;行上收到空指针错误,这意味着snakeHeadnull,请检查null是否未传递到方法中。 如果您想知道为什么空指针错误不会在openNodes.add(snakeHead);发生,这是因为null可以添加到一些java集合中,那么它们都不会尝试对您传递给它们的内容执行任何操作(执行操作的可能会调用hashCode()equals()compare(),具体取决于集合类型及其实现)

    当您在方法之间传递对象并将其传递到集合/数组中时,您正在创建浅层副本(您正在传递对对象的引用),因此您对对象所做的任何更改都将在传递引用的每个其他位置可见

    对对象进行深度复制(以便更改不会影响对该对象的其他引用)的唯一方法是复制该对象的每个成员变量(某些类可能提供执行此操作的克隆方法)