java - Java 中的索引越界问题

标签 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;
}

最佳答案

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

应该是

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

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

当前,在您的第一次迭代中,您正在尝试访问索引等于列表大小的元素。因为它是 0 基索引,所以它们从 0 到大小 - 1。

即对于两个元素的列表,假设 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();
}

关于java - Java 中的索引越界问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539229/

相关文章:

Java:从同一UDP端口重复发送或为UDP Socket.send()指定本地端口

java - Liferay Web 应用程序部署依赖项

sql - 按唯一字段搜索时使用 LIMIT

java - IndexOf(), 字符串索引越界 : -1

java - 当我们设置 Xmx 和 Xms 大小相等时会发生什么

c++ - C++的多重关联问题

java - 索引属性文件

java - "java.lang.ArrayIndexOutOfBoundsException: -1",同时将制表符添加到 "javax.swing.JTabbedPane"

java - 删除对象时 ArrayList 中的索引越界异常

java - 如何从 Lucene TokenStream 中获取 Token?