0% encontró este documento útil (0 votos)
25 vistas13 páginas

Introducción A La Entrada Por Teclado

Este documento introduce los conceptos básicos de entrada por teclado en Java, explicando cómo leer caracteres y líneas de texto del flujo de entrada System.in utilizando las clases InputStream, InputStreamReader y BufferedReader. También describe las principales estructuras de control de flujo en Java como if/else, switch y los bucles for, while y do-while.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas13 páginas

Introducción A La Entrada Por Teclado

Este documento introduce los conceptos básicos de entrada por teclado en Java, explicando cómo leer caracteres y líneas de texto del flujo de entrada System.in utilizando las clases InputStream, InputStreamReader y BufferedReader. También describe las principales estructuras de control de flujo en Java como if/else, switch y los bucles for, while y do-while.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Introduccin a la entrada por teclado

En java para poder escribir se emplea el objeto System.out, pero para leer del teclado es
necesario emplear System.in. Este objeto pertenece a la clase InputStream, esto significa que
para leer tenemos que emplear sus mtodos, el ms bsico es read, que permite leer un carcter:

char caracter = (char) System.in.read();

Pero como podemos comprobar es muy incmodo leer de letra en letra, por ello para poder leer
una lnea completa emplearemos el siguiente cdigo:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String lnea = br.readLine();

En el cul creamos un InputStreamReader a partir de System.in y pasamos dicho


InputStreamReader al constructor de BufferedReader, el resultado es que las lecturas que
hagamos sobre br son en realidad realizadas sobre System.in, pero con la ventaja de que se
permite leer una lnea completa.

Es necesario realizar un import de java.io para poder emplear esta lectura de lneas.

Adems la lnea del readLine puede lanzar Excepciones, es por ello que hay que meterla entre
instrucciones try/catch para poder gestionar el posible error:

String lnea;

try{

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

lnea = br.readLine();

}catch(Exception e){ e.printStackTrace();}

System.out.println(lnea);

II.4. ESTRUCTURAS DE CONTROL

A. Introduccin

Durante un programa existen acciones que se han de repetir un nmero determinado


de veces. Por ejemplo, leer 3 caracteres de un flujo de entrada in se codificara:

in.read();

in.read();

in.read();
Este cdigo adems de poco elegante sera inviable para una repeticin de 3000
lecturas. Por eso aparecen las estructuras de control, que facilitan que determinadas
acciones se realicen varias veces, mientras que una condicin se cumpla, y en
definitiva, tomar decisiones de qu hacer en funcin de las condiciones que se den en
el programa en un momento dado de su ejecucin.

As, nuestro ejemplo se podra indicar como:

int i=0;

for ( i=0 ; i <= 3 ; i++ )

in.read();

Donde bastara cambiar el 3 por cualquier otro nmero para que la lectura se repitiese
ese nmero de veces.

El lenguaje Java soporta las estructuras de control:

Sentencia Clave

Toma de decisin if-else, switch-case

Bucle for, while, do-while

Miscelneo break, continue, label:, return, goto

Tabla 18: Estructuras de control

Aunque goto es una palabra reservada, actualmente el lenguaje Java no soporta la


sentencia goto. Se puede utilizar las sentencias de bifurcacin en su lugar.

B. Las sentencias condicionales: if y switch

a.) La sentencia if - else

La sentencia if-else de Java dota a los programas de la habilidad de ejecutar distintos


conjuntos de sentencias segn algn criterio.

La sintaxis de la sentencia if-else es:

if ( condicin )
Bloque de cdigo a ejecutar si la condicin es cierta

else

Bloque de cdigo a ejecutar si la condicin es falsa

La parte del else es opcional, y un bloque de cdigo puede ser simplemente la


sentencia vaca ; para representar que en ese caso no se ha de ejecutar nada.

Supongamos que un programa debe realizar diferentes acciones dependiendo de si el


usuario oprime el botn aceptar o el botn cancelar en una ventana de dialogo.
Nuestro programa puede realizar esto usando la sentencia if - else:

