Проблема со значениями HashMap () - PullRequest
0 голосов
/ 24 апреля 2011

Я делаю плитку с памятью.Я хочу, чтобы активность начала инициировать плитки с картинками.Я пытаюсь сделать это:

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(); Игра начнется.

Ответы [ 2 ]

4 голосов
/ 24 апреля 2011

values() возвращает Collection, это не обязательно должно быть LinkedList, поэтому возможно ClassCastException.Вы можете получить связанный список, используя конструктор копирования:

List list = new LinkedList(map.values()); // or ArrayList`
1 голос
/ 24 апреля 2011

Тот факт, что код

LinkedList<String> list = new LinkedList<String>();
list = (LinkedList<String>) tilesMapping.values();

находится внутри вашего цикла foreach, мне не подходит.Я думаю, что это должно быть выше для цикла.

Кроме того, вы, вероятно, не хотели создавать new LinkedList(), а затем сразу же выбрасывать его, устанавливая единственную ссылку на этот объект в результате tilesMapping.values() ... который (предположительно) содержит тот, который вы подготовили ранее, да?

Что приводит нас к реальной проблеме: что такое tilesMapping.values() и, в частности, какой тип он возвращает?Вы не можете просто сделать что-то, что НЕ действительно LinkedList, в связанный список строк, просто приведя его к типу.Вы можете обмануть компилятор, но он все равно не будет работать во время выполнения.

Приветствия.Кит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...