Итератор для Set с использованием HashMap не выдаст значение / ключ? - PullRequest
0 голосов
/ 28 января 2012

С учетом следующего кода:

public class Game {



    private Map<String,Coordinate> m_myHashMap;
... // more code 
}

public Game(Display display,int level) 
{
        this.m_myHashMap = new HashMap<String,Coordinate>();
... // more code 

}

Координата класса

модель пакета;

public class Coordinate {

    private int xCoordinate;
    private int yCoordinate;
    private int sign;

    public Coordinate(int x,int y)
    {
        this.xCoordinate = x;
        this.yCoordinate = y;
        this.sign = 0;
    }

    public int getXCoordinate()
    {
        return this.xCoordinate;
    }

    public int getYCoordinate()
    {
        return this.yCoordinate;
    }

    public void setSign(int number)
    {
        this.sign = number;
    }

    public int getSign()
    {
        return this.sign;
    }

    public void setXcoordinate(int newX)
    {
        this.xCoordinate = newX;

    }

    public void setYcoordinate(int newY)
    {
        this.yCoordinate = newY;

    }

}

и метод класса Game:

private void placeTreasuresInMaze(PaintEvent e)
{
    // e.gc.drawPolygon(new int[] { 25+x,5+y,45+x,45+y,5+x,45+y });
    int numberOfTreasures = this.m_numberOfPlayers * 3;  // calculate number of treasures 
    Set set = this.m_myHashMap.entrySet();
    Iterator iterator = set.iterator();     

    while (numberOfTreasures > 0 && iterator.hasNext())
    {
        numberOfTreasures--;
        // need to add more code here 

    }
}

HashMap не имеет итератора, поэтому я использовал Set, чтобы получить элементы hashmap.Моя проблема началась, когда я хотел перебрать значения HashMap, но, поскольку это невозможно, я попытался использовать Set, но Set возвращает Object, а не сам объект Coordinate.Есть ли способ получить его?

С уважением, Рон

1 Ответ

4 голосов
/ 28 января 2012

Проблема в том, что вы используете необработанные типы для набора и итератора - вы должны использовать общие типы:

Iterator<Map.Entry<String, Coordinate>> iterator = m_myHashMap.entrySet()
                                                              .iterator();

Или:

Set<Map.Entry<String, Coordinate>> set = this.m_myHashMap.entrySet();
Iterator<Map.Entry<String, Coordinate>> iterator = set.iterator();     

С другойстороны, если вы действительно делаете просто хотите перебрать значения карты:

Iterator<Coordinate> valueIterator = this.m_myHashMap.values().iterator();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...