java - 为什么我的程序抛出 "IndexOutOfBoundsException",索引为 : 1, Size: 0

标签 java

我正在用 Java 为 D&D 制作一个主动跟踪器,由一个由随机整数填充的 Arraylist 组成。但是,当我尝试读取 ArrayList 的给定索引时,程序会抛出异常:

import java.util.ArrayList;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Add number of enemies");

        int a = sc.nextInt();

        ArrayList<Integer> initiativeList = new ArrayList<>(a); // This is where i have added it, code was not updated.

        Random rand = new Random();
        for (int i = 1; i <= a; i++) { // adding a given number to Arraylist
            int initRoll = rand.nextInt(19);
            initiativeList.add(i, initRoll);
            System.out.println(initRoll);
        }
        int q = initiativeList.get(3);
        System.out.println(q);


    }
}

我已将 ArrayList 的大小设置为等于 int a,它接受用户输入。

最佳答案

您将数组列表的大小与其容量混淆了:

  • 大小是列表中元素的数量;
  • 容量是列表在不重新分配其内部结构的情况下可以容纳的元素数量。

下面的初始化显示了数组列表的容量(列表可以容纳多少个元素) -

ArrayList<Integer> initiativeList = new ArrayList<>(a);//here  you are not setting size of list, you are setting list capacity to a.

这就是为什么你的代码抛出越界异常,因为它的大小实际上是 0。

希望这有帮助。

关于java - 为什么我的程序抛出 "IndexOutOfBoundsException",索引为 : 1, Size: 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60092543/

相关文章:

java - Eclipse Luna Gradle插件添加了未引用的依赖项

java - libgdx:是否保证所有 Screen 方法都从单个线程调用?

java - JSF2.0 部分渲染与 ui :define

java - Camel POST RestService 接受 JSONArray : annotations and parsing errors

java - 为什么 split 方法不支持 $,* 等分隔符来分割字符串

java - 如何对仅使用 jUnit 启动线程的方法进行单元测试?

java - 国际象棋 : Getting All Legal Chess Moves

java - 如何暂停/恢复使用 mediarecorder 创建的录音?

java - Java中的JVT是什么

java - jaxb 实现不适用于 Windows 7