martes, 30 de octubre de 2012

Sesión 3, Arrays y Control de Flujo.


Introducción:


En el presente capítulo se explica el concepto de array, la declaración, definición, construcción y uso. Complementaremos la explicación explicando las estructuras for, while, switch, if y else en su forma tradicional, y en la nueva sintaxis válida desde la versión 5 de java.

1.    Arrays.


Un array es un almacén de un número predeterminado de variables de un mismo tipo primitivo o de referencias a objetos de un mismo tipo, identificando cada elemento con un índice.

Con los arrays se pueden construir vectores y matrices de un mismo tipo. Los arrays son estructuras de gran utilidad, únicamente limitados porque en su definición se debe establecer un tamaño fijo y porque sólo pueden almacenar elementos de un mismo tipo.

Los arrays pueden tener uno o más índices, dependiendo de las dimensiones del array, así un array de 2 dimensiones se considera una matriz bidimensional, un array de 3 dimensiones una matriz tridimensional y así en lo sucesivo.

Cuando se define un array de objetos los elementos se inicializan a null, hasta que se rellenen. Si el array es de variables primitivas toman el valor 0, si son numéricas y false si son boolenas.

Declaración de arrays:

En el lenguaje java los arrays deben declararse y construirse antes de utilizarlos. A continuación ejemplos de declaraciones de arrays de diferentes tipos:

int [] enteros;
int enteros [];

boolean resultados [];
String [] consultas;

Definición o construcción de arrays:


Después de declarar un array se debe construir o definir. En la definición de un array se establece el tamaño del mismo.

A continuación ejemplos de declaración de arrays:

vector = new int[30];

consultas = new String[20];

También pueden declararse y definirse arrays de dos dimensiones como sigue:

int enteros [] [] = new int [3][];
enteros [0] = new int [2];
enteros [1] = new int [4];
enteros [2] = new int [2];

En el caso anterior se construye una matriz bidimensional que contiene 3 elementos de tipo array conteniendo 2, 4 y 2 elementos enteros respectivamente.

Pueden crearse matrices de tantas dimensiones como necesitemos.

Se puede declarar, definir e inicializar arrays de la siguiente forma:

int pares = {2, 4, 6, 8};
String nombres = {“Juan”, ”Pedro”, ”José”};

Un ejemplo de la utilización de arrays es la siguiente:

 
class ArrayDemo {
    public static void main(String[] args) {
        // declares an array of integers
        int[] anArray;
 
        // allocates memory for 10 integers
        anArray = new int[10];
           
        // initialize first element
        anArray[0] = 100;
        // initialize second element
        anArray[1] = 200;
        // etc.
        anArray[2] = 300;
        anArray[3] = 400;
        anArray[4] = 500;
        anArray[5] = 600;
        anArray[6] = 700;
        anArray[7] = 800;
        anArray[8] = 900;
        anArray[9] = 1000;
 
        System.out.println("Element at index 0: "+ anArray[0]);
        System.out.println("Element at index 1: "+ anArray[1]);
        System.out.println("Element at index 2: "+ anArray[2]);
        System.out.println("Element at index 3: "+ anArray[3]);
        System.out.println("Element at index 4: "+ anArray[4]);
        System.out.println("Element at index 5: "+ anArray[5]);
        System.out.println("Element at index 6: "+ anArray[6]);
        System.out.println("Element at index 7: "+ anArray[7]);
        System.out.println("Element at index 8: "+ anArray[8]);
        System.out.println("Element at index 9: "+ anArray[9]);
    }
} 
 
La salida del programa sería:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000

2.    Control de flujo.


Como se ha comentado anteriormente la programación Java es orientada a objetos, consistente en definir una serie de objetos que interactúan entre sí. Una forma de interactuar es mediante las construcciones semánticas de control de flujo.

Estructuras de control de flujo: 

El lenguaje Java tomó del lenguaje sentencias y sintaxis de control de flujo de otras sentencias, condicionales, repetitivas y combinaciones de ambas. Las sentencias de control de flujo java son las siguientes:


  •  if...else if...else
  • switch(…){case… break;  ……; default….break;}
  • do {…} while(….);
  • for(….){……}
  •  while(….){….}

Ejecución condicional if….else:

Se utiliza cuando interesa controlar una condición previa a la ejecución de una sentencia.

Un ejemplo de sentencia if...else es el siguiente:

void applyBrakes() {
    if (isMoving) {
        currentSpeed--;
    } else {
        System.err.println("The bicycle has " + "already stopped!");
    } 
}
 
Si la condición isMoving es true se reduce la velocidad, si no, se muestra el mensaje de bibicleta parada.
 
Las sentencias if else se podrán anidar en bloques alternativos tal y como veremos en ejercicios 
subsiguientes.
 
Control de flujo en bloques alternativos switch:
 
En el caso de varios bloques alternativos se debe usar la sentencia de control de flujo switch. Se evalúa la 
condición de dentro del paréntesis del switch y dependiendo del resultado se ejecutan unas u otras sentencias.
 
Un ejemplo es el siguiente:
 
public class SwitchDemo {
    public static void main(String[] args) {
 
        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}
 
La anterior clase muestra el mes que le pasamos al entero month.

Bloques repetitivos con contador; la estructura for:

Lo primero que se debe hacer es inicializar el contador, establecer la condición de parada, y decrementar o incrementar hasta llegar a la condición de parada.

El contador es un número entero sobre el que se opera hasta llegar a la condición de parada.

La forma de expresar un bucle for, así es como lo llamamos los programadores, es la siguiente:

for (initialization; termination; increment) {
    statement(s)
}
 
El siguiente ejemplo imprime en pantalla los números del 1 al 10:
 
class ForDemo {
    public static void main(String[] args){
         for(int i=1; i<11 i="i" span="span">
              System.out.println("Count is: " + i);
         }
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
 
Bloques repetitivos con evaluación de la condición al final del 
bloque: la estructura do ... while:
 
Para implementar un bloque repetitivo condicionado con evaluación al final del bloque tendremos que recurrir 
al bucle do...while.
 
El bucle do...while ejecuta y luego evalúa, vamos 007, es decir, siempre se ejecuta al menos una vez.
 
Se puede expresar como sigue:
 
do {
     statement(s)
} while (expression);
 
Un ejemplo de programa con do...while es el siguiente:
 
class DoWhileDemo {
    public static void main(String[] args){
        int count = 1;
        do {
            System.out.println("Count is: " + count);
            count++;
        } while (count < 11);
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10
 
Bloque repetitivo con la evaluación de la condición al principio del 
bloque: la estructura while:
 
Para implementar un bloque repetitivo condicionado con evaluación al principio del bloque tendremos que 
recurrir al bucle while.
 
El bucle while evalúa y luego ejecuta, es decir, no tiene porque ejecutarse ni una sola vez.
 
Se puede expresar como sigue:
 
while (expression) {
     statement(s)
}
 
El mismo programa de ejemplo de los bucles anteriores para la estructura while:
 
class WhileDemo {
    public static void main(String[] args){
        int count = 1;
        while (count < 11) {
            System.out.println("Count is: "
                               + count);
            count++;
        }
    }
}
 
La salida del programa es la siguiente:

Count is: 1
Count is: 2
Count is: 3
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9
Count is: 10

No hay comentarios:

Publicar un comentario