0

このコードの何が問題になっていますか?

public class HelloWorld {

        public static void main(String[] args) {
                int[] a={4,3,2,5,1,8,6,7};
                System.out.println(Arrays.toString(HelloWorld.split_array(a)[0])); //expect 4325 here
        } 


    public static int[][] split_array(int[] a){
            int [][] result={};
            int mid = (int) (a.length)/2;
            result[0] = Arrays.copyOfRange(a, 0, mid);
            result[1] = Arrays.copyOfRange(a, mid, a.length);
            return result;
        }

    }
4

3 に答える 3

4

次のように、サイズがゼロの配列を宣言しました。

int [][] result={};

次のように、最初と2番目の要素にアクセスしようとしています。

result[0] = Arrays.copyOfRange(a, 0, mid);
result[1] = Arrays.copyOfRange(a, mid, a.length);

...しかし、サイズがゼロであるため、それらはありません。

于 2012-09-22T05:48:48.673 に答える
3

result空のアレイになるように初期化しました。Javaの配列は、スクリプト言語のように自動的に大きくなることはありません。代わりに、それらを正しいサイズに割り当てる必要があります。この場合、次のことを行う必要があります。

int [][] result = new int[2][];

これにより、サイズ2のint配列の新しい配列が作成され、期待どおりに配列を割り当てることができます。

于 2012-09-22T05:50:15.647 に答える
1

Arrays.copyOfRange(a, 0, mid);アレイを初期化していないため、問題は発生しresult[0]ていませんでした。`

動作するコードは次のとおりです。

public class Test {
public static void main(String[] args) {
        Test h = new Test();
        int[] a = { 4, 3, 2, 5, 1, 8, 6, 7 };
        System.out.println(Arrays.toString(h.split_array(a)[0])); // expect 4325
                                                                    // here
    }
    public int[][] split_array(int[] a) {
        int[][] result = new int[2][];
        int mid = (int) (a.length) / 2;
        result[0] = Arrays.copyOfRange(a, 0, mid);
        result[1] = Arrays.copyOfRange(a, mid, a.length);
        return result;
    }

}
于 2012-09-22T05:53:17.313 に答える