Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Urgente_System.arraycopy

Estas en el tema de Urgente_System.arraycopy en el foro de Java en Foros del Web. Tengo un problema con un método que debe de eliminar una cierta posición del arreglo n y copiarlo al arreglo aux que tiene una posición ...
  #1 (permalink)  
Antiguo 17/10/2015, 14:57
 
Fecha de Ingreso: mayo-2015
Mensajes: 5
Antigüedad: 9 años
Puntos: 0
Pregunta Urgente_System.arraycopy

Tengo un problema con un método que debe de eliminar una cierta posición del arreglo n y copiarlo al arreglo aux que tiene una posición menos que "n" pero me marco un error

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)

por lo que no se a que se deba si según tengo el indice para moverlo supongace que n es igual a

n=[ 1 2 3] y quiero quita el 2 entonces aux debe quedar [ 1 3 ]

public void eliminarNino(Nino n[], int mat, Nino aux[]){
System.out.println("\nTam n: "+n.length+"\nTam aux: "+aux.length);
for (int i = 0; i < n.length; i++) {
if (n[i].matricula==mat){
n[i]=null;
if(n[0]!=null){
System.arraycopy(n, 0, aux, 0, i-1);
if((i+1)<n.length){
System.arraycopy(n, i+1, aux, i, aux.length);
System.out.println("\nVal n: "+n[i]+"\nVal aux: "+aux[i]);
}
n=aux;
}
}
}
}
  #2 (permalink)  
Antiguo 17/10/2015, 17:14
Avatar de andrespintonegreira  
Fecha de Ingreso: octubre-2015
Mensajes: 4
Antigüedad: 8 años, 6 meses
Puntos: 1
Respuesta: Urgente_System.arraycopy

El problema está en el número de elementos que copias. arraycopy() copia desde la posición indicada hasta "longitud - 1", según dice esta página: http://www.tutorialspoint.com/java/lang/system_arraycopy.htm

En la primera llamada a arraycopy() indicas una longitud de "i - 1", pero no es necesario restar uno porque lo hace automáticamente. El valor correcto para la longitud es "i".

En la segunda llamada le pides a arraycopy() que copie tantos elementos como tenga "aux" empezando en el la posición "i + 1", momento en que se produce el error. Lo correcto es restar al total de elementos los ya copiados (aux.length - i), para que copie los restantes.


public void eliminarNino(Nino n[], int mat, Nino aux[]){
System.out.println("\nTam n: "+n.length+"\nTam aux: "+aux.length);

for (int i = 0; i < n.length; i++) {
if (n[i].matricula==mat){
n[i]=null;
if(n[0]!=null){

// El nº de elementos copiados debe ser i, no i-1
System.arraycopy(n, 0, aux, 0, i);

if((i+1)<n.length){

// Esta vez copiamos la segunda parte de la lista. Al nº total de elementos
// se le resta el nº de elementos ya copiados (incluido el eliminado)
System.arraycopy(n, i+1, aux, i, aux.length - i);

System.out.println("\nVal n: "+n[i]+"\nVal aux: "+aux[i]);
}
n=aux;
}
}
}
}

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:32.