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 という名前の配列を取得しようとすると、null 値が返されます。

最初の解決策: 起動/構築時に、すべての配列名の空の配列/リストでマップを埋めます。

2 番目の解決策: 配列を取得するには、このメソッドを使用します。

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

Ok。現在、別のエラーがあります - '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;
}

これは、配列と WeaponId を呼び出す方法です。

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 に答える