Sie sind auf Seite 1von 47

INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Java Scanner para lectura de datos.

La clase Scanner está disponible a partir de Java 5 y facilita la lectura de datos en los
programas Java.
Primero veremos varios ejemplos de lectura de datos en Java con Scanner y
después explicaremos en detalle cómo funciona.
Para utilizar Scanner en el programa tendremos que hacer lo siguiente:
1. Escribir el import
La clase Scanner se encuentra en el paquete java.util por lo tanto se debe incluir al
inicio del programa la instrucción:
import java.util.Scanner;
2. Crear un objeto Scanner
Tenemos que crear un objeto de la clase Scanner asociado al dispositivo de entrada.

Si el dispositivo de entrada es el teclado escribiremos:


Scanner sc = new Scanner(System.in);
Se ha creado el objeto sc asociado al teclado representado por System.in
Una vez hecho esto podemos leer datos por teclado.

Ejemplos de lectura:
Para leer podemos usar el método nextXxx() donde Xxx indica en tipo, por ejemplo
nextInt() para leer un entero, nextDouble() para leer un double, etc.
Ejemplo de lectura por teclado de un número entero:

int n;
System.out.print("Introduzca un número entero: ");
n = sc.nextInt();

Ejemplo de lectura de un número de tipo double:


double x;
System.out.print("Introduzca número de tipo double: ");
n = sc.nextDouble();

Ejemplo de lectura de una cadena de caracteres:


String s;
System.out.print("Introduzca texto: ");
s = sc.nextLine();
Ejemplo de programa Java con lectura de datos con Scanner:

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


1
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

/*El programa pide que se introduzca el nombre de la persona y lo muestra por


pantalla. A continuación lee por teclado el radio de una circunferencia de tipo double y
muestra su longitud. Además lee un entero y muestra su cuadrado.*/

import java.util.Scanner;
public class Radio {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //crear un objeto Scanner
String nombre;
double radio;
int n;
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine(); //leer un String
System.out.println("Hola " + nombre + "!!!");
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble(); //leer un double
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un número entero: ");
n = sc.nextInt(); //leer un entero
System.out.println("El cuadrado es: " + Math.pow(n,2));
}
}

Funcionamiento la clase Java Scanner.


De forma resumida podemos decir que cuando se introducen caracteres por teclado, el
objeto Scanner toma toda la cadena introducida y la divide en elementos
llamados tokens.
El carácter predeterminado que sirve de separador de tokens es el espacio en blanco.
Por ejemplo, si introducimos:

Esto es un ejemplo, lectura de datos.


Scanner divide la cadena en los siguientes tokens:
Esto
es
un
ejemplo,
lectura
de
datos.
Si introducimos la cadena:

12 20.001 Lucas w

Los tokens que se crean son:


HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
2
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

12
20.001
Lucas
w

A continuación, utilizando los métodos que proporciona la clase Scanner se puede


acceder a esos tokens y trabajar con ellos en el programa.

Ya hemos visto el método nextXxx(). Además la clase Scanner proporciona otros


métodos, algunos de los métodos más usados son:

METODO DESCRIPCIÓN
nextXxx() Devuelve el siguiente token como un tipo básico. Xxx es el
tipo. Por ejemplo, nextInt() para leer un entero, nextDouble
para leer un double, etc.
next() Devuelve el siguiente token como un String.
nextLine() Devuelve la línea entera como un String. Elimina el final \n
del buffer
hasNext() Devuelve un boolean. Indica si existe o no un siguiente token
para leer.
hasNextXxx() Devuelve un boolean. Indica si existe o no un siguiente token
del tipo especificado en Xxx, por ejemplo hasNextDouble()
useDelimiter(String) Establece un nuevo delimitador de token.

Cómo limpiar el buffer de entrada en Java


Cuando en un programa se leen por teclado datos numéricos y datos de tipo carácter o
String debemos tener en cuenta que al introducir los datos y pulsar intro estamos
también introduciendo en el buffer de entrada el intro.
Es decir, cuando en un programa introducimos un dato y pulsamos el intro como final
de entrada, el carácter intro también pasa al buffer de entrada.
Buffer de entrada si se introduce un 5: 5\n
En esta situación, la instrucción:

n = sc.nextInt();

Asigna a n el valor 5 pero el intro permanece en el buffer


Buffer de entrada después de leer el entero: \n

Si ahora se pide que se introduzca por teclado una cadena de caracteres:

System.out.print("Introduzca su nombre: ");


nombre = sc.nextLine(); //leer un String

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


3
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

El método nextLine() extrae del buffer de entrada todos los caracteres hasta llegar a
un intro y elimina el intro del buffer.
En este caso asigna una cadena vacía a la variable nombre y limpia el intro. Esto
provoca que el programa no funcione correctamente, ya que no se detiene para que se
introduzca el nombre.
Solución:

Se debe limpiar el buffer de entrada si se van a leer datos de tipo carácter a


continuación de la lectura de datos numéricos.

La forma más sencilla de limpiar el buffer de entrada en Java es ejecutar la


instrucción:

sc.nextLine();
Lo podemos comprobar si cambiamos el orden de lectura del ejemplo y leemos el
nombre al final:

import java.util.Scanner;
public class JavaApplication335 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
double radio;
int n;
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble();
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un número entero: ");
n = sc.nextInt();
System.out.println("El cuadrado es: " + Math.pow(n,2));
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine(); //leemos el String después del double
System.out.println("Hola " + nombre + "!!!");
}
}

Si lo ejecutamos ahora obtendremos


Introduzca el radio de la circunferencia: 34
Longitud de la circunferencia: 213.62830044410595
Introduzca un número entero: 3
El cuadrado es: 9.0
Introduzca su nombre: Hola !!!

Comprobamos que no se detiene para pedir el nombre.


La solución es escribir la instrucción
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
4
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

sc.nextLine();

después de la lectura del int y antes de leer el String:

import java.util.Scanner;
public class JavaApplication335 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nombre;
double radio;
int n;
System.out.print("Introduzca el radio de la circunferencia: ");
radio = sc.nextDouble();
System.out.println("Longitud de la circunferencia: " + 2*Math.PI*radio);
System.out.print("Introduzca un número entero: ");
n = sc.nextInt();
System.out.println("El cuadrado es: " + Math.pow(n,2));
sc.nextLine();
System.out.print("Introduzca su nombre: ");
nombre = sc.nextLine();
System.out.println("Hola " + nombre + "!!!");
}
}

Ahora la ejecución es correcta:


Introduzca el radio de la circunferencia: 23
Longitud de la circunferencia: 144.51326206513048
Introduzca un número entero: 5
El cuadrado es: 25.0
Introduzca su nombre: Lucas
Hola Lucas!!!

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


