我有一种从文本文件加载切片的方法。创建时,磁贴将放置在一个数组中,以便以后清除它们。这已经开始引起问题,我想知道是否有办法创建一个名称与加载的文本文件对应的数组。例如,我打电话给
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只是程序所在地图的字符串。
答案 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;
}