Rumbo a nuestra Certificación (Quinta entrega)

Buenas tardes a todos los chavos en vía de su certificación.

A continuación se anexa la quinta entrega de material para prepararnos.

Los temas contemplados son los siguientes:

a) Arrays.
b) Declaración de un Array.
c) Dimensión de un Array.
d) Acceso a los elementos de un Array.
e) Paso de un Array como argumento de llamada a un método
f) Array como tipo de devolución de un método.
g) Ejercicios propuestos.

Cualquier duda, comentario o aclaración pueden hacerlo en la sección correspondiente.

Saludos y felices compilaciones.

--------------------------------------------

Arrays.

Un Array es un objeto en el que se puede almacenart un conjunto de datos del mismo tipo. Cada uno de los elementos del array tiene asignado un ídice numérico según si posición, siendo "0" (cero) el índice del primero.

Declaración de un Array.

Un array debe declararse utilizando alguna de las siguientes expresiones:

tipo [ ] variable_array;
tipo variable_array [ ];

Como puede apreciarse, los corchetes pueden estar situados delante de la variable o detrás de ella. Los siguientes ejemplos son declaraciones válidas para un array:

int [ ] k;
String [ ] p;
char cads [ ];

Los arrays pueden declararse en los mismos lugares que las variables estándar: como atributos de una clase o locales en el interior de un método. Como ocurre con cualquier otro tipo de variable objeto, cuando un array se declara como atributo se inicializa implícitamente al valor null.

Dimensión de un Array.

Para asignar un tamaño al array se utiliza la expresión:

variable_array = new tipo [tamaño];

También se puede asignar tamaño al array en la misma línea de declaración de la variable. Los siguientes son ejemplos de dimensionado de un array:

k = new int [5];
cads = new char [10];
String [ ] noms = new String [10];

Cuando un array se dimensiona, todos sus elementos son inicializados explícitamente al valor por defecto del tipo correspondiente, independientemente de que la variable que contiene al array sea atributo o local.

Existe una forma de declarar, dimensionar e inicializar un array en una misma sentencia. La siguiente instrucción crea un array de cuatro enteros y los inicializa a los valores indicados entre llaves:

int [ ] nums = { 10, 20, 30, 40 };

Acceso a los elementos de un Array.

El acceso a los elementos de un array se realiza utilizando la siguiente expresión:

variable_array [índice]

Donde índice representa la posición a la que se quiere tener acceso, y cuyo valor debe estar comprendido entre "0" y "tamaño - 1".

Todos los objetos array exponen un atributo público, llamado length que permite conocer el tamaño al que ha sido dimensionado un array. Este atributo resulta especialmente útil en aquellas métodos que necesitan recorrer todos los elementos de un array, independientemente de su tamaño.

El siguiente ejemplo utiliza length para recorrer un array y rellenarlo con números enteros pares consecutivos, comenzando por el "0".

public class Arreglo001 {

        public static void main (String args[]) {

                int [] nums = new int [10];

                for(int i = 0; i < nums.length ; i++) {
                        nums[i] = i*2;
                        System.out.println("Elemento [" + i + "] = " + nums[i]);
                }

        }

}

El programa que se muestra a continuación calcula la suma de todos los números almacenados en un array de enteros, mostrando además el mayor y el menor de los números contenidos:

public class Arreglo002 {

        public static void main (String args[]) {

                int mayor, menor, suma;
                int [] nums = {3, 4, 8, 2};
                suma = 0;
                menor = nums[0];
                mayor = nums[0];

                // En las variables "mayor" y "menor" se obtendrán el mayor y el menor de los números buscados, respectivamente.
                // Ambas se inicializan con cualquiera de los valores del array.

                // Se recorre el array cen busca de los extremos, acumulando en "suma" cada uno de los números contenidos en el array.
                for(int i = 0; i < nums.length; i++) {

                        if(nums[i] > mayor) {
                                mayor = nums[i];
                        }

                        if(nums[i] < menor) {
                                menor = nums[i];
                        }

                        suma += nums[i];

                        System.out.println("Elemento [" + i +"] = " + nums[i]);

                }

                System.out.println("El número mayor es: " + mayor);
                System.out.println("El número menor es: " + menor);
                System.out.println("La suma de todos los números comprendidos en el array es: " + suma);

        }

}

Paso de un Array como argumento de llamada a un método.

