2011-11-19 15 views
10

Decir que tengo una matriz de enteros,Crear nueva matriz con contenidos de matriz de edad mientras se mantiene la vieja matriz estática

int[] array = new int[7]; 
for(int i = 0; i < 7; i++) 
{ 
array[i] = i; 
} 

ahora quiero obtener sólo los primeros cuatro números en ese array, y gire a poner ese en otra matriz.

Así que realmente quieren algo como ...

newArray = array[0-3]. 

sé que la sintaxis es incorrecta, pero sólo estoy dando la idea general de lo que estoy tratando de hacer, es algo así sea posible ? ¿O tengo que crear un bucle y agregarlo manualmente en el newArray?

Respuesta

24

Método 1

int[] newArr = new int[4]; 
System.arraycopy(array, 0, newArr, 0, 4); 

El método toma cinco argumentos:

  1. src: La matriz de origen.
  2. srcPosition: la posición en la fuente desde la que desea comenzar copiando.
  3. des: la matriz de destino.
  4. desPosition: la posición en la matriz de destino donde debe comenzar la copia .
  5. length: la cantidad de elementos que se copiarán.

Este método arroja una NullPointerException si cualquiera de src o des son nulas. También lanza una ArrayStoreException en los siguientes casos:

  • Si el src no es una matriz.
  • Si la des no es una matriz.
  • Si src y des son matrices de diferentes tipos de datos.

Método 2

Utilizar,

Arrays.copyOf(array,4) para copiar los 4 primeros elementos, truncando el resto.

de

Arrays.copyOfRange(array,1,5) para copiar elementos de 1-4 si necesita el medio de una matriz.

+0

Gracias por su respuesta, pero para su último método 2, Arrays.copyOfRange (matriz, 1,5) copiará los elementos 1-4. No sé por qué lo hicieron así ... pero gracias por su respuesta, estoy seguro. usando el último método –

+0

Mi culpa, está basada en cero y no estaba pensando ... – jkschneider

2

Puede crear la nueva matriz en el tamaño que desee (4 en este caso), y luego usar System.arrayCopy para copiar el contenido de una matriz a otra.

9
int[] newArray = Arrays.copyOf(array,4); 
2

Es posible utilizar copyOfRange para este fin, que copia el rango especificado de la matriz especificada en una nueva matriz.

copyOfRange(byte[] original, 
       int from, 
       int to) 

Parámetros:

original - la matriz de la que una serie se va a copiar

de - el índice inicial de la gama para ser copiado, inclusive

hasta - el índice final del rango que se va a copiar, exclusivo. (Este índice puede estar fuera de la matriz.)

Cuestiones relacionadas