11

int 配列の内容を double 型の配列にコピーしようとしています。最初にそれらをキャストする必要がありますか?

int 型の配列を int 型の別の配列に正常にコピーしました。Aただし、配列から配列Y(int から double)にコンテンツをコピーするコードを記述したいと考えています。

これが私のコードです:

public class CopyingArraysEtc {

    public void copyArrayAtoB() {
        double[] x = {10.1,33,21,9},y = null;
        int[] a = {23,31,11,9}, b = new int[4], c;

        System.arraycopy(a, 0, b, 0, a.length);

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

    }          

    public static void main(String[] args) {
        //copy contents of Array A to array B
        new CopyingArraysEtc().copyArrayAtoB();
    }
}
4

4 に答える 4

25

この時代において、Java 8 は、サードパーティのライブラリを使用せずにこれを行うためのエレガントなワンライナーを提供していることに言及する価値があります。

int[] ints = {23, 31, 11, 9};
double[] doubles = Arrays.stream(ints).asDoubleStream().toArray();
于 2016-03-06T22:15:39.897 に答える
13

System.arraycopy()にコピーできませint[]double[]

Googleグアバの使用はどうですか:

int[] a = {23,31,11,9};

//copy int[] to double[]
double[] y=Doubles.toArray(Ints.asList(a));
于 2012-10-04T14:31:49.247 に答える
11

ソースの各要素を反復処理して、それらを宛先配列に追加できます。が広いため、からintへの明示的なキャストは必要ありません。doubledouble

int[] ints = {1, 2, 3, 4};
double[] doubles = new double[ints.length];
for(int i=0; i<ints.length; i++) {
    doubles[i] = ints[i];
}

このようなユーティリティメソッドを作成できます-

public static double[] copyFromIntArray(int[] source) {
    double[] dest = new double[source.length];
    for(int i=0; i<source.length; i++) {
        dest[i] = source[i];
    }
    return dest;
}
于 2012-10-04T14:18:48.440 に答える
6

System.arraycopy JavaDocから

[...] それ以外の場合、次のいずれかが true の場合、ArrayStoreExceptionがスローされ、宛先は変更されません。

*...

*...

※src引数とdest引数は、構成要素の型が異なるプリミティブ型の配列を参照しています。[...]

intとはプリミティブ型が異なるため、 double1 つの配列を手動で反復処理し、その内容を別の配列にコピーする必要があります。

于 2012-10-04T14:27:06.350 に答える