Java未初始化类,返回空异常错误

Java未初始化类,返回空异常错误,java,Java,在函数中使用类连接时出现令人沮丧的null异常错误。该类应该初始化,所以这不应该是一个问题。帮助 class RobotData { class Junction { public int juncX; public int juncY; public int arrivalHeading; } private static int maxJunctions = 10000; //Max junctions likely to occur private static

在函数中使用类连接时出现令人沮丧的null异常错误。该类应该初始化,所以这不应该是一个问题。帮助

class RobotData {
class Junction {
    public int juncX;
    public int juncY;
    public int arrivalHeading;
}

private static int maxJunctions = 10000; //Max junctions likely to occur
private static int junctionCounter;
private static Junction[] junction;

RobotData() {
    junctionCounter = 0;
    junction = new Junction[maxJunctions];
}

public void resetJunctionCounter() { junctionCounter = 0; }

public void recordJunction(IRobot robot) {
    junction[junctionCounter].juncX = robot.getLocation().x;
    junction[junctionCounter].juncY = robot.getLocation().y;
    junction[junctionCounter].arrivalHeading = robot.getHeading();
    junctionCounter++;
}

public void  printJunction() {
    System.out.println(junction[junctionCounter].juncX);
    System.out.println(junction[junctionCounter].juncY);
    System.out.println(junction[junctionCounter].arrivalHeading);
}
}

RobotData类被正确初始化,但是当调用函数时,我得到一个null错误,表明连接[junctionCounter]尚未初始化。不确定为什么(显然),因为当RobotData被激活时,它应该被初始化

写这行时:

junction = new Junction[maxJunctions];
创建一个maxJunctions引用数组,引用堆上的
Junction
实例。在通过调用
new
将它们指向堆上的对象之前,它们都是空的

还有一个想法:

public class Junction {
    public final int juncX;
    public final int juncY;
    public final int arrivalHeading;

    public String toString() {
        return String.format("x = %d y = %d arrivalHeader = %d", juncX, juncY, arrivalHeading);
    }
}

public class RobotData {

    private List<Junction> junctions;

    RobotData() {
        this.junctions = new ArrayList<Junction>();
    }

    public void recordJunction(IRobot robot) {
        Junction junction = new Junction();    
        junction.juncX = robot.getLocation().x;
        junction.juncY = robot.getLocation().y;
        junction.arrivalHeading = robot.getHeading();
        junctions.add(junction);
    }
}
公共类连接{
公共最后关卡;
公共最后关头;
公共最终到达标题;
公共字符串toString(){
返回String.format(“x=%d y=%d arrivalHeader=%d”,juncX,juncY,arrivalHeading);
}
}
公共类机器人数据{
私人名单路口;
机器人数据(){
this.junctions=新的ArrayList();
}
公共连接(IRobot机器人){
连接=新连接();
junction.juncX=robot.getLocation().x;
junction.juncY=robot.getLocation().y;
junction.arrivalHeading=robot.getHeading();
连接。添加(连接);
}
}

堆栈跟踪在哪里?使用调试器。发生这种情况时,
junctionCounter
的值是多少?另外,如果变量在构造函数中被“初始化”,为什么变量是静态的?不确定,但我认为这是因为类只在程序开始时构造的,但它的父类不断被调用,每次调用时都会重置值。在规范中,它们必须是静态的,所以…我不完全理解。因为这是一个数组,它声明了数组,但没有初始化每个元素?有没有一种不循环的方法可以做到这一点?请阅读数组的Java简介文本。这应该包括在内。我很好奇:你认为连接应该初始化为什么?应该怎么做?很抱歉,我一直在尝试阅读,从我在互联网上可以找到的内容,例如oops并不意味着挂起,我想有效地转到junction[0]。juncX并获取第一个记录的junction juncX变量,并将其设置为某个值。我很确定我是用VB做的,但我对java完全陌生。从你在这里所做的,我得到的想法是,你不能一次初始化每个数组元素,你必须手动完成它?实际上,为什么我需要一次完成它们,我可以像你一样在创建一个新的数组元素时完成它。。。hmmYou没有记录一个连接实例,直到你做了我所做的。看起来好多了。