【问题标题】:Why did I get IndexOutOfBoundException in this program? [duplicate]为什么我在这个程序中得到了 IndexOutOfBoundException? [复制]
【发布时间】:2021-02-14 16:45:44
【问题描述】:

这个程序使用了 ArrayList 类,运行时出现异常,请问是什么问题?我找不到任何逻辑问题!

public static ArrayList<Double> differenceArray(ArrayList<Double> a, double avg) {

    ArrayList<Double> temp = new ArrayList<>(a.size());
    for (int i = 0; i < a.size(); i++) {
        temp.set(i, avg - a.get(i));

    }
    return temp;
}

public static void showScoresDiff(ArrayList<Double> a) {

    fillArray(a);
    double avg = computeAvg(a);
    double diff;
    for (int i = 0; i < a.size(); i++) {

        diff = avg - a.get(i);

        System.out.println("the diffrence between the avarege " + avg + " and the element " + a.get(i) + " is " + Math.abs(diff));
    }

    System.out.println("\n");

    ArrayList<Double> newArray = differenceArray(a, avg);
    for (int i = 0; i < a.size(); i++) {
        System.out.println("The " + (i + 1) + "th " + "element of the difference array is: " + newArray.get(i));
    }
}

{ 这是输出: ]1

块引用

【问题讨论】:

  • 使用add而不是set向空列表添加内容。

标签: java arraylist netbeans


【解决方案1】:

问题出在以下几行:

 ArrayList<Double> temp = new ArrayList<>(a.size());
    for (int i = 0; i < a.size(); i++) {
        temp.set(i, avg - a.get(i));

语句ArrayList&lt;Double&gt; temp = new ArrayList&lt;&gt;(a.size()) 没有用a.size() 那么多的元素初始化temp,即执行此语句后temp 的大小仍然是0

下面给出的是descriptionArrayList(int initialCapacity)

构造一个具有指定初始容量的空列表。

由于temp 的大小为0,因此 temp.set(i, avg - a.get(i)) 语句将抛出IndexOutOfBoundsException

如果你想用a的元素初始化temp,你可以这样做:

ArrayList<Double> temp = new ArrayList<>(a);

现在,您可以将元素设置为索引a.size() - 1

--或--

如果您只是想向temp 添加一些内容,您可以使用ArrayList#add(E e),例如temp.add(5.5).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多