5
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Estructuras de control en Java.


Las estructuras de control determinan la secuencia de ejecución de las sentencias de
un programa.
Las estructuras de control se dividen en tres categorías:
Secuencial
Condicional o Selectiva
Iterativa o Repetitiva.
1. ESTRUCTURA SECUENCIAL
El orden en que se ejecutan por defecto las sentencias de un programa es secuencial.
Esto significa que las sentencias se ejecutan en secuencia, una después de otra, en el
orden en que aparecen escritas dentro del programa.
La estructura secuencial está formada por una sucesión de instrucciones que se
ejecutan en orden una a continuación de la otra.
Cada una de las instrucciones están separadas por el carácter punto y coma (;).
Las instrucciones se suelen agrupar en bloques.
El bloque de sentencias se define por el carácter llave de apertura ({) para marcar el
inicio del mismo, y el carácter llave de cierre (}) para marcar el final.
Ejemplo:
{
instrucción 1;
instrucción 2;
instrucción 3;
}
En Java si el bloque de sentencias está constituido por una única sentencia no es
obligatorio el uso de las llaves de apertura y cierre ({ }), aunque sí recomendable.

Ejemplo de programa Java con estructura secuencial: Programa que lee dos números
por teclado y los muestra por pantalla.
/* Programa que lea dos números por teclado y los muestre por pantalla.
*/
import java.util.*;
public class sumaEnteros {
public static void main(String[] args){
//declaración de variables
int n1, n2;
Scanner sc = new Scanner(System.in);
//leer el primer número
System.out.println("Introduce un número entero: ");
n1 = sc.nextInt(); //lee un entero por teclado
//leer el segundo número
System.out.println("Introduce otro número entero: ");
n2 = sc.nextInt(); //lee un entero por teclado

//mostrar resultado

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


6
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

System.out.println("Ha introducido los números: " + n1 + " y " +


n2);
}
}

Ejemplo de programa Java con estructura secuencial: Programa que lee dos números
de tipo double por teclado y calcula y muestra por pantalla su suma, resta y
multiplicación.
/*
* Programa que lee dos números de tipo double por teclado
* y muestra su suma, resta y multiplicación.
*/
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
double numero1, numero2;
System.out.println("Introduce el primer número:");
numero1 = sc.nextDouble();
System.out.println("Introduce el segundo número:");
numero2 = sc.nextDouble();
System.out.println("Números introducido: " + numero1 + " " +
numero2);
System.out.println
(numero1 + " + " + numero2 + " = " + (numero1+numero2));
System.out.println
(numero1 + " - " + numero2 + " = " + (numero1-numero2));
System.out.println
(numero1 + " * " + numero2 + " = " + numero1*numero2);
}
}
Para modificar el orden de ejecución de las instrucciones de un programa Java se
utilizan las estructuras condicionales y repetitivas.

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


7
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Programa que lea una cantidad de grados centígrados y la pase a grados Fahrenheit.
La fórmula correspondiente es:

F = 32 + ( 9 * C / 5)

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
double gradosC, gradosF;
System.out.println("Introduce grados Centígrados:");
gradosC = sc.nextDouble();
gradosF = 32 + (9 * gradosC / 5);
System.out.println(gradosC +" ºC = " + gradosF + " ºF");
}

Programa que lee por teclado el valor del radio de una circunferencia y calcula y
muestra por pantalla la longitud y el área de la circunferencia.

Longitud de la circunferencia = 2*PI*Radio, Area de la circunferencia = PI*Radio^2

import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double radio, longitud, area;
System.out.println("Introduce radio de la circunferencia:");
radio = sc.nextDouble();
longitud = 2 * Math.PI * radio;
area = Math.PI * Math.pow(radio, 2);
System.out.println("Longitud de la circunferencia -> " + longitud);
System.out.println("Area de la circunferencia -> " + area);
}
}

Programa que pase una velocidad en Km/h a m/s. La velocidad se lee por teclado.

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
double velocidad;
System.out.println("Introduzca velocidad en Km/h: ");
velocidad = sc.nextDouble();
System.out.println(velocidad + " Km/h -> " + velocidad*1000/3600 + " m/s");}

Programa lea la longitud de los catetos de un triángulo rectángulo y calcule la longitud


de la hipotenusa según el teorema de Pitágoras.

import java.util.*;
public class Main {
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
8
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
double cateto1, cateto2;
System.out.print("Introduzca longitud del primer cateto: ");
cateto1 = sc.nextDouble();
System.out.print("Introduzca longitud del segundo cateto: ");
cateto2 = sc.nextDouble();
System.out.println("Hipotenusa -> " + Math.sqrt(Math.pow(cateto1,2)+
Math.pow(cateto2, 2)));
}
}

Programa que tome como dato de entrada un número que corresponde a la longitud
del radio una esfera y nos calcula y escribe el volumen de la esfera que se
corresponden con dicho radio.

La fórmula para calcular el volumen de la esfera es


v = (4/3)*PI*r^3

Programa que calcula el volumen de una esfera


*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double radio, volumen;
System.out.print("Introduzca radio de la esfera: ");
radio = sc.nextDouble();
System.out.println("Volumen de la esfera de radio " + radio + " = "
+ (4.0/3)* Math.PI * Math.pow(radio, 3));
}
}

Programa Java que calcule el área de un triángulo en función de las longitudes de sus
lados (a, b, c), según la siguiente fórmula:
Area = RaizCuadrada(p*(p-a)*(p-b)*(p-c))
donde p = (a+b+c)/2
Para calcular la raíz cuadrada se utiliza el método Math.sqrt()
Programa que calcule el área de un triángulo en función de las longitudes de sus lados
(a, b, c)
* según la siguiente fórmula: area=raiz2(p(p-a)(p-b)(p-c)) donde p = (a+b+c)/2
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
9
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

double a,b,c,p;
System.out.print("Introduzca longitud del primer lado del triángulo: ");
a = sc.nextDouble();
System.out.print("Introduzca longitud del segundo lado del triángulo: ");
b = sc.nextDouble();
System.out.print("Introduzca longitud del tercer lado del triángulo: ");
c = sc.nextDouble();
p = (a+b+c)/2;
System.out.println("Area -> " + Math.sqrt(p*(p-a)*(p-b)*(p-c)));
}
}
Programa lea la longitud de los catetos de un triángulo rectángulo y calcule la longitud
de la hipotenusa según el teorema de Pitágoras.

import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double cateto1, cateto2;
System.out.print("Introduzca longitud del primer cateto: ");
cateto1 = sc.nextDouble();
System.out.print("Introduzca longitud del segundo cateto: ");
cateto2 = sc.nextDouble();
System.out.println("Hipotenusa -> " + Math.sqrt(Math.pow(cateto1,2)+
Math.pow(cateto2, 2)));
}
}

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


