thread“main”java.lang.Array Index Out of Bounds Exception 0

时间:2017-04-09 18:18:14

标签: java arrays indexoutofboundsexception

我尝试排序一个双数组。奇数元素应该是升序。偶数元素应该降序。我的类如下。 当我运行项目时我会显示

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

package com.fatih.sortarray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SortingArray {

public static Double[] sortItOut(Double[] array) {

    Double[] arrayOdd = {};
    Double[] arrayEven = {};
    Double[] sortedArray = {};

    for (int i = 0; i < array.length; i++) {

        int k = 0;
        int j = 0;

        if (array[i] % 2 == 0) {
            arrayOdd[k] = array[i];
            k++;
        } else {
            arrayEven[j] = array[i];
            j++;
        }

    }

    Arrays.sort(arrayOdd, Collections.reverseOrder());
    Arrays.sort(arrayEven);

    List list = new ArrayList(Arrays.asList(arrayOdd));
    list.addAll(Arrays.asList(arrayEven));
    sortedArray = (Double[]) list.toArray();

    return sortedArray;
}

}

...

public class SortingArrayTestt {

public static void main(String[] args) {

    Double[] array = { 1d, 2d, 3d, 4d, 5d, 6d, 7d, 8d, 9d };

    Double[] sortingArray = SortingArray.sortItOut(array);

    for (int i = 0; i < sortingArray.length; i++) {
        System.out.print(sortingArray[i]);
    }

}

}

...

控制台输出是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.fatih.sortarray.SortingArray.sortItOut(SortingArray.java:25)
at com.fatih.sortarray.SortingArrayTestt.main(SortingArrayTestt.java:9)

如何修复此错误? 谢谢你的一切。

2 个答案:

答案 0 :(得分:0)

您正在初始化的所有数组的大小为0.初始化数组如下。

Double[] sortedArray = new Double[array.length];

答案 1 :(得分:0)

速记数组初始值设定项(例如{1, 2, 3, 4})会根据您放置的元素自动计算数组的大小,但您没有在arrayOddarrayEven中放置任何元素数组,所以它的大小为零。

简而言之,您创建了 arrayOddarrayEven数组,大小为,并且您正在尝试放置/访问数组元素(该0大小的数组),这是导致ArrayIndexOutOfBoundsException,因此您需要创建具有大小的数组,如下所示:

Double[] arrayOdd = new Double[array.length];
Double[] arrayEven = new Double[array.length];
Double[] sortedArray = new Double[array.length];