我制作瓷砖记忆游戏。我想在活动开始时用图片初始化瓷砖。我试着这样做:
private void initTiles() {
// Store name of resources in array
String[] pictures = new String[] {"tile_circle", "tile_deny", "tile_heart"
, "tile_mail", "tile_music", "tile_pin", "tile_splash", "tile_yes"};
Random rand = new Random();
int i = 1;
while(i <= 16) {
String pic = pictures[rand.nextInt(8)];
LinkedList<String> list = new LinkedList<String>();
list = (LinkedList<String>) tilesMapping.values();
//Check if this picture is already loaded twice
if(list.indexOf(pic) == -1) {
tilesMapping.put(Integer.valueOf(i), pic);
i++;
} else if(list.lastIndexOf(pic) == -1) {
tilesMapping.put(Integer.valueOf(i), pic);
i++;
} else if(list.indexOf(pic) == list.lastIndexOf(pic)) {
tilesMapping.put(Integer.valueOf(i), pic);
i++;
}
}
}
但是当我开始游戏时,我会收到力量关闭。但是当评论这一行list = (LinkedList<String>) tilesMapping.values();
游戏开始时。
答案 0 :(得分:4)
values()
返回Collection
,它不需要是LinkedList
,因此可能会发生ClassCastException
。您可以使用复制构造函数获取链接列表:
List list = new LinkedList(map.values()); // or ArrayList`
答案 1 :(得分:1)
代码
的事实LinkedList<String> list = new LinkedList<String>();
list = (LinkedList<String>) tilesMapping.values();
在你的foreach循环内部看起来不对我。我想它应该高于循环。
此外,您可能并不是要创建一个new LinkedList()
,然后立即将其抛弃,方法是将该对象的唯一引用设置为tilesMapping.values()
...的结果...(推测)包含你之前准备的,是吗?
这给我们带来了真正的问题:什么是tilesMapping.values()
,具体是什么类型的回归?你不能只是通过类型转换来创建一个非LinkedList
的字符串链接列表。你可以欺骗编译器,但它仍然无法在运行时运行。
干杯。基思。