// La respuesta es Aceptar o Cancelar

if (respuesta == Aceptar) {

// cdigo para realizar la accin Aceptar

System.out.println( "Su peticion esta siendo atendida" );

else {

// cdigo para realizar la accin Cancelar

System.out.println( "Cancelando accion" );

Se pueden anidar expresiones if-else, para poder implementar aquellos casos con
mltiples acciones. Esto es lo que se suele denominar como sentencias else if.

Por ejemplo, supongamos que se desea escribir un programa que clasifique segn el
contenido de una variable valor, asigne una letra a una variable clasificacion: A para un
valor del 100-91, B de 90-81, C para 80-71 y F si no es ninguno de los anteriores:

int valor;

char clasificacion;

if (valor > 90)

{clasificacion='A';}

else

if (valor > 80)


{clasificacion='B';}

else

if (valor > 70)

{clasificacion='C';}

else

{clasificacion='F';}

Se pueden escribir los if en las mismas lneas que los else, pero desde este tutorial se
insta a utilizar la forma indentada (como se ha podido ver en el ejemplo), pues es ms
clara para el lector.

Este sistema de programacin (else if) no es demasiado recomendable, y por ello el


lenguaje Java incluye la sentencia switch, que veremos a continuacin, para dirigir el
flujo de control de variables con mltiples valores.

b.) La sentencia switch

Mediante la sentencia switch se puede seleccionar entre varias sentencias segn el


valor de cierta expresin.

La forma general de switch es la siguiente:

switch ( expresionMultivalor ) {

case valor1 : conjuntoDeSentencias; break;

case valor2 : conjuntoDeSentencias; break;

case valor3: conjuntoDeSentencias; break;

default: conjuntoDeSentencias; break;

La sentencia switch evala la expresinMultivalor y ejecuta el conjuntoDeSentencias


que aparece junto a la clusula case cuyo valor corresponda con el de la
expresinMultivalor.

Cada sentencia case debe ser nica y el valor que evala debe ser del mismo tipo que
el devuelto por la expresinMultivalor de la sentencia switch.

Las sentencias break que aparecen tras cada conjuntoDeSentencias provocan que el
control salga del switch y contine con la siguiente instruccin al switch. Las sentencias
break son necesarias porque sin ellas se ejecutaran secuencialmente las sentencias
case siguientes. Existen ciertas situaciones en las que se desea ejecutar
secuencialmente algunas o todas las sentencias case, para lo que habr que eliminar
algunos break.

Finalmente, se puede usar la sentencia default para manejar los valores que no son
explcitamente contemplados por alguna de las sentencias case. Su uso es altamente
recomendado.

Por ejemplo, supongamos un programa con una variable entera meses cuyo valor
indica el mes actual, y se desea imprimir el nombre del mes en que estemos. Se puede
utilizar la sentencia switch para realizar esta operacin:

int meses;

switch ( meses ){

case 1: System.out.println( "Enero" ); break;

case 2: System.out.println( "Febrero" ); break;

case 3: System.out.println( "Marzo" ); break;

//Demas meses

// . . .

case 12: System.out.println( "Diciembre" ); break;

default: System.out.println( "Mes no valido" ); break;

Por supuesto, se puede implementar esta estructura como una sentencia if else if:

int meses;

if ( meses == 1 ) {

System.out.println( "Enero" );

else

if ( meses == 2 ) {

System.out.println( "Febrero" );

}
// Y as para los dems meses

El decidir si usar la sentencia if o switch depende del criterio de cada caso. Se puede
decidir cul usar basndonos en la legibilidad, aunque se recomienda utilizar switch
para sentencias con ms de tres o cuatro posibilidades.

C. Sentencias de iteracin o bucles: for, do, while

a.) Bucle while

El bucle while es el bucle bsico de iteracin. Sirve para realizar una accin
sucesivamente mientras se cumpla una determinada condicin.

La forma general del bucle while es la siguiente:

while ( expresinBooleana ) {

sentencias;

};

Las sentencias se ejecutan mientras la expresinBooleana tenga un valor de


verdadero.

Se utiliza, por ejemplo para estar en un bucle del que no hay que salir hasta que no se
cumpla una determinada condicin. Por ejemplo, multiplicar un nmero por 2 hasta que
sea mayor que 100:

int i = 1;

while ( i <= 100 ) {

i = i * 2;

Con l se podran eliminar los bucles do-while y for por ser extensiones de ste, pero
que se incluyen en el lenguaje para facilitar la programacin.

b.) Bucle do-while

El bucle do-while es similar al bucle while, pero en el bucle while la expresin se evala
al principio del bucle y en el bucle do-while la evaluacin se realiza al final.

La forma general del bucle do-while es la siguiente:

do {

sentencias;
} while ( expresinBooleana );

La sentencia do-while es el constructor de bucles menos utilizado en la programacin,


pero tiene sus usos, cuando el bucle deba ser ejecutado por lo menos una vez.

Por ejemplo, cuando se lee informacin de un archivo, se sabe que siempre se debe
leer por lo menos un carcter:

int c;

do {

c = System.in.read( );

// Sentencias para tratar el carcter c

} while ( c != -1 ); // No se puede leer ms (Fin fichero)

c.) Bucle for

Mediante la sentencia for se resume un bucle do-while con una iniciacin previa. Es
muy comn que en los bucles while y do-while se inicien las variables de control de
nmero de pasadas por el bucle, inmediatamente antes de comenzar los bucles. Por
eso el bucle for est tan extendido.

La forma general de la sentencia for es la siguiente:

for ( iniciacin ; terminacin ; incremento )

sentencias;

La iniciacin es una sentencia que se ejecuta una vez antes de entrar en el bucle.

La terminacin es una expresin que determina cundo se debe terminar el bucle. Esta
expresin se evala al final de cada iteracin del bucle. Cuando la expresin se evala
a falso, el bucle termina.

El incremento es una expresin que es invocada en cada iteracin del bucle. En


realidad puede ser una accin cualquiera, aunque se suele utilizar para incrementar
una variable contador:

for ( i = 0 ; i < 10 ; i++ )

Algunos (o todos) estos componentes pueden omitirse, pero los puntos y coma siempre
deben aparecer (aunque sea sin nada entre s).

Se debe utilizar el bucle for cuando se conozcan las restricciones del bucle (su
instruccin de iniciacin, criterio de terminacin e instruccin de incremento).
Por ejemplo, los bucles for son utilizados comnmente para iterar sobre los elementos
de una matriz, o los caracteres de una cadena:

// cad es una cadena (String)

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

// hacer algo con el elemento i-simo de cad

D. Sentencias de salto: break, continue y return

a.) Sentencia break

La sentencia break provoca que el flujo de control salte a la sentencia inmediatamente


posterior al bloque en curso. Ya se ha visto anteriormente la sentencia break dentro de
la sentencia switch.

El uso de la sentencia break con sentencias etiquetadas es una alternativa al uso de la


sentencia goto, que no es soportada por el lenguaje Java.

Se puede etiquetar una sentencia poniendo una identificador Java vlido seguido por
dos puntos antes de la sentencia:

nombreSentencia: sentenciaEtiquetada

La sentencia break se utiliza para salir de una sentencia etiquetada, llevando el flujo
del programa al final de la sentencia de programa que indique:

break nombreSentencia2;

Un ejemplo de esto sera el programa:

void gotoBreak() {

System.out.println("Ejemplo de break como 'goto' ");

a: for( int i=1; i<10; i++ ){

System.out.print(" i="+i);

for( int j=1; j<10; j++ ){

if ( j==5 )

break a; //Sale de los dos bucles!!!

System.out.print(" j="+j);
}

System.out.print("No llega aqu");

Al interpretar break a, no solo se rompe la ejecucin del bucle interior (el de j), sino que
se salta al final del bucle i, obtenindose:

i=1 j=1 j=2 j=3

Nota: Se desaconseja esta forma de programacin, basada en goto, y con saltos de


flujo no controlados.

b.) Sentencia continue

Del mismo modo que en un bucle se puede desear romper la iteracin, tambin se
puede desear continuar con el bucle, pero dejando pasar una determinada iteracin.

Se puede usar la sentencia continue dentro de los bucles para saltar a otra sentencia,
aunque no puede ser llamada fuera de un bucle.

Tras la invocacin a una sentencia continue se transfiere el control a la condicin de


terminacin del bucle, que vuelve a ser evaluada en ese momento, y el bucle contina
o no dependiendo del resultado de la evaluacin. En los bucles for adems en ese
momento se ejecuta la clusula de incremento (antes de la evaluacin). Por ejemplo el
siguiente fragmento de cdigo imprime los nmeros del 0 al 9 no divisibles por 3:

for ( int i = 0 ; i < 10 ; i++ ) {

if ( ( i % 3 ) == 0 )

continue;

System.out.print( " " + i );

Del mismo modo que break, en las sentencias continue se puede indicar una etiqueta
de bloque al que hace referencia. Con ello podemos referirnos a un bloque superior, si
estamos en bucles anidados. Si dicha etiqueta no es indicada, se presupone que nos
referimos al bucle en el que la sentencia continue aparece.

Por ejemplo, el siguiente fragmento de cdigo:

void gotoContinue( ) {

f: for ( int i=1; i <5; i++ ) {


for ( int j=1; j<5; j++ ) {

if ( j>i ) {

System.out.println(" ");

continue f;

System.out.print( " " + (i*j) );

En este cdigo la sentencia continue termina el bucle de j y continua el flujo en la


siguiente iteracin de i. Ese mtodo imprimira:

24

369

4 8 12 16

Nota: Se desaconseja esta forma de programacin, basada en goto, y con saltos de


flujo no controlados.

c.) Sentencia return

La ltima de las sentencias de salto es la sentencia return, que puede usar para salir
del mtodo en curso y retornar a la sentencia dentro de la cual se realiz la llamada.

Para devolver un valor, simplemente se debe poner el valor (o una expresin que
calcule el valor) a continuacin de la palabra return. El valor devuelto por return debe
coincidir con el tipo declarado como valor de retorno del mtodo.

Cuando un mtodo se declara como void se debe usar la forma de return sin indicarle
ningn valor. Esto se hace para no ejecutar todo el cdigo del programa:

int contador;

boolean condicion;

int devuelveContadorIncrementado(){

return ++contador;
}

void metodoReturn(){

//Sentencias

if ( condicion == true )

return;

//Ms sentencias a ejecutar si condicin no vale true

Significado de los signos


Inicio/Final Decisin
Se utiliza para indicar Indica la
el inicio y el final de un comparacin de dos
diagrama; del Inicio datos y
slo puede salir una dependiendo del
lnea de flujo y al Final resultado lgico
slo debe llegar una (falso o verdadero)
lnea. se toma la decisin
de seguir un
camino del
diagrama u otro.

Entrada General Iteracin


Entrada/Salida de Indica que una
datos en General (en instruccin o grupo
esta gua, solo la de instrucciones
usaremos para la deben ejecutarse
Entrada). varias veces.

Entrada por teclado Salida Impresa


Instruccin de entrada Indica la
de datos por teclado. presentacin de
Indica que el uno o varios
computador debe resultados en forma
esperar a que el impresa.
usuario teclee un dato
que se guardar en
una variable o
constante.

Llamada a subrutina Salida en Pantalla


Indica la llamada a una
subrutina o Instruccin de
procedimiento presentacin de
determinado. mensajes o
resultados en
pantalla.

Accin/Proceso Conector
General Indica el enlace de
Indica una accin o dos partes de un
instruccin general que diagrama dentro de
debe realizar el la misma pgina.
computador (cambios
de valores de
variables,
asignaciones,
operaciones
aritmticas, etc).

Conector
Flujo Indica el enlace de
Indica el seguimiento dos partes de un
lgico del diagrama. diagrama en
Tambin indica el pginas diferentes.
sentido de ejecucin de
las operaciones.

También podría gustarte