Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组抛出异常_Arrays_Libgdx - Fatal编程技术网

Arrays 数组抛出异常

Arrays 数组抛出异常,arrays,libgdx,Arrays,Libgdx,我似乎无法指出这一点以及阵列未初始化的原因 基本上,我正在编写一个2d自上而下的宇宙飞船游戏,飞船将是完全可定制的。该船为某些模块(即武器、电子系统)分配了几个插槽,这些插槽存储在一个阵列中,如下所示: protected Array<Weapon> weaponMount; public void addModule(Module module, Ship currentShip) { currentShip.cpu -= module.getCpuUsage()

我似乎无法指出这一点以及阵列未初始化的原因

基本上,我正在编写一个2d自上而下的宇宙飞船游戏,飞船将是完全可定制的。该船为某些模块(即武器、电子系统)分配了几个插槽,这些插槽存储在一个阵列中,如下所示:

protected Array<Weapon> weaponMount;
    public void addModule(Module module, Ship currentShip) {
    currentShip.cpu -= module.getCpuUsage();
    currentShip.power -= module.getPowerUsage();
    if(module instanceof Engine){
        engine = (Engine) module;
    }else if(module instanceof Weapon){
        if(maxWeaponMounts == weaponMount.size){
            System.out.println("No more room for weapons!");
        }else{
        maxWeaponMounts += 1;
        weaponMount.add((Weapon)module);
        }
    }

}
我的编码不是很好,但是比两个月前好多了


有什么想法吗?

首先,你应该避免一个例子。就性能而言,这并不是什么大问题,但它总是指向您的通用体系结构的问题。实现两种不同的addModule方法。一个带武器,一个带引擎

现在回到主题:

else if(module instanceof Weapon){
    if (maxWeaponMounts == weaponMount.size) {
        System.out.println("No more room for weapons!");
    } else{
       maxWeaponMounts += 1;
       weaponMount.add((Weapon)module);
    }
}
看起来你使用maxWeaponMounts作为计数器而不是限制。这就是为什么我假设它最初是0。Array.size也是如此。这不是限制,但大小还计算数组当前包含的元素数。因此,您将始终将maxWeaponMounts==weaponMount.size设置为0==0,并且不会将武器添加到阵列中。它将始终保持为空,尝试引用任何索引将以OutOfBoundsException结束

实际上,您应该使用maxWeaponMounts作为固定限制,而不是计数器

public void setWeaponMounts(int weaponMounts, World world) {
    weaponMount = new Array<Weapon>(weaponMounts);
    maxWeaponMounts = weaponMounts;
}

else if(module instanceof Weapon){
    if (weaponMount.size >= maxWeaponMounts) {
        System.out.println("No more room for weapons!");
    } else{
       weaponMount.add((Weapon)module);
    }
}

您使用的是Libgdx数组还是标准Java数组?此外,您还应该显示触发异常的代码和异常本身。它是一个Libgdx数组,只是我的derping!好吧,下面的海报建议对我的代码进行一些修改,所以我会在进一步修改之前这样做。在我修改代码之前,我做了类似的事情,很有趣,我不记得测试过它,但我认为它有问题。将重构代码并立即尝试。但是,如果我在else语句中放入print方法,将武器添加到数组中,它将输出确认部分代码已实际执行。所以我应该实现一个新的方法,使用重载并更改参数?OMG,这样一个工具。我一定是不小心在我的新手飞船中覆盖了超类方法,导致阵列和最大武器坐骑从未设置过……你在问了一个问题并得到了一个睡眠lol后注意到了这一点,真是太神奇了!
else if(module instanceof Weapon){
    if (maxWeaponMounts == weaponMount.size) {
        System.out.println("No more room for weapons!");
    } else{
       maxWeaponMounts += 1;
       weaponMount.add((Weapon)module);
    }
}
public void setWeaponMounts(int weaponMounts, World world) {
    weaponMount = new Array<Weapon>(weaponMounts);
    maxWeaponMounts = weaponMounts;
}

else if(module instanceof Weapon){
    if (weaponMount.size >= maxWeaponMounts) {
        System.out.println("No more room for weapons!");
    } else{
       weaponMount.add((Weapon)module);
    }
}