Arrays y métodos en Java

En esta entrada vamos a explicar cómo trabajar con arrays y métodos en java. Veremos cómo pasar un array como parámetro a un método y cómo devolver un array mediante la instrucción return.

Sabemos que el nombre de un array contiene la dirección de memoria donde se almacena el array. En la entrada Arrays unidimensionales tienes la explicación de esto.

Cuando se pasa un array a un método como parámetro, el método recibe la dirección de memoria donde se almacena el array. El parámetro formal del método se convierte en un alias del array, es decir, una forma alternativa de acceder al mismo array, de forma que dentro del método tenemos acceso al array original y se puede modificar su contenido.

Veamos un ejemplo para entenderlo mejor.

El siguiente programa crea un array de 5 elementos de tipo int y mediante un método asigna a los elementos del array los valores 1, 2, 3, 4, 5.

public class PasarArrayMetodo {
    public static void main(String[] args) {
       int [] n = new int[5];
       for(int i = 0; i < n.length; i++){
           System.out.print(n[i] + " ");
       }
       System.out.println();
       inicializar(n);
       for(int i = 0; i < n.length; i++){
           System.out.print(n[i] + " ");
       }
    }

    public static void inicializar(int [] x){                                                                     
       for(int i = 0; i < x.length; i++){
           x[i] = i+1;
       }
    }
}

Para entender como funciona el paso de un array a un método vamos a representar de forma gráfica lo que realiza este programa.

En el método main se crea el array n:

 

A continuación se ejecuta el for:

 

Después del salto de línea se llama al método inicializar y se le pasa el array n:

 

La ejecución continúa dentro del método inicializar con el for que asigna un valor a los elementos del array:

 

El método finaliza y la ejecución del programa continúa en el método main. Se ejecuta el for que muestra el contenido del array:

 
En este ejemplo hemos visto cómo se pasa un array a un método en java y cómo desde dentro del método podemos modificar el array original.
 

Un método además de recibir un array como parámetro, puede devolver un array mediante la instrucción return.

Ejemplo:

Método que crea un array de N elementos de tipo entero.  A cada elemento le asigna un valor aleatorio entre 1 y 10. El valor de N lo recibe como parámetro. El método devuelve el array creado.

En el método main se llamará al método para crear el array y después se mostrará el contenido del array.

public class ArraysMetodos {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int elementos;
        do {
            System.out.print("Introduce tamaño del array: ");
            elementos = sc.nextInt();
            if (elementos < 1) {
                System.out.println("Valor no válido");
            }
        } while (elementos < 1);
        int[] numeros = crearArray(elementos); //se llama al método 
        //mostrar el contenido del array
        for(int i = 0; i < numeros.length; i++){
            System.out.println(numeros[i]);
        }
    }
    //método para crear y devolver un aray de N elementos de tipo int
    //los valores de los elementos del array se asignan de forma aleatoria 
    //con valores entre 1 y 10
    public static int[] crearArray(int N) {
        Random rnd = new Random();
        int[] A = new int[N]; //se crea un array de enteros de tamaño N
        //se asigna a cada elemento del array un número aleatorio entre 1 y 10                                    
        for (int i = 1; i < A.length; i++) { 
            A[i] = rnd.nextInt(10) + 1;
        }
        return A; //se devuelve el array creado
    }
}

Veamos ahora un ejemplo más completo de programa con métodos y arrays.

Ejemplo: Programa que crea un array de enteros. El tamaño del array se pide por teclado. Después se introducen por teclado los valores de los elementos del array. Finalmente se muestra el contenido del array y el mayor valor que contienen el array.  Se utilizarán los siguientes métodos:

  • Método para leer el tamaño del array.
  • Método para crear el array.
  • Método para introducir por teclado los valores de los elementos del array.
  • Método para mostrar el array.
  • Método que calcula y devuelve el mayor elemento del array.

public class ArraysMetodos2 {
    public static void main(String[] args) {

        int elementos = leerTamaño();
        int[] numeros = crearArray(elementos);
        llenarArray(numeros); 
        mostrarArray(numeros);
        System.out.println("El mayor elemento es: " + obtenerMayor(numeros));

    }

    //Método que lee y devuelve un entero que indica el tamaño de un array
    public static int leerTamaño() {
        Scanner sc = new Scanner(System.in);
        int N;
        do {
            System.out.print("Introduce tamaño del array > 0: ");
            N = sc.nextInt();
            if (N < 1) {
                System.out.println("Valor no válido");
            }
        } while (N < 1);
        return N;
    }


    //método para crear y devolver un aray de N elementos de tipo int
    public static int[] crearArray(int N) {
        return new int[N]; //se crea un array de enteros de tamaño N y se devuelve                                
    }

    //método que asigna valores a un array de enteros 
    //los valores se introducen por teclado
    public static void llenarArray(int[] A) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < A.length; i++) {
            System.out.print("Elemento " + i + ": ");
            A[i] = sc.nextInt();
        }
    }

    //método para mostrar el contenido de un array de enteros
    public static void mostrarArray(int[] A) {
        for (int i = 0; i < A.length; i++) {
            System.out.print(A[i] + " ");
        }
    }
    
    //método que calcula y devuelve el mayor elemento de un array de enteros
    public static int obtenerMayor(int [] A){
        int mayor = A[0]; //tomamos el primer elemento como mayor
        for(int i = 1; i < A.length; i++){ //desde el segundo elemento hasta el final                             
            if(A[i] > mayor){ //comprobamos si es mayor que el mayor actual
                mayor = A[i];
            }
        }
        return mayor;  //devolvemos el valor mayor obtenido
    }

}