2012-10-04 25 views
5

Estoy tratando de copiar el contenido de mi matriz int en una matriz de tipo double. ¿Tengo que echarlos primero?¿Copia el contenido de una matriz int a una matriz doble en Java?

He copiado correctamente una matriz de tipo int en otra matriz de tipo int. Sin embargo, ahora quiero escribir el código que copiará el contenido de la Matriz A en Matriz Y (int a doble).

Aquí está mi código:

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

¿Ha intentado ejecutarlo? ¿Funciona? ¿tuviste algun error? No estoy del todo seguro de cuál es la pregunta. –

Respuesta

8

Se puede recorrer cada elemento de la fuente y agregarlos a la matriz de destino. No necesita un molde explícito yendo desde int a double porque double es más ancho.

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

Usted puede hacer un método de utilidad como esto -

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

Brillante, gracias por tomarse el tiempo para explicar eso :) Es exactamente lo que estaba buscando. – binary101

+0

@shardy: De nada. –

6

De System.arraycopy JavaDoc

[...] De lo contrario, si alguna de las siguientes situaciones, una ArrayStoreException se arroja y el destino no se modifica:

* ...

* ...

* El argumento src y dest argumento se refieren a matrices cuyos tipos de componentes son diferentes tipos primitivos. [...]

Desde int y double son diferentes tipos primitivos que tendrá que repetir manualmente a través de una matriz y copiar su contenido a otro.

12

System.arraycopy() no puede copiar int[] a double[]

¿Cómo sobre el uso de Google de guayaba:

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

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

Vale la pena mencionar que en este día y edad, Java 8 ofrece una elegante de una sola línea de hacer esto sin la necesidad de utilizar bibliotecas de terceros:

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