Ошибка выхода за границы при запуске рекурсивной программы на Java - PullRequest
0 голосов
/ 26 сентября 2011

Я изучаю рекурсию как часть учебника по Java и ищу небольшую помощь.

Нам нужно создать рекурсивную Java-программу, которая будет определять, как добраться из одного города в другой, если нет прямого рейса.

Моя последняя проблема заключается в том, что я получаю ошибку из-за предела исключения после того, как у кода есть 2 города в списке массива flightRoute. выдает ошибку «IndexOutOfBoundsException Index 2 Size 2»

Значением соединения является arrayList, который принимает все города, с которыми соединяется город, а flightRoute также является arrayList, который отслеживает города, в которые нам приходилось ездить, чтобы добраться до пункта назначения.

Я просто не могу понять, почему это не будет продолжаться.

Я был бы признателен за помощь, если бы вы могли.

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

    public boolean determineRoute(City from, City to, ArrayList<City> flightRoute)
        {   

            //the Connections value takes all the connecting cities we can travel to from a departure point
            Connections = from.getConnections();
            City theCity = Connections.get(i);
            //searches in the connecting cities from the current city as to if it contains the city we wish to travel to
            if (flightRoute.contains(to)|| 7 >8) 
            {
            System.out.println("Congrats you can go their cause one of its connecting cities is the to city that u wanna go to");
            return true;
            }

            System.out.println("the City name "+theCity);
            if(flightRoute.contains(theCity))
            {
            System.out.println("Sorry it cannot be added "+Connections.get(i)); 
            }
            else
            {   
            //add connecting city to list for future reference
            flightRoute.add(Connections.get(i));

            //takes the lates connection and uses it for recursion (below)
            from = Connections.get(i);
            i++;
            //recursive part which sends a new from city for analysis until the city we want to travel to arises
            determineRoute(from, to, flightRoute);
            }   

        return true;    
        }

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

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

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

  • Переменные именуются в нижнем регистре, т.е. connections, а не Connections
  • Используйте локальные переменные там, где это имеет смысл - например, connections
  • Удалить бессмысленный код, такой как проверка, если 7 > 8 истинно - конечно, это всегда верно!
  • Используйте правильные отступы блоков
  • Перебор коллекций с использованием цикла "foreach": for (City city : from.getConnections())
  • Как правило, имена переменных совпадают с именами классов, но строчными буквами, поэтому city, а не theCity
0 голосов
/ 26 сентября 2011

Где вы устанавливаете значение i? В любом случае, только get() вы используете i в качестве индекса, поэтому ясно, что Connections не имеет столько элементов, сколько i.

КСТАТИ:

a) В следующий раз отметка, на какую строку выдается исключение (из того, что я вижу, вероятно, первое get()

b) используйте строчные буквы для имен переменных: connections вместо Connections

...