Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 02 de Abril 2015, 16:59

Título: CU00676B Clase Arrays del api Java. Métodos equals (comparar), copyOf (copiar)
Publicado 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.

Código: [Seleccionar]

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) );
    }
}


Título: Re:CU00676B Clase Arrays del api Java. Métodos equals (comparar), copyOf (copiar),
Publicado por: Ogramar en 04 de Abril 2015, 21:33
Hola Lorenzo, hay una parte que quizás sea útil que la aclares para otras personas que vean el código:

Código: [Seleccionar]
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
Título: Re:CU00676B Clase Arrays del api Java. Métodos equals (comparar), copyOf (copiar),
Publicado por: Lorenzo31 en 05 de Abril 2015, 15:06
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
Título: Re:CU00676B Clase Arrays del api Java. Métodos equals (comparar), copyOf (copiar)
Publicado por: Ogramar en 06 de Abril 2015, 23:40
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