Java中的Bounds问题索引

时间:2014-03-20 16:26:56

标签: java indexing indexoutofboundsexception bounds out

所以我在大学里有这个代码用于分配,由于某种原因我不知道给出了一个索引超出范围,这个方法的目的是反转routeLocation(这是一个ArrayList)然后接受倒置ArrayList&将它添加到String fullRoute中,并在ArrayList中的每个元素之间使用逗号。

public String getFullRoute() {
    int x = this.getRouteLocations().size();
    int i = 0;
    fullRoute = this.getRouteLocations().get(0) + ",";
    ArrayList<FunRide> temp = new ArrayList<FunRide>();
    while (x > 0) {
        temp.add(this.getRouteLocations().get(x));
        x--;
    }
    int w = temp.size();
    while (i < w) {
        fullRoute = fullRoute + "," + temp.get(i);
        i++;
    }
    return fullRoute;
}

1 个答案:

答案 0 :(得分:3)

int x = this.getRouteLocations().size();

应该是

int x = this.getRouteLocations().size()-1;

您还需要将while (x > 0) {更改为while (x >= 0) {

目前在您的第一次迭代中,您尝试访问索引处的元素等于列表的大小。由于它的基数为0,因此它们从0变为大小-1。

I.e为了两个元素的列表,让我们说myList = List(5,15)(所以列表的大小是2)你有:

index value
0       5
1      15

在您的第一次迭代中,当您使用列表大小初始化myList.get(x);时,您所做的myList.get(2);相当于x

另请注意,您不需要创建临时列表。一个简单的循环遍历原始列表的前端就足够了,所以像这样:

public static String getFullRoute() {
    int x = routeLocation.size()-1;
    StringBuilder sb = new StringBuilder(routeLocation.get(0)).append(',');
    while (x >= 0) {
        sb.append(',').append(routeLocation.get(x));
        x--;
    }
    return sb.toString();
}