10
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

2. ESTRUCTURA CONDICIONAL, ALTERNATIVA O SELECTIVA


La estructura condicional determina si se ejecutan unas instrucciones u otras según se
cumpla o no una determinada condición.
En java la estructura condicional se implementa mediante:
- Instrucción if.
- Instrucción switch.
- Operador condicional ? :

2.1 INSTRUCCION if
Puede ser del tipo:
- Condicional simple: if
- Condicional doble: if ... else ...
- Condicional múltiple: if .. else if ..

La condición debe ser una expresion booleana es decir debe dar como resultado un
valor booleano (true ó false).
Condicional simple: se evalúa la condición y si ésta se cumple se ejecuta una
determinada acción o grupo de acciones. En caso contrario se saltan dicho grupo de
acciones.
if(expresión_booleana){
instrucción 1
instrucción 2
.......
}
Si el bloque de instrucciones tiene una sola instrucción no es necesario escribir las
llaves { } aunque para evitar confusiones se recomienda escribir las llaves siempre.

Ejemplo de programa Java con estructura condicional: Programa que pide por teclado
la nota obtenida por un alumno y muestra un mensaje si el alumno ha aprobado.

/*
* Programa que pide una nota por teclado y muestra un mensaje si la nota es
* mayor o igual que 5
*/
import java.util.*;
public class Ejemplo0If {
public static void main( String[] args ){
Scanner sc = new Scanner( System.in );
System.out.print("Nota: ");
int nota = sc.nextInt();
if (nota >5 ){
System.out.println("En horabuena!!");
System.out.println("Has aprobado");
}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
11
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

}
}
Condicional doble: Se evalúa la condición y si ésta se cumple se ejecuta una
determinada instrucción o grupo de instrucciones. Si no se cumple se ejecuta otra
instrucción o grupo de instrucciones.

if(expresión booleana){
instrucciones 1
}
else{
instrucciones 2
}

Ejemplo de programa Java que contiene una estructura condicional doble: Programa
que lee la nota de un alumno y muestra si el alumno ha aprobado o no.

/*
* Programa que pide una nota por teclado y muestra si se ha aprobado o no
*/
import java.util.*;
public class Ejemplo0If {
public static void main( String[] args ){
Scanner sc = new Scanner( System.in );
System.out.print("Nota: ");
int nota = sc.nextInt();
if (nota >= 5 ){
System.out.println("En horabuena!!");
System.out.println("Has aprobado");
}
else
System.out.println("Lo Siento, has suspendido");
}
}

Otro ejemplo de programa Java que contiene una estructura condicional doble:
Calcular si un número es par. El programa lee un número por teclado y muestra un
mensaje indicando si es par o impar.

/*
* programa que pide un número por teclado y calcula si es par o impar
*/
import java.util.*;
public class EjemploIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
12
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

System.out.println("Introduzca numero: ");


num = sc.nextInt();
if ((num%2)==0)
System.out.println("PAR");
else
System.out.println("IMPAR");
}
}
Condicional múltiple: Se obtiene anidando sentencias if ... else. Permite construir
estructuras de selección más complejas.
if (expresion_booleana1)
instruccion1;
else if (expresion_booleana2)
instruccion2;
else
instruccion3;
Cada else se corresponde con el if más próximo que no haya sido emparejado.
Una vez que se ejecuta un bloque de instrucciones, la ejecución continúa en la
siguiente instrucción que aparezca después de las sentencias if .. else anidadas.

Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa
que lee una hora (número entero) y muestra un mensaje según la hora introducida.
/*
* Programa que muestra un saludo distinto según la hora introducida
*/
import java.util.*;
public class Ejemplo2If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int hora;
System.out.println("Introduzca una hora (un valor entero): ");
hora = sc.nextInt();
if (hora >= 0 && hora < 12)
System.out.println("Buenos días");
else if (hora >= 12 && hora < 21)
System.out.println("Buenas tardes");
else if (hora >= 21 && hora < 24)
System.out.println("Buenas noches");
else
System.out.println("Hora no válida");
}
}

Ejemplo de programa Java que contiene una estructura condicional múltiple: Programa
que lee una nota (número entero entre 0 y 10) y muestra la calificación equivalente en
forma de texto.
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
13
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

/*
* programa que lee una nota y escribe la calificación correspondiente
*/
import java.util.*;
public class Ejemplo3If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double nota;
System.out.println("Introduzca una nota entre 0 y 10: ");
nota = sc.nextDouble();
System.out.println("La calificación del alumno es ");
if(nota < 0 || nota > 10)
System.out.println("Nota no válida");
else if(nota==10)
System.out.println("Matrícula de Honor");
else if (nota >= 9)
System.out.println("Sobresaliente");
else if (nota >= 7)
System.out.println("Notable");
else if (nota >= 6)
System.out.println("Bien");
else if (nota >= 5)
System.out.println("Suficiente");
else
System.out.println("Suspenso");
}
}

Ejercicio else if.


Al efectuar una compra en un cierto almacén, si adquirimos más de 100 unidades de
un mismo artículo, nos hacen un descuento del 40%, entre 25 y 100 un 20%; entre 10
y 24 un 10%; y no hay descuento para la adquisición de menos de 10 unidades. Se
pide calcular el importe a pagar. La solución se presentará de la siguiente forma:
Código de artículo……………………………………… 111
Cantidad comprada…………………………………… 100
Precio unitario…………………………………………… 100

Descuento…………………………………………………. 20%
Total………………………………………………………….. 8000

Comparar String en Java


