Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 02 de Abril 2015, 16:59
-
Buenas, adjunto ejercicio usando fill con indices inicial y final (exclusivo), era solo una práctica pero ahi va igual por si a alguien le aporta.
import java.util.Arrays;
//uso metodo copyOf clase Arrays
public class FillConIndices{
public static void main (String [] args){
int [] miArray1 = { 2, -4, 3, -7};
for ( int miNumero : miArray1 ) {System.out.println("miArray1 " + miNumero ); }
System.out.println("");
int [] otroArray = {1, 2, 4, 8};
for ( int miNumero : otroArray ) { System.out.println("otroArray " + miNumero ); }
System.out.println("Son mismo objeto? " + (miArray1 == otroArray) );
System.out.println("Tienen mismo contenido? " + Arrays.equals(miArray1, otroArray) );
//Copiamos el array utilizando copyOf de la clase Arrays
otroArray = Arrays.copyOf(miArray1, miArray1.length + 2);
for(int i = 0; i < otroArray.length; i++){
if( otroArray[i] < 0 ){ Arrays.fill (otroArray, i, i + 1, 33);}
}
for ( int miNumero : otroArray ) { System.out.println ("otroArray " + miNumero ); }
System.out.println("Son mismo objeto? " + (miArray1 == otroArray) );
System.out.println("Tienen mismo contenido? " + Arrays.equals(miArray1, otroArray) );
}
}
-
Hola Lorenzo, hay una parte que quizás sea útil que la aclares para otras personas que vean el código:
otroArray = Arrays.copyOf(miArray1, miArray1.length + 2);
for(int i = 0; i < otroArray.length; i++){
if( otroArray[i] < 0 ){ Arrays.fill (otroArray, i, i + 1, 33);}
}
¿Serías capaz de explicar qué es lo que ocurre cuando se ejecuta el bucle y por qué después de ejecutado el bucle el contenido de otroArray es
otroArray 2
otroArray 33
otroArray 3
otroArray 33
otroArray 0
otroArray 0
?
Nota: hay un detalle en el mátodo fill según indica el api de java:
public static void fill(int[] a, int fromIndex, int toIndex, int val)
fromIndex - the index of the first element (inclusive) to be filled with the specified value
toIndex - the index of the last element (exclusive) to be filled with the specified value
Salu2
-
Si claro, básicamente he creado el otroArray como copyOf de miarray pero con dos posiciones en 0 final de más.
Despues, for(int i = 0; i < otroArray.length; i++) recorro el nuevo array hasta su length.
if( otroArray [ i ] < 0 ){ Arrays.fill (otroArray, i, i + 1, 33);}
Y aquí la condición if compara el valor que guarda la referencia otroArray[posición], si es menor a cero, Oses negativo, coloca con el Arrays.fill el valor 33 sustituyendo, para lograr q solo coloque una poicion ese valor, se usa los parámetros intermedios, desde la posición i ( comparada en el if, la que queremos cambiar) hasta i+1 que como tu indicas es exclusivo, no la coge, luego solo cambia la posición i.
Ejemplo
Para i = 1: otroArray [ 1] = -4. Esto es menor a 0 y entra en el if
Arrays.fill ( otroArray, 1 , 2, 33) excluye posicion dos, luego solo cambia la 1( que es -4) por un 33
Espero sirva la explicacion Ogramar . Saludos
-
Sí, gracias por la explicación, creo que le puede ser útil a quien lea el código para entender mejor lo que hace.
Salu2