2012-10-04 13 views
5

Próbuję skopiować zawartość mojej tablicy int do tablicy typu double. Czy muszę je najpierw rzucić?Skopiuj zawartość tablicy int do podwójnej tablicy w Javie?

Powodzeniem skopiowałem tablicę typu int do innej tablicy typu int. Jednak teraz chcę napisać kod, który skopiowałby zawartość z Array A do Array Y (int to double).

Oto mój kod:

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(); 
    } 
} 
+1

Czy próbowałeś go uruchomić? Czy to działa? czy masz jakieś błędy? Nie do końca pewne, jakie jest pytanie. –

Odpowiedz

8

Można iterację każdego elementu źródła i dodać je do tablicy docelowej. Nie potrzebujesz wyraźnej obsady od int do double, ponieważ double jest szerszy.

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

można dokonać metodą Narzędzie jak to -

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; 
} 
+0

Świetne, dziękuję za poświęcenie czasu na wyjaśnienie :) To jest dokładnie to, o co poszedłem. – binary101

+0

@shardy: Nie ma za co. –

6

Od System.arraycopy JavaDoc

[...] W przeciwnym razie, jeśli którekolwiek z poniższych stwierdzeń jest prawdziwe, ArrayStoreException jest wyrzucane, a miejsce docelowe nie jest modyfikowane:

* ...

* ...

* Argument src i argumentu dest odnoszą się do tablic, których składnikiem są typy różne typy prymitywne. [...]

Od int i double są różne typy pierwotne trzeba będzie ręcznie iterację jednej tablicy i skopiować jej zawartość do drugiego.

12

System.arraycopy() nie może skopiować int[] do double[]

Jak na temat korzystania google guawa:

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

//copy int[] to double[] 
double[] y=Doubles.toArray(Ints.asList(a)); 
15

Warto wspomnieć, że w dzisiejszych czasach, Java 8 oferuje elegancką jedno-liner to zrobić bez potrzeba korzystania z bibliotek stron trzecich:

int[] ints = {23, 31, 11, 9}; 
double[] doubles = Arrays.stream(ints).asDoubleStream().toArray();