PRG – Q5 Break Continue Array

Anuncio
Programación JAVA
[Capte la atención del lector con una descripción breve atractiva. Esta
descripción es un resumen breve del documento. Cuando esté listo para
agregar contenido, haga clic aquí y empiece a escribir.]
[Subtítulo del
documento]
Contenido
Break y Continue ........................................................................................................................... 2
Sentencia sin etiqueta (Unlabeled) ........................................................................................... 3
Sentencia con etiqueta (Labeled).............................................................................................. 3
Array (Vectores) ............................................................................................................................ 6
DECLARACIÓN DE ARRAYS ........................................................................................................ 6
ASIGNACIÓN DE ARRAYS ........................................................................................................... 6
Array Bidimensional .................................................................................................................. 8
Copying Arrays .......................................................................................................................... 9
Break y Continue
Las palabras reservadas break y continue, se utilizan en Java para detener
completamente un bucle (break) o detener únicamente la iteración actual y saltar a la
siguiente (continue). Normalmente si usamos break o continue, lo haremos dentro de
una sentencia if, que indicará cuándo debemos detener el bucle al cumplirse o no una
determinada condición.
La gran diferencia entre ambos es que, break, detiene la ejecución del bucle y salta a la
primera línea del programa tras el bucle y continue, detiene la iteración actual y pasa a
la siguiente iteración del bucle sin salir de él (a menos, que el propio bucle haya llegado
al límite de sus iteraciones).
NOTA: La sentencia continue debe estar siempre incluida dentro de un bucle, sino
recibiréis un error de compilación. Mientras que la sentencia break, podemos
encontrarla dentro de un bucle o en una sentencia switch. (Aunque esta regla no la
aplicamos a los break con etiqueta, ahora lo veremos)
La sentencia continue provoca que únicamente la iteración actual del bucle más interno
detenga su ejecución y que comience inmediatamente la siguiente iteración si el bucle
todavía no ha terminado. Por ejemplo:
for (int i = 0; i < 10; i++) {
System.out.println("Dentro del bucle");
continue;
System.out.println("Nunca lo escribira");
}
Cada vez que el programa alcance la sentencia continue, saltará a una nueva iteración
del bucle y por tanto la última sentencia System.out.println nunca llegará a escribirse. El
resultado del programa será escribir 10 veces “Dentro del bucle”.
Sin embargo, la sentencia break provoca que el programa detenga la ejecución del bucle
más interno y continúe la ejecución desde la primera línea de código que se encuentre
tras el bucle. Por ejemplo:
for (int i = 0; i < 10; i++) {
System.out.println("Dentro del bucle");
break;
System.out.println("Nunca lo escribira");
}
System.out.println("Tras el bucle");
Cuando el programa alcance la sentencia break, detendrá la ejecución del bucle y saldrá
de él. Por tanto el resultado de la ejecución del programa será:
"Dentro del Bucle"
"Tras el bucle"
El bucle for, sólo ejecuta una iteración y después termina, continuando el programa
desde la primera línea tras el bucle.
Las sentencias break y continue pueden llevar asociada una etiqueta (Labeled) o no
(Unlabeled). Vamos a ver ambos casos:
Sentencia sin etiqueta (Unlabeled)
Este es el uso más común que solemos hacer de las etiquetas break y continue. Los
ejemplos que hemos visto hasta ahora son ejemplos claros de sentencias sin etiqueta.
Veamos un par de ejemplos más:
Break:
boolean problema = true;
while (true) {
if (problema) {
System.out.println("There was a problem");
break;
}
}
// Siguiente línea de código
Continue:
while (!EOF) {
//leemos un campo de un fichero
if (wrongField) {
continue;
// vamos al siguiente campo
}
// procesamos el campo
}
Sentencia con etiqueta (Labeled)
Hay muchas sentencias en un programa en Java que pueden ser etiquetadas, pero su uso
más común es con los bucles for y while, asociadas a break y continue. Una etiqueta
debe ir colocada justo antes del bucle al que va etiquetando y se forma con un
identificador válido seguido de dos puntos (:).
Hay que tener muy clara la diferencia entre usar sentencias break y continue con
etiquetas a usar sentencias break y continue sin etiquetar. El uso de las sentencias break
y continue con etiquetas, será necesario cuando tengamos varios bucles anidados y
necesitemos indicar cuál es el bucle anidado que debe continuar su ejecución tras
romper el flujo normal de ejecución del programa. Por ejemplo:
bucle1:
for (int i = 0; i < 10; i++) {
System.out.println("Bucle i. i = "+i);
for (int j = 0; j < 10; j++) {
System.out.println("Bucle j. j = "+j);
for (int k = 0; k < 10; k++) {
System.out.println("Bucle k. k = "+k);
break bucle1;
}
}
}
En esta ocasión la salida del programa sería:
"Bucle i. i = 0"
"Bucle j. j = 0"
"Bucle k. k = 0"
El programa comienza la ejecución en el primer bucle for. Ejecuta la primera iteración y
entra en el bucle for anidado de “j”. Realiza la primera iteración y entra en el bucle for
anidado de “k”. Aquí nuevamente ejecuta la primera iteración y se encuentra con una
sentencia break. (Recordad que break, detiene la ejecución del bucle y provoca que el
programa continúe desde la primera línea depués del bucle). Pero en este caso es una
sentencia break con etiqueta, por tanto, continuará con la primera línea tras el bucle que
está indicado por la etiqueta. Y en esta ocasión es el bucle for de “i”; de esta forma, al
ejecutar esta sentencia break, provocamos el que programa deje de ejecutar el resto de
iteraciones de los tres bucles for anidados.
Veamos un ejemplo con una sentencia continue.
fuera:
for (int i=0; i<5; i++) {
for (int j=0; j<5; j++) {
System.out.println("Dentro");
continue fuera;
} // fin del bucle anidado
System.out.println("fuera"); // nunca lo escribe
}
System.out.println("Fuera del bucle");
La salida que obtenemos tras la ejecución del código anterior es:
Dentro
Dentro
Dentro
Dentro
Dentro
Fuera del bucle
Veamos porqué.
Después de que se ejecute la sentencia continue, el flujo de ejecución continúa
ejecutando la siguiente iteración del bucle for identificado por la etiqueta, hasta que éste
alcance la condición de parada. Finalmente, cuando la condición de parada del bucle se
alcanza, el bucle termina y se escribirá “Fuera del Bucle”. Si en lugar de poner una
sentencia continue, hubieramos puesto un break, el resultado hubiera sido:
Dentro
Fuera del bucle
NOTA: Las sentencias break y continue con etiquetas, deben estar dentro del bucle que
tiene la misma etiqueta, de otra forma, el codigo no compilará.
Ejercicio. (Entregar)
Realizar un programa que dado un entero por pantalla devuelva un listado de los
numero primos desde el cero hasta el dato introducido, usar bucles y break o continue.
Array (Vectores)
En este tema veremos el uso de los arrays o
vectores. Los arrays consisten en realizar una
carga con varios datos a una misma variable, es
decir, si quisiéramos almacenar las notas de n alumnos debería ser dinámico y
usaríamos los arrays independientemente para cada alumno pero con una misma
variable.
Empecemos a ver un poco sobre la forma de uso de los arrays
DECLARACIÓN DE ARRAYS
int[] ArrayEnteros = new int[50];
float[] ArrayReales = new float[50];
boolean[] Valo r = new boolean[50];
String[] CadenaMultiple = new String[50];
Primero identificamos con los primeros corchetes que es un tipo array, luego al
asignarle el valor new <tipo>[<Longitud>] estamos especificando cuantos datos va a
poder recibir nuestro array
byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
//this form is discouraged
float anArrayOfFloats[];
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
Ejemplo:
//create an array of integers
anArray = new int[10];
ASIGNACIÓN DE ARRAYS
anArray[0] = 100; // initialize first
element
anArray[1] = 200; // initialize second
element
anArray[2] = 300; // and so forth
Para asignar generalmente
usaremos
los
bucles
aunque no es algo obligatoria ya que se pueden asignar los valores según los
necesitemos. Como ejemplo haremos la asignación de todas las variables declaradas
mediante un bucle for
int i;
for(i=0;i<50;i++){
ArrayEnteros[i]=i;
ArrayReales[i]=i;
Valor[i]=true;
CadenaMultiple[i]="Cadena";}
El “i” dentro de los corchetes indica la posición de memoria donde se almacenará el
valor que se le pase, en este caso “i” empieza desde “0” tal como los arrays que siempre
empieza su posición de memoria desde 0 aunque podríamos hacer que recauda sus
valores desde otra posición. Como vemos el bucle va desde “0” hasta “49” lo cual
consta de 50 vueltas y llena a todos los arrays con los datos que les pasemos, si
llegaríamos a la vuelta “51” surgiría un error de desbordamiento de memoria ya que los
arrays lo declaramos sólo hasta 50 espacios de memoria
IMPRESIÓN DE ARRAYS
Para imprimir los valores de un array se usa la misma lógica de cuando lo almacenamos,
lo cual se puede apreciar seguidamente
Supongamos que queremos imprimir el ArrayEnteros pero sólo queremos los 7
primeros valores, lo haríamos de la siguiente forma
for(i=0;i<7;i++){
System.out.println(ArrayEnteros[i]);}
Resultado
0
1
2
3
4
5
6
Como podemos ver imprime sólo los 7 primeros valores, así podríamos imprimir los
valores de las posiciones de memoria que deseemos
Ejercicio EjArray01: (Entregar)
Realizar un programa que cree muestre los primeros 100 números por pantalla. Este programa
debe de estar realizado exclusivamente con Arrays, tipo de dato donde se almacenara
previamente los datos.
Array Bidimensional
En Java es posible crear arrays con más de una dimensión, pasando de la idea de lista, vector o
matriz de una sola fila a la idea de matriz de m x n elementos, estructuras tridimensionales,
tetradimensionales, etc. La sintaxis será:
Tipo_de_variable[ ][ ] ….. [ ] Nombre_del_array = new Tipo_de_variable[dimensión1]
[dimensión2]….[dimensiónN];
/* Ejemplo declaración - aprenderaprogramar.com */
int[][] matriz = new int[3][2];
El número de elementos sería: 3 x 2 = 6,
dónde 3 es el número de filas y 2 es el
número de columnas.
O alternativamente
int[][] matriz;
matriz = new int[3][2];
Ahora procedemos a cargar la matriz con
valores:
matriz[0][0]
matriz[0][1]
matriz[1][0]
matriz[1][1]
matriz[2][0]
matriz[2][1]
=
=
=
=
=
=
1;
2;
3;
4;
5;
6;
class MultiDimArrayDemo {
public static void main(String[] args) {
String[][] names = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"}
};
// Mr. Smith
System.out.println(names[0][0] + names[1][0]);
// Ms. Jones
System.out.println(names[0][2] + names[1][1]);
}
}
int[][] matriz = {{1,2},{3,4},{5,6}};
donde {1,2} corresponde a la fila 1, {3,4} a la fila 2 y {5,6} a la fila 3, y los números
separados por coma dentro de cada fila, corresponden a las columnas. En este caso, los
números (1, 3, 5) de cada una de las filas corresponden a la primera columna y los
números (2, 4, 6) atañen a la segunda columna.
Para obtener el número de filas de la matriz, podemos recurrir a la propiedad “length”
de los arrays, de la siguiente manera:
int filas = matriz.length;
Para el caso del número de columnas sería de la siguiente forma:
int columnas = matriz[0].length;
También Java nos permite la posibilidad de clonar una matriz, es decir, crear una matriz
nueva a partir de otra matriz, siguiendo esta sintaxis:
String[][] nuevaMatriz = matriz.clone();
donde clone() es un método especial, que permite la clonación de arrays de cualquier
dimensión en Java. De esta manera “nuevaMatriz” y “matriz” son 2 matrices distintas
pero con los mismos valores. Hablaremos del método clone más adelante.
Ejercicio EjArray02: (Entregar)
Vamos a plantear y resolver un ejercicio: queremos almacenar en una matriz el número
de alumnos con el que cuenta una academia, ordenados en función del nivel y del
idioma que se estudia. Tendremos 3 filas que representarán al Nivel básico, medio y de
perfeccionamiento y 4 columnas en las que figurarán los idiomas (0 = Inglés, 1 =
Francés, 2 = Alemán y 3 = Ruso). Se pide realizar la declaración de la matriz y asignarle
unos valores de ejemplo a cada elemento.
Copying Arrays
The System class has an arraycopy method that you can use to efficiently copy data
from one array into another:
public static void arraycopy(Object src, int srcPos,
Object dest, int destPos, int length)
Descargar