所以我在大学里有这个代码用于分配,由于某种原因我不知道给出了一个索引超出范围,这个方法的目的是反转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;
}
答案 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();
}