Java раздражающий итератор не вернет элемент в связанном списке - PullRequest
1 голос
/ 12 декабря 2011

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

public void insertIntoQueue(float length,int xElement,int yElement,int whichElement)
    {
        Dot dot = new Dot(xElement,yElement);
        GeometricElement element = null;

        // some code 

        int robotX,robotY;
        boolean flag = false;
        for (Iterator<Robot> i = robotList.iterator(); i.hasNext();)
        {

            // Robot currentRobot = (Robot) i.next();           

             robotX = ((Robot)(i)).getXlocation();
             robotY = ((Robot)(i)).getYlocation();

        // more code , irrelevant 
    }

У меня есть следующие объекты: Robot, GeometricElement и Dot.

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

public class Ground {

    // more fields 

    private LinkedList <Robot> robotList;  // used for storing the robots 
    public Ground(int row,int col)   // ctor 
{
            // some code 

    this.robotList = new LinkedList<Robot>();
}
}

но строка: robotX = ((Robot)(i)).getXlocation(); и роботY = ((Robot)(i)).getYlocation(); выдает исключение dispatchUncaughtException.

Обратите внимание, что я не хочу удалять элементы из связанного списка, мне нужно получить поля из текущего элемента с помощью итератора.

Так что не так?

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

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Ваша закомментированная строка на самом деле является правильной строкой, за исключением удаления приведения:

Robot currentRobot = i.next();           

Поскольку ваш итератор напечатан, вам не нужно приведение, а компилятор гарантирует, что вы работаете с правильным видом объекта.

После этого вы можете просто:

robotX = currentRobot.getXlocation();
robotY = currentRobot.getYlocation();

Нет уродливых бросков!


Кстати, если вам не нужно изменять коллекцию с помощью итератора, вы можете значительно улучшить стиль кода, купив с помощью «foreach»:

for (Robot currentRobot : robotList) {
    robotX = currentRobot.getXlocation();
    robotY = currentRobot.getYlocation();
    // .. more code
}
1 голос
/ 12 декабря 2011

Вы пытаетесь привести итератор к объекту Robot. Это никогда не сработает, это не робот, это итератор.

Robot robot = (Robot)iterator.next();
robotX = robot.getXlocation();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...