Para comparar el contenido de dos Strings en Java se usa el método equals:
if ((cadena1.equals(cadena2))
En caso de que una cadena coincida exactamente con una constante se puede usar ==
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
14
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

String nombre = "Lucas";


if (nombre == "Lucas")
Para comparar Strings en el orden alfabético se usa el método compareTo
if (cadena1.compareTo(cadena2) < 0) // cadena1 antes que cadena2
if (cadena1.compareTo(cadena2) > 0) // cadena1 después que cadena2
if (cadena1.compareTo(cadena2) == 0) // cadena1 igual que cadena2
2.2 INSTRUCCION switch
Se utiliza para seleccionar una de entre múltiples alternativas.
La forma general de la instrucción switch en Java es la siguiente:
switch (expresión_entera){
case constante1:
instrucciones;
break;
case constante 2:
instrucciones;
break;
···
default:
instrucciones;
}
La expresión debe dar como resultado un número entero y las constantes case deben
ser también enteras.
Funcionamiento de la instrucción switch:
- Primero se evalúa la expresión y salta al case cuya constante coincida con el valor de la
expresión.
– Se ejecutan las instrucciones que siguen al case seleccionado hasta que se encuentra un
break o hasta el final del switch. El break produce un salto a la siguiente instrucción a
continuación del switch.
– Si ninguno de estos casos se cumple se ejecuta el bloque default (si existe). No es
obligatorio que exista un bloque default y no tiene porqué ponerse siempre al final,
aunque es lo habitual.
Ejemplo de programa Java que contiene una instrucción switch: Programa que lee por
teclado un mes (número entero) y muestra el nombre del mes.
/*
* Programa que pide un número de mes y muestra el nombre correspondiente
*/
import java.util.*;
public class Ejemplo0Switch {
public static void main(String[] args) {
int mes;
Scanner sc = new Scanner(System.in);
System.out.print("Introduzca un numero de mes: ");
mes = sc.nextInt();
switch (mes)
{
case 1: System.out.println("ENERO");
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
15
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

break;
case 2: System.out.println("FEBRERO");
break;
case 3: System.out.println("MARZO");
break;
case 4: System.out.println("ABRIL");
break;
case 5: System.out.println("MAYO");
break;
case 6: System.out.println("JUNIO");
break;
case 7: System.out.println("JULIO");
break;
case 8: System.out.println("AGOSTO");
break;
case 9: System.out.println("SEPTIEMBRE");
break;
case 10: System.out.println("OCTUBRE");
break;
case 11: System.out.println("NOVIEMBRE");
break;
case 12: System.out.println("DICIEMBRE");
break;
default : System.out.println("Mes no válido");
}
}
}

Ejemplo de programa Java que contiene una una instrucción switch: Programa que lee
dos números enteros por teclado y un operador (de tipo carácter) y muestra el
resultado de la operación.

/*

* Programa que pide dos números y un operador y muestra el resultado

*/

import java.util.*;

import java.io.*;

public class Ejemplo1Switch {

public static void main(String[] args) throws IOException{

int A,B, Resultado = 0 ;

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


16
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

char operador;

boolean calculado = true;

Scanner sc = new Scanner(System.in);

System.out.print("Introduzca un numero entero:");

A = sc.nextInt();

System.out.print("Introduzca otro numero entero:");

B = sc.nextInt();

System.out.print("Introduzca un operador (+,-,*,/):");

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

switch (operador) {

case '-' : Resultado = A - B;

break;

case '+' : Resultado = A + B;

break;

case '*' : Resultado = A * B;

break;

case '/' : if(B!=0)

Resultado = A / B;

else{

System.out.println("\nNo se puede dividir por cero");

calculado = false;

break;

default : System.out.println("\nOperador no valido");

calculado = false;

}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
17
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

if(calculado){

System.out.println("\nEl resultado es: " + Resultado);

2.3 OPERADOR CONDICIONAL ? :

Se puede utilizar en sustitución de la sentencia de control if-else.

Los forman los caracteres ? y :

Se utiliza de la forma siguiente:

expresión1 ? expresión2 : expresión3

Si expresión1 es cierta entonces se evalúa expresión2 y éste será el valor de la


expresión condicional. Si expresión1 es falsa, se evalúa expresión3 y éste será el valor
de la expresión condicional.

Ejemplo de programa Java que contiene un operador condicional: Programa que


calcula y muestra si un número que se lee por teclado es par o impar.

/*

* programa que pide un número por teclado y calcula si es par o impar

*/

import java.util.*;

public class Ejemplo1OperadorCondicional {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int num;

System.out.println("Introduzca numero: ");

num = sc.nextInt();

System.out.println((num%2)==0 ? "PAR" : "IMPAR");

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


18
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

3. ESTRUCTURA ITERATIVA O REPETITIVA


Permiten ejecutar de forma repetida un bloque específico de instrucciones.

Las instrucciones se repiten mientras o hasta que se cumpla una determinada


condición. Esta condición se conoce como condición de salida.

Tipos de estructuras repetitivas:


- ciclo while
- ciclo do – while
- ciclo for

3.1 CICLO WHILE


Las instrucciones se repiten mientras la condición sea cierta. La condición se
comprueba al principio del bucle por lo que las acciones se pueden ejecutar 0 ó
más veces.

La ejecución de un bucle while sigue los siguientes pasos:

1. Se evalúa la condición.
2. Si el resultado es false las instrucciones no se ejecutan y el programa sigue
ejecutándose por la siguiente instrucción a continuación del while.
3. Si el resultado es true se ejecutan las instrucciones y se vuelve al paso 1

Ejemplo de programa Java que contiene una instrucción while:


Programa que lee números por teclado. La lectura acaba cuando el número introducido sea
negativo. El programa calcula y muestra la suma de los números leídos.
/*
* Programa que lee números hasta que se lee un negativo y muestra la
* suma de los números leídos
*/
import java.util.*;
public class Ejemplo1While {
public static void main(String[] args) {
int suma = 0, num;
Scanner sc = new Scanner(System.in);
System.out.print("Introduzca un número: ");
num = sc.nextInt();
while (num >= 0){
suma = suma + num;
System.out.print("Introduzca un número: ");
num = sc.nextInt();
}
System.out.println("La suma es: " + suma );
}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
19
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

}
Ejemplo de programa Java que contiene una instrucción while:
Programa que lee un número entero N y muestra N asteriscos.

/*
* programa que lee un número n y muestra n asteriscos
*/
import java.util.*;
public class Ejemplo2While {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, contador = 0;
System.out.print("Introduce un número: ");
n = sc.nextInt();
while (contador < n){
System.out.println(" * ");
contador++;
}
}
}
Ejemplo de programa Java con una instrucción while:

/*
* programa que muestra una tabla de equivalencias entre
* grados Fahrenheit y grados celsius
*/
public class Ejemplo3While {
public static void main(String[] args) {
final int VALOR_INICIAL = 10; // limite inf. tabla
final int VALOR_FINAL = 100; // limite sup. tabla
final int PASO = 10 ; // incremento
int fahrenheit;
double celsius;
fahrenheit = VALOR_INICIAL;
System.out.printf("Fahrenheit \t Celsius \n");
while (fahrenheit <= VALOR_FINAL ){
celsius = 5*(fahrenheit - 32)/9.0;
System.out.printf("%7d \t %8.3f \n", fahrenheit, celsius);
fahrenheit += PASO;
}
}
}

3.2 CICLO DO – WHILE


Las instrucciones se ejecutan mientras la condición sea cierta.

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


20
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

La condición se comprueba al final del bucle por lo que el bloque de instrucciones se


ejecutarán al menos una vez. Esta es la diferencia fundamental con la instrucción
while. Las instrucciones de un bucle while es posible que no se ejecuten si la condición
inicialmente es falsa.
La ejecución de un bucle do - while sigue los siguientes pasos:
1. Se ejecutan las instrucciones a partir de do{
2. Se evalúa la condición.
3. Si el resultado es false el programa sigue ejecutándose por la siguiente instrucción a
continuación del while.
4. Si el resultado es true se vuelve al paso 1
Ejemplo de programa Java que contiene una instrucción do while:
Programa que lee un número entero N. El número debe ser menor que 100.

/*
* Programa que obliga al usuario a introducir un número menor que 100
*/
import java.util.*;
public class Ejemplo1DoWhile {
public static void main(String[] args) {
int valor;
Scanner in = new Scanner( System.in );
do {
System.out.print("Escribe un entero < 100: ");
valor = in.nextInt();
}while (valor >= 100);
System.out.println("Ha introducido: " + valor);
}
}
Ejemplo de programa Java con una instrucción do while:
/*
* Programa que lee un número entre 1 y 10 ambos incluidos
*/
import java.util.*;
public class Ejemplo2DoWhile {
public static void main(String[] args) {
int n;
Scanner sc = new Scanner( System.in );
do {
System.out.print("Escribe un número entre 1 y 10: ");
n = sc.nextInt();
}while (n<1 || n >10);
System.out.println("Ha introducido: " + n);
}
}
3.3 CICLO FOR

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


21
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Hace que una instrucción o bloque de instrucciones se repitan un número


determinado de veces mientras se cumpla la condición.
La estructura general de una instrucción for en Java es la siguiente:
for(inicialización; condición; incremento/decremento){
instrucción 1;
...........
instrucción N;
}
A continuación de la palabra for y entre paréntesis debe haber siempre tres zonas
separadas por punto y coma:
- zona de inicialización.
- zona de condición
- zona de incremento ó decremento.
Si en alguna ocasión no es necesario escribir alguna de ellas se pueden dejar en
blanco, pero los dos punto y coma deben aparecer.
Inicialización es la parte en la que la variable o variables de control del bucle toman
su valor inicial. Puede haber una o más instrucciones en la inicialización, separadas por
comas. La inicialización se realiza solo una vez.
Condición es una expresión booleana que hace que se ejecute la sentencia o bloque
de sentencias mientras que dicha expresión sea cierta. Generalmente en la condición
se compara la variable de control con un valor límite.
Incremento/decremento es una expresión que decrementa o incrementa la variable
de control del bucle.
La ejecución de un bucle for sigue los siguientes pasos:
1. Se inicializa la variable o variables de control (inicialización)
2. Se evalúa la condición.
3. Si la condición es cierta se ejecutan las instrucciones. Si es falsa, finaliza la
ejecución del bucle y continúa el programa en la siguiente instrucción después del for.
4. Se actualiza la variable o variables de control (incremento/decremento)
5. Se vuelve al punto 2.
Ejemplo de programa Java que contiene una instrucción for:
/*
* programa que muestra los números del 1 al 10
*/
public class Ejemplo0For {
public static void main(String[] args) {
int i;
for(i=1; i<=10;i++)
System.out.println(i + " ");
}
}
La instrucción for del ejemplo anterior la podemos interpretar así:
Asigna a i el valor inicial 1, mientras que i sea menor o igual a 10 muestra i + “ “ , a
continuación incrementa el valor de i y comprueba de nuevo la condición.
Ejemplo de programa Java con una instrucción for:
/*
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
22
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

* programa que muestra los números del 10 al 1


*/
public class Ejemplo2For {
public static void main(String[] args) {
int i;
for(i=10; i>0;i--)
System.out.println(i + " ");
}
}
Ejemplo de programa Java con una instrucción for:
/*
* programa que muestra una tabla de equivalencias entre
* grados Fahrenheit y grados celsius
*/
public class Ejemplo1For {
public static void main(String[] args) {
final int VALOR_INICIAL = 10; // limite inf. tabla
final int VALOR_FINAL = 100; // limite sup. tabla
final int PASO = 10 ; // incremento
int fahrenheit;
double celsius;
fahrenheit = VALOR_INICIAL;
System.out.printf("Fahrenheit \t Celsius \n");
for (fahrenheit = VALOR_INICIAL; fahrenheit <= VALOR_FINAL;
fahrenheit+= PASO) {
celsius = 5*(fahrenheit - 32)/9.0;
System.out.printf("%7d \t %8.3f \n", fahrenheit, celsius);
}
}
}

En las zonas de inicialización e incremento/decremento puede aparecer más de una


variable. En ese caso deben ir separadas por comas.
Ejemplo:
/*
* programa que muestra el valor de a, b y su suma mientras que la suma de
* ambas es menor de 10. En cada iteración el valor de a se incrementa en
* 1 unidad y el de b en 2
*/
public class Ejemplo3For {
public static void main(String[] args) {
int a, b;
for(a = 1, b = 1; a + b < 10; a++, b+=2){
System.out.println("a = " + a + " b = " + b + " a + b = " + (a+b));
}
}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
23
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

}
La salida de este programa es:
a=1 b=1 a+b=2
a=2 b=3 a+b=5
a=3 b=5 a+b=8
Aunque la instrucción repetitiva for, al igual que las instrucciones while y do- while, se
puede utilizar para realizar repeticiones cuando no se sabe a priori el número de
pasadas por el bucle, esta instrucción es especialmente indicada para bucles donde se
conozca el número de pasadas.
Como regla práctica podríamos decir que las instrucciones while y do-while se utilizan
generalmente cuando no se conoce a priori el número de pasadas, y la instrucción for
se utiliza generalmente cuando sí se conoce el número de pasadas.
Se ha de tener cuidado con escribir el punto y coma (;) después del paréntesis final del
bucle for. Un bucle for generalmente no lleva punto y coma final.
Por ejemplo el bucle:
int i;
for (i = 1; i <= 10; i++);
{
System.out.println("Elementos de Programación");
}
no visualiza la frase "Elementos de Programación" 10 veces, ni produce un mensaje de
error por parte del compilador.
En realidad lo que sucede es que se visualiza una vez la frase "Elementos de
Programación", ya que aquí la sentencia for es una sentencia vacía al terminar con un
punto y coma (;).
La sentencia for en este caso hace que i empiece en 1 y acabe en 11 y tras esas
iteraciones, se ejecuta la sentencia
System.out.println("Elementos de Programación");
3.4 BUCLES INFINITOS EN JAVA
Java permite la posibilidad de construir bucles infinitos, los cuales se ejecutarán
indefinidamente, a no ser que provoquemos su interrupción. Tres ejemplos:

for(;;){
instrucciones
}
for(;true;){
instrucciones
}
while(true){
instrucciones
}

3.5 BUCLES ANIDADOS


Bucles anidados son aquellos que incluyen instrucciones for, while o do-while unas
dentro de otras.
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
24
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Debemos tener en cuenta que las variables de control que utilicemos deben ser
distintas.
Los anidamientos de estructuras tienen que ser correctos, es decir, que una estructura
anidada dentro de otra lo debe estar totalmente.
Ejemplo de programa Java con bucles anidados:
/*
* Programa que dibuja un rectángulo sólido de asteriscos.
* El número de filas y columnas se pide por teclado
*/
import java.util.*;
public class Ejemplo1BuclesAnidados {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int filas, columnas;
//leer número de filas hasta que sea un número > 0
do{
System.out.print("Introduce número de filas: ");
filas = sc.nextInt();
}while(filas<1);
//leer número de columnas hasta que sea un número > 0
do{
System.out.print("Introduce número de columnas: ");
columnas = sc.nextInt();
}while(columnas<1);
for(int i = 1; i<=filas; i++){ //filas
for(int j = 1; j<=columnas; j++){ //columnas
System.out.print(" * ");
}
System.out.println();
}

}
}

La salida de este programa para filas = 6 y columnas = 10 es:


* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * * *
Ejemplo de programa Java con bucles anidados:
/*
* Programa que muestra una tabla con las potencias de x (x x2 x3 x4)
* para valores de x desde 1 hasta XMAX
*/
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
25
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

public class JavaApplication22 {


public static void main(String[] args) {
final int XMAX = 10;
int x, n;
//mostrar la cabecera de la tabla
System.out.printf("%10s%10s%10s%10s%n", "x","x^2","x^3","x^4");
for (x = 1; x <= XMAX; x++){ //filas
for (n = 1; n <= 4; n++){ //columnas
System.out.printf("%10.0f", Math.pow(x,n));
}
System.out.println();
}
}
}
x x^2 x^3 x^4
1 1 1 1
2 4 8 16
3 9 27 81
4 16 64 256
5 25 125 625
6 36 216 1296
7 49 343 2401

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


26
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Swing - JFrame

La componente básica que requerimos cada vez que implementamos una interfaz
visual con la libraría Swing es la clase JFrame. Esta clase encapsula una Ventana
clásica de cualquier sistema operativo con entorno gráfico (Windows, OS X, Linux
etc.)
Hemos dicho que esta clase se encuentra en el paquete javax.swing y como
generalmente utilizamos varias clases de este paquete luego para importarla
utilizamos la sintaxis:
import javax.swing.*;
Podemos hacer una aplicación mínima con la clase JFrame:
import javax.swing.JFrame;

public class Formulario {


public static void main(String[] ar) {
JFrame f=new JFrame();
f.setBounds(10,10,300,200);
f.setVisible(true);
}
}
Como vemos importamos la clase JFrame del paquete javax.swing:
import javax.swing.JFrame;
y luego en la main definimos y creamos un objeto de la clase JFrame (llamando
luego a los métodos setBounds y setVisible):
public static void main(String[] ar) {
JFrame f=new JFrame();
f.setBounds(10,10,300,200);
f.setVisible(true);
}
Pero esta forma de trabajar con la clase JFrame es de poca utilidad ya que rara
vez necesitemos implementar una aplicación que muestre una ventana vacía.
Lo más correcto es plantear una clase que herede de la clase JFrame y extienda
sus responsabilidades agregando botones, etiquetas, editores de línea etc.
Entonces la estructura básica que emplearemos para crear una interfaz visual
será:
Programa:
import javax.swing.*;
public class Formulario extends JFrame{
public Formulario() {
setLayout(null);
}

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


27
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

public static void main(String[] args) {


Formulario formulario1=new Formulario();
formulario1.setBounds(10,20,400,300);
formulario1.setVisible(true);
//formulario1.setResizable(true);
}
}
Importamos el paquete donde se encuentra la clase JFrame:
import javax.swing.*;
Planteamos una clase que herede de la clase JFrame:
public class Formulario extends JFrame{
En el constructor indicamos que ubicaremos los controles visuales con
coordenadas absolutas mediante la desactivación del Layout heredado (más
adelante veremos otras formas de ubicar los controles visuales dentro del
JFrame):
public Formulario() {
setLayout(null);
}
En la main creamos un objeto de la clase y llamamos a los métodos setBounds y
setVisible:
public static void main(String[] args) {
Formulario formulario1=new Formulario();
formulario1.setBounds(10,20,400,300);
formulario1.setVisible(true);
}
El método setBounds ubica el JFrame (la ventana) en la columna 10, fila 20 con
un ancho de 400 píxeles y un alto de 300.
Debemos llamar al método setVisible y pasarle el valor true para que se haga
visible la ventana.
Problemas propuestos
1. Crear una ventana de 1024 píxeles por 800 píxeles. Luego no permitir que el
operador modifique el tamaño de la ventana. Sabiendo que hacemos visible al
JFrame llamando el método setVisible pasando el valor true, existe otro método
llamado setResizable que también requiere como parámetro un valor true o false.
2. import javax.swing.*;
3. public class Formulario extends JFrame{
4. Formulario() {
5. setLayout(null);
6. }
7.
8. public static void main(String[] ar) {
9. Formulario formulario1=new Formulario();
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
28
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

10. formulario1.setBounds(0,0,1024,800);
11. formulario1.setResizable(false);
12. formulario1.setVisible(true);
13. }
14. }

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


29
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Swing - JButton
El tercer control visual de uso muy común es el que provee la clase JButton. Este
control visual muestra un botón.
El proceso para añadir botones a un control JFrame es similar a añadir controles
de tipo JLabel.
Ahora veremos la captura de eventos con los controles visuales. Uno de los
eventos más comunes es cuando hacemos clic sobre un botón.
Java implementa el concepto de interfaces para poder llamar a métodos de una
clase existente a una clase desarrollada por nosotros

Problema 1:

Confeccionar una ventana que muestre un botón. Cuando se presione finalizar la


ejecución del programa Java.

Programa:
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements
ActionListener {
JButton boton1;
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {


HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
30
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

if (e.getSource()==boton1) {
System.exit(0);
}
}

public static void main(String[] args) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,450,350);
formulario1.setVisible(true);
}
}
La mecánica para atrapar el clic del objeto de la clase JButton se hace mediante la
implementación de una interface. Una interface es un protocolo que permite la
comunicación entre dos clases. Una interface contiene uno o más cabecera de
métodos, pero no su implementación. Por ejemplo la interface ActionListener tiene
la siguiente estructura:
interface ActionListener {
public void actionPerformed(ActionEvent e) {
}
Luego las clases que implementen la interface ActionListener deberán especificar
el algorítmo del método actionPerformed.
Mediante el concepto de interfaces podemos hacer que desde la clase JButton se
puede llamar a un método que implementamos en nuestra clase.
Para indicar que una clase implementará una interface lo hacemos en la
declaración de la clase con la sintaxis:
public class Formulario extends JFrame implements ActionListener
{
Con esto estamos diciendo que nuestra clase implementa la interface
ActionListener, luego estamos obligados a codificar el método actionPerformed.
Definimos un objeto de la clase JButton:
JButton boton1;
En el constructor creamos el objeto de la clase JButton y mediante la llamada del
método addActionListener le pasamos la referencia del objeto de la clase JButton
utilizando la palabra clave this (this almacena la dirección de memoria donde se
almacena el objeto de la clase JFrame, luego mediante dicha dirección podemos
llamar al método actionPerformed):
public Formulario() {
setLayout(null);
boton1=new JButton("Finalizar");
boton1.setBounds(300,250,100,30);
add(boton1);
boton1.addActionListener(this);
}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
31
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

El método actionPerformed (este método de la interface ActionListener debe


implementarse obligatoriamente, en caso de no codificarlo o equivocarnos en su
nombre aparecerá un mensaje de error en tiempo de compilación de nuestro
programa.
El método actionPerformed se ejecutará cada vez que hagamos clic sobre el
objeto de la clase JButton.
La interface ActionListener y el objeto de la clase ActionEvent que llega como
parámetro están definidos en el paquete:
import java.awt.event.*;
Es decir que cada vez que se presiona el botón desde la clase JButton se llama al
método actionPerformed y recibe como parámetro un objeto de la clase
ActionEvent.
En el método actionPerformed mediante el acceso al método getSource() del
objeto que llega como parámetro podemos analizar que botón se presionó:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
System.exit(0);
}
}
Si se presionón el boton1 luego el if se verifica verdadero y por lo tanto llamando
al método exit de la clase System se finaliza la ejecución del programa.
La main no varía en nada con respecto a problemas anteriores.

Problema 2:

Confeccionar una ventana que contenga tres objetos de la clase JButton con las
etiquetas "1", "2" y "3". Al presionarse cambiar el título del JFrame indicando cuál
botón se presionó.

Problemas propuestos
1. Disponer dos objetos de la clase JButton con las etiquetas: "varón" y "mujer", al
presionarse mostrar en la barra de títulos del JFrame la etiqueta del botón
presionado.

import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements
ActionListener{
private JButton boton1,boton2;
public Formulario() {
setLayout(null);
boton1=new JButton("Varón");
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
32
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

boton1.setBounds(10,10,100,30);
boton1.addActionListener(this);
add(boton1);
boton2=new JButton("Mujer");
boton2.setBounds(10,70,100,30);
boton2.addActionListener(this);
add(boton2);
}

public void actionPerformed(ActionEvent e) {


if (e.getSource()==boton1) {
setTitle("Varón");
}
if (e.getSource()==boton2) {
setTitle("Mujer");
}
}

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,130,140);
formulario1.setVisible(true);
}
}

Swing - JLabel
Veamos la segunda componente de la librería swing llamada JLabel.
La clase JLabel nos permite mostrar básicamente un texto.

Problema 1:

Confeccionar una ventana que muestre el nombre de un programa en la parte


superior y su número de versión en la parte inferior. No permitir modificar el
tamaño de la ventana en tiempo de ejecución.

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


33
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Programa:
import javax.swing.*;
public class Formulario extends JFrame {
private JLabel label1,label2;
public Formulario() {
setLayout(null);
label1=new JLabel("Sistema de
Facturación.");
label1.setBounds(10,20,300,30);
add(label1);
label2=new JLabel("Vesion 1.0");
label2.setBounds(10,100,100,30);
add(label2);
}

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}
}
Importamos el paquete javax.swing donde se encuentran definidas las clase
JFrame y JLabel:
import javax.swing.*;
Heredamos de la clase de JFrame:
public class Formulario extends JFrame {
Definimos dos atributos de la clase JLabel:

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


34
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

private JLabel label1,label2;


En el constructor creamos las dos JLabel y las ubicamos llamando al método
setBounds, no hay que olvidar de llamar al método add que añade la JLabel al
JFrame:
public Formulario() {
setLayout(null);
label1=new JLabel("Sistema de Facturación.");
label1.setBounds(10,20,300,30);
add(label1);
label2=new JLabel("Vesion 1.0");
label2.setBounds(10,100,100,30);
add(label2);
}
Por último en la main creamos un objeto de la clase que acabamos de codificar,
llamamos al setBounds para ubicar y dar tamaño al JFrame, llamamos al método
setResizable pasando el valor false para no permitir modificar el tamaño del
JFrame en tiempo de ejecución y finalmente llamamos al método setVisible para
que se visualice el JFrame:
public static void main(String[] ar) {
Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,200);
formulario1.setResizable(false);
formulario1.setVisible(true);
}
Problemas propuestos
1. Crear tres objetos de la clase JLabel, ubicarlos uno debajo de otro y mostrar
nombres de colores.
2. import javax.swing.*;
3. public class Formulario extends JFrame {
4. private JLabel label1,label2,label3;
5.
6. public Formulario() {
7. setLayout(null);
8. label1=new JLabel("Rojo");
9. label1.setBounds(10,20,100,30);
10. add(label1);
11. label2=new JLabel("Verde");
12. label2.setBounds(10,60,100,30);
13. add(label2);
14. label3=new JLabel("Azul");
15. label3.setBounds(10,100,100,30);
16. add(label3);
17. }
18.
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
35
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

19. public static void main(String[] ar) {


20. Formulario formulario1=new Formulario();
21. formulario1.setBounds(0,0,300,200);
22. formulario1.setVisible(true);
23. }
24. }

Swing - JTextField
Así como podríamos decir que el control JLabel remplaza a la salida estándar
System.out.print, el control JTextField cumple la función de la clase Scanner para
la entrada de datos.
El control JTextField permite al operador del programa ingresar una cadena de
caracteres por teclado.

Problema 1:

Confeccionar un programa que permita ingresar el nombre de usuario y cuando se


presione un botón mostrar el valor ingresado en la barra de títulos del JFrame.

Programa:
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements
ActionListener{
private JTextField textfield1;
private JLabel label1;
private JButton boton1;
public Formulario() {
setLayout(null);
label1=new JLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=new JTextField();
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
36
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=new JButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {


if (e.getSource()==boton1) {
String cad=textfield1.getText();
setTitle(cad);
}
}

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,300,150);
formulario1.setVisible(true);
}
}
Definimos los tres objetos que colaboran con nuestra aplicación:
public class Formulario extends JFrame implements
ActionListener{
private JTextField textfield1;
private JLabel label1;
private JButton boton1;
En el constructor creamos los tres objetos y los ubicamos:
public Formulario() {
setLayout(null);
label1=new JLabel("Usuario:");
label1.setBounds(10,10,100,30);
add(label1);
textfield1=new JTextField();
textfield1.setBounds(120,10,150,20);
add(textfield1);
boton1=new JButton("Aceptar");
boton1.setBounds(10,80,100,30);
add(boton1);
boton1.addActionListener(this);
}
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
37
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

En el método actionPerformed se verifica si se presionó el objeto JButton, en caso


afirmativo extraemos el contenido del control JTextField mediante el método
getText:
public void actionPerformed(ActionEvent e) {
if (e.getSource()==boton1) {
String cad=textfield1.getText();
setTitle(cad);
}
}
En la variable auxiliar cad almacenamos temporalmente el contenido del
JTextField y seguidamente actualizamos el título del control JFrame.

Problema 2:

Confeccionar un programa que permita ingresar dos números en controles de tipo


JTextField, luego sumar los dos valores ingresados y mostrar la suma en la barra
del título del control JFrame.

Programa:
import javax.swing.*;
import java.awt.event.*;
public class Formulario extends JFrame implements
ActionListener{
private JTextField textfield1,textfield2;
private JButton boton1;
public Formulario() {
setLayout(null);
textfield1=new JTextField();
textfield1.setBounds(10,10,100,30);
add(textfield1);
textfield2=new JTextField();
textfield2.setBounds(10,50,100,30);
add(textfield2);
boton1=new JButton("Sumar");
HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.
38
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

boton1.setBounds(10,90,100,30);
add(boton1);
boton1.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {


if (e.getSource()==boton1) {
String cad1=textfield1.getText();
String cad2=textfield2.getText();
int x1=Integer.parseInt(cad1);
int x2=Integer.parseInt(cad2);
int suma=x1+x2;
String total=String.valueOf(suma);
setTitle(total);
}
}

public static void main(String[] ar) {


Formulario formulario1=new Formulario();
formulario1.setBounds(0,0,140,150);
formulario1.setVisible(true);
}
}
Definimos los tres objetos:
public class Formulario extends JFrame implements
ActionListener{
private JTextField textfield1,textfield2;
private JButton boton1;
En el método actionPerformed es donde debemos sumar los valores ingresados
en los controles de tipo JTextField. Para extraer el contenido de los controles
debemos extraerlos con el método getText:
String cad1=textfield1.getText();
String cad2=textfield2.getText();
Como debemos sumar numéricamente los valores ingresados debemos convertir
el contenido de las variables cad2 y cad2 a tipo de dato int:
int x1=Integer.parseInt(cad1);
int x2=Integer.parseInt(cad2);
El método parseInt de la clase Integer retorna el contenido de cad1 convertido a
int (provoca un error si ingresamos caracteres en el control JTextField en lugar de
números)

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


39
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

Una vez que tenemos los dos valores en formato numérico procedemos a
sumarlos y almacenar el resultado en otra variable auxiliar:
int suma=x1+x2;
Ahora tenemos que mostrar el valor almacenado en suma en la barra de títulos del
control JFrame, pero como el método setTitle requiere un String como parámetro
debemos convertirlo a tipo String:
String total=String.valueOf(suma);
setTitle(total);
Como veremos de acá en adelante es muy común la necesidad de convertir String
a enteros y enteros a String:
De String a int:
int x1=Integer.parseInt(cad1);
De int a String:
String total=String.valueOf(suma);
Problemas propuestos
1. Ingresar el nombre de usuario y clave en controles de tipo JTextField. Si se
ingresa las cadena (usuario: juan, clave=abc123) luego mostrar en el título del
JFrame el mensaje "Correcto" en caso contrario mostrar el mensaje "Incorrecto".
2. import javax.swing.*;
3. import java.awt.event.*;
4. public class Formulario extends JFrame implements
ActionListener {
5. private JLabel label1,label2;
6. private JTextField textfield1,textfield2;
7. private JButton boton1;
8. public Formulario() {
9. setLayout(null);
10. label1=new JLabel("Nombre:");
11. label1.setBounds(10,10,100,30);
12. add(label1);
13. label2=new JLabel("Clave:");
14. label2.setBounds(10,50,100,30);
15. add(label2);
16. textfield1=new JTextField();
17. textfield1.setBounds(130,10,100,30);
18. add(textfield1);
19. textfield2=new JTextField();
20. textfield2.setBounds(130,50,100,30);
21. add(textfield2);
22. boton1=new JButton("Confirmar");
23. boton1.setBounds(10,100,100,30);
24. add(boton1);
25. boton1.addActionListener(this);
26. }

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


40
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

27.
28. public void actionPerformed(ActionEvent e) {
29. if (e.getSource()==boton1) {
30. String cad1=textfield1.getText();
31. String cad2=textfield2.getText();
32. if (cad1.equals("juan")==true &&
cad2.equals("abc123")==true) {
33. setTitle("Correcto");
34. } else {
35. setTitle("Incorrecto");
36. }
37. }
38. }
39.
40. public static void main(String[] ar) {
41. Formulario formulario1=new Formulario();
42. formulario1.setBounds(0,0,240,200);
43. formulario1.setVisible(true);
44. }
45. }

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


41
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

ublic class Tarea1 {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

//Dado un entero i con solo dos valores posibles 0 y 1

//convertir i a un tipo de dato boolean

int i=1;

boolean b = (i != 0);

System.out.println(b);

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


42
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

int n=4;

double total=1;

for(int i=n; i>1; i--){

total*=i;

System.out.println("factorial de " + n +" es " + total);

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


43
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


44
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

int[][]arr2=new int [3][2];

int k=6;

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

for (int j=0; j<arr2[i].length; j++)

arr2[i][j]=k--;

System.out.print(arr2[i][j]+"");

System.out.println();

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


45
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

**********

// int[][]arr2=new int [3][2];

//Desarrollar el código para hacer que arr2

//tenga los elementos acomodados de la sig forma

// 0 1

//0-6 5

//1-4-3

//2-2-1

int[][]arr2=new int [3][2];

int k=6;

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

for (int j=0; j<arr2[i].length; j++)

arr2[i][j]=k--;

//System.out.print(arr2[i]+printarr2[j]+"");

System.out.print(arr2[i][j]+"");

// System.out.print(arr2[j]);

System.out.println();

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


46
INSTITUTO DE ESTUDIOS SUPERIORES DEL ISTMO DE TEHUANTEPEC, A.C.

HELIODORO JIMENEZ SANCHEZ - ING. EN SISTEMAS COMPUTACIONALES.


47

Das könnte Ihnen auch gefallen