0

在社区的帮助下,我设法解决了这个问题:如何将字符串转换为数组的名称?

但现在我得到'nullPointerExceptions'。这是我使用的代码:

public class IroncladsAdder
{
public static String weaponId = null;
public static String ship = null;
public static String wing = null;

//map code
private static Map<String, List<Integer>> arrays = new HashMap<String, List<Integer>>();
public void Holder(String... names) {
    for (String name : names) {
        arrays.put(name, new ArrayList<Integer>());
    }
}

//adds weapons to fleets and stations
public static void AddWeapons(CargoAPI cargo, String fac, int count, int type) {

    String arrayName = null;

    int quantity = (int) (Math.random()*5f + count/2) + 1;
    if (count == 1) {quantity = 1;}

    if (type == 0) {arrayName = fac+"_mil_weps";}
    else if (type == 1) {arrayName = fac+"_civ_weps";}
    else {arrayName = fac+"_tech_weps";}

    List<Integer> array = arrays.get(arrayName);

    for (int j = 0; j <= count; j++)
    {
        weaponId = valueOf(arrays.get(arrayName).get((int) (Math.random() * arrays.get(arrayName).size())));
        cargo.addWeapons(weaponId, quantity);
    }
}

下面是一个数组示例:

//high-tech UIN weapons
private static String [] uin_tech_weps =
        {
                "med-en-uin-partpulse",
                "lrg-en-uin-partacc",
                "med-bal-uin-driver",
                "lrg-bal-uin-terminator",
                "lrg-bal-uin-hvydriver",
                "lrg-bal-uin-shotgundriver",
                "lrg-en-uin-empbeam",
        };

错误表明此构造有问题:

weaponId = valueOf(arrays.get(arrayName).get((int) (Math.random() * arrays.get(arrayName).size())));

注意:我正在使用 Intellij IDEA 和 Java 6。应用程序大部分时间都有一些错误的建议/修复,在这种情况下表明一切正常。

我需要的是从特定数组中获取一个字符串(即使用代码生成的名称)并将其分配给“weaponId”。

4

2 回答 2

1

当您的应用程序启动地图时,数组为空,然后当您尝试获取名称为 X 的数组时,您将返回一个空值。

第一个解决方案:在启动/构建时,为所有数组名称填充空数组/列表。

第二种解决方案:使用此方法获取数组。

protected List<Integer> getArray(String arrayName) {
  List<Integer> array = map.get(arrayName);
  if (array == null) {
    array = new ArrayList<Integer>();
    map.put(arrayName, array);
  }
  return array;
}

Ps 您可以更改此代码:

    weaponId = valueOf(arrays.get(arrayName).get((int) (Math.random() * arrays.get(arrayName).size())));

进入

    weaponId = valueOf(array.get((int) (Math.random() * array.size())));
于 2013-10-24T15:18:31.537 回答
0

好的。现在有一个不同的错误 - 'java.lang.IndexOutOfBoundsException: Index: 0, Size: 0'

使代码看起来像这样:

private static Map <String, List<Integer>> arrays = new HashMap<String, List<Integer>>();

public static List<Integer> getArray(String arrayName) {
    List<Integer> array = arrays.get(arrayName);
    if (array == null) {
        array = new ArrayList<Integer>();
        arrays.put("rsf_civ_weps", array);
        arrays.put("rsf_mil_weps", array);
        arrays.put("rsf_tech_weps", array);
        arrays.put("isa_civ_weps", array);
        arrays.put("isa_mil_weps", array);
        arrays.put("isa_tech_weps", array);
        arrays.put("uin_mil_weps", array);
        arrays.put("uin_tech_weps", array);
        arrays.put("uin_civ_weps", array);
        arrays.put("xle_civ_weps", array);
        arrays.put("xle_mil_weps", array);
        arrays.put("xle_tech_weps", array);
    }
    return array;
}

这就是我现在调用数组和武器 ID 的方式:

List<Integer> array = arrays.get(arrayName);

for (int j = 0; j <= count; j++)
    {
        weaponId = valueOf(array.get((int) (Math.random() * array.size())));
        cargo.addWeapons(weaponId, quantity);
    }

怎么了?

于 2013-10-24T16:07:47.353 回答