使用自动名称创建数组?

时间:2013-09-18 00:41:18

标签: java arrays

我有一种从文本文件加载切片的方法。创建时,磁贴将放置在一个数组中,以便以后清除它们。这已经开始引起问题,我想知道是否有办法创建一个名称与加载的文本文件对应的数组。例如,我打电话给

loadMap("map1");

“map1”是存储地图的txt文件的名称。如果我使用“map1”参数调用loadMap方法,我该如何创建一个名为“map1TileArray”的数组,或者如果参数是“finalMap”,我想要一个名为“finalMapTileArray”的数组。有可能做这样的事情,如果有的话,怎么做?

修改

我正在接受NPE。

我声明我的地图:

Map<String, ArrayList<Tile>> tileMap = new HashMap<String, ArrayList<Tile>>();

然后我在tileMap中使用当前地图的字符串存储ArrayList:

tileMap.put(map, tilearray);

但是我在这一行得到了一个错误:

if(tileMap.get(currentMap).size()>0) {

这是我的unloadTiles方法的开始。 currentMap只是程序所在地图的字符串。

4 个答案:

答案 0 :(得分:6)

您将需要使用地图,例如HashMap,可能是Map<String, Integer[]>。这将允许您创建一个Integer(或其他)数组并将其与String相关联。

例如:

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Foo {
   public static void main(String[] args) {
      Map<String, Integer[]> myMap = new HashMap<>();
      myMap.put("foo", new Integer[] { 1, 2, 3 });
      myMap.put("bar", new Integer[] { 3, 4, 5 });
      myMap.put("spam", new Integer[] { 100, 200, 300 });

      for (String key : myMap.keySet()) {
         System.out.printf("%8s: %s%n", key, Arrays.toString(myMap.get(key)));
      }
   }
}

答案 1 :(得分:1)

使用java.util.Map并将值分配给变量。如果使用List而不是数组

,你可能会更好
List<Integer> currentArray = loadMap("map1");

.... 
// inside
private List<Integer> loadMap( String fileName ) { 
    List<Integer> result = allTheMaps.get( fileName );
    if ( result == null ) { 
       // load it from file... 
       result = .... 
       allTheMaps.put( fileName, result ); 
    }
    return result;
}

答案 2 :(得分:1)

正如其他人所说,地图将适用于此。

其他人没有说的是你也可能会因使用一个类来代表你的瓷砖而受益。

这样,任何用于操作切片的数组逻辑都可以很好地封装在一个地方。我会想象这样的事情:

public class Tiles{
    private int[] tiles;
    private String name;
    private Tile(int[] tiles, String name){
        this.tiles = tiles;
    }

    public static Tiles getTiles(Map<String, Tiles> tilesCache, String tileName){
        if (tilesCache.containsKey(tileName)){
            return tilesCache.get(tileName);
        }
        // load from file
        return tile;
    }

    public void clear(Map<String, Tiles> tilesCache){
        tilesCache.remove(this.name);
        this.tiles = null;
    }

    //Other logic about tiles
}

答案 3 :(得分:0)

您可能需要考虑使用带有String作为键的HashMap和值的Integer []。

    Map<String, Integer[]> maps = new HashMap<String, Integer[]>();

当你调用loadMap函数时,你可以做这样的事情。

    public Integer[] loadMap(String name) {
        if (maps.contains(name)) {
            return maps.get(name);
        }
        // Falls through if map is not loaded
        int[] mapData = new int[##];

        // load map

        maps.put(name, mapData);
        return mapData;
    }