Además de los tipos básicos, los arrays también pueden utilizarse como argumentos de llamada a métodos.

Para declarar un método que reciba como parámetro un array se emplea la siguiente sintaxis:

tipo método (tipo variable_array [ ] ) {
        // Código del método
}

El siguiente método recibe como parámetro un array de enteros:

void metodoEjemplo (int m[]) {
       
}

En cuanto a la llamada, debemos utilizar la siguiente expresión:

objeto.metodo(variable_array);

A modo de ejemplo explicativo, la siguiente clase representa una versión del programa anterior en el que se calculaban la suma, el mayor y el menor de los números almacenados en un array. En este caso, se desglosa el código de las operaciones sobre el array en tres métodos a los que se les pasa como parámetro el array de enteros:

public class Arreglo003 {

        public static void main (String args[]) {

                int mayor, menor, suma;
                int [] nums = {3, 4, 8, 2};

                // Llamada a los métodos
                imprimeArray(nums);
                suma = sumar(nums);
                menor = calculaMenor(nums);
                mayor = calculaMayor(nums);

                System.out.println("El número mayor es: " + mayor);
                System.out.println("El número menor es: " + menor);
                System.out.println("La suma de todos los números es: " + suma);

        }

        static int sumar(int numeros[]) {

                int s = 0;

                for(int i = 0; i < numeros.length; i++) {
                        s += numeros[i];
                }

                return s;

        }

        static int calculaMayor(int numeros[]) {

                int may = numeros[0];

                for(int i = 0; i < numeros.length; i++) {

                        if(numeros[i] > may) {
                                may = numeros[i];
                        }

                }

                return may;

        }

        static int calculaMenor(int numeros[]) {

                int men = numeros[0];

                for(int i = 0; i < numeros.length; i++) {

                        if(numeros[i] < men) {
                                men = numeros[i];
                        }

                }

                return men;

        }

        static void imprimeArray (int numeros[]) {

                for(int i = 0; i < numeros.length; i++) {
                        System.out.println("Elemento [" + i +"] = " + numeros[i]);
                }

        }

}

Array como tipo de devolución de un método.

También un array puede ser devuelto por un método tras la ejecución del mismo. El formato de un método de esas características es el siguiente:

tipo [] metodo (parametros) {
        // Código del método
        return variable_array;
}

El siguiente ejemplo devuelve un array con los cinco números enteros siguientes al número recibido como parámetro:

public class Arreglo004 {

        public static void main (String args[]) {

                int x = 10;

                imprimeArray(getNumeros(x));

        }

        static int [] getNumeros(int n) {

                int [] nums = new int[5];

                for(int i = 0; i < nums.length; i++) {
                        nums[i] = n+i+1;
                }

                return nums;

        }

        static void imprimeArray(int [] numeros) {

                for(int i = 0; i < numeros.length; i++) {
                        System.out.println("Elemento [" + i + "] = " + numeros[i]);
                }

        }

}

Ejercicios propuestos.

Se propone el siguiente ejercicio para practicar lo anteriormente aprendido.

Desarrollar un programa que, partiendo de un array con 10 números enteros cualesquiera, ordene de menor de menor a mayor los números contenidos en dicho array y posteriormente muestre el contenido ordenado en pantalla.

Se debe procurar realizar el programa de forma modular, desglosando el código de la clase en los métodos que se considere apropiados.

--------------------------------------------
Jhanno Foulds Gaunt - Km3.
Jueves, 21 de Mayo del 2009.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Sobre declaración de arrays...

También cabe señalar que la mayoría de los libros para certificación que involucre versiones modernas (y hablo de 1.4+) de Java y
en conjunto con la Java Language Specification recomiendan no usar la forma:

int arrayOfInts[] = new int[];

sino

int[] arrayOfInts = new int[];

Y entre las razones para ello destacan:

    • Un arreglo define un conjunto de elementos sobre el TIPO y no sobre el nombre de la referencia.
      Puede llegar a ser confuso ya que otras modalidades permitidas es Tipo[] Nombre[] lo que en realidad significa Tipo[][]
      La declaración de arrays de tipos genéricos y tipo de retorno en métodos funcionan estrictamente con el tipo, también puede ser confuso
  • Puedes decir que lo anterior son razones meramente estéticas, pero aún así válids, y más cuando trabajas con equipos donde existen lineamientos
    para escribir código.

    Saludos,