在Java中运行递归程序时出错出界限异常

时间:2011-09-26 10:08:32

标签: java recursion arraylist indexoutofboundsexception

我正在学习递归作为Java教程的一部分,我正在寻求一些帮助。

我们需要制作一个递归的Java程序,该程序将解决在没有直接飞行时如何从一个城市到另一个城市的过程。

我的最新一期是在代码在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 :(得分:0)

您在哪里设置i值?无论如何,唯一get()您使用i作为索引,因此很明显Connections没有i那么多项。

顺便说一句:

a)下一次标记抛出异常的行(从我看到的,可能是第一个get()

b)对变量名称使用小写:connections而不是Connections

答案 1 :(得分:0)

问题是i在本地声明,所以你永远在增加一些实例变量。在本地声明并将其设置为零。

在您修复此代码之前,我建议您清理它:

  • 使用小写字母命名变量 - 即connections而不是Connections
  • 在有意义的地方使用局部变量 - 例如connections
  • 删除无意义的代码,例如7 > 8为真时的测试 - 当然总是是真的!
  • 使用适当的块缩进
  • 使用“foreach”循环迭代集合:for (City city : from.getConnections())
  • 倾向于将变量命名为与类名相同,但使用小写字母,因此city,而不是theCity