2017-04-09 8 views
-1

私はdouble配列をソートしようとしています。奇数要素は昇順でなければなりません。要素も降順でなければなりません。私のクラスは以下の通りです。 私はプロジェクトをrunnedとき、私はスレッド "メイン" java.lang.ArrayIndexOutOfBoundsExceptionにスレッド "main" java.lang.Array Index Out of Bounds例外0

例外を示しています。

... 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) 

このエラーを解決するにはどうすればよいですか? ありがとうございます。

答えて

0

初期化する配列のサイズはすべて0です。以下のように配列を初期化します。

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

速記配列イニシャライザ({1, 2, 3, 4}等例)自動的に配置されている要素に応じて配列のサイズを計算し、それがゼロになるようあなたは、arrayOddarrayEvenアレイ内の任意の要素を配置しませんでしたサイズ。

要するに、あなたはarrayOdd、ゼロサイズarrayEven配列を作成しているし、あなたが場所をしようとしている/ ArrayIndexOutOfBoundsExceptionの原因になっている(つまり0サイズの配列の)配列の要素にアクセスするので、あなたが持つ配列を作成する必要があります以下に示すようにサイズ:

Double[] arrayOdd = new Double[array.length]; 
Double[] arrayEven = new Double[array.length]; 
Double[] sortedArray = new Double[array.length]; 
関連する問題