Universidad Nacional Autónoma de México - INTRODUCCIÓN A LA PROGRAMACIÓN EN JAVA Facultad de Ingeniería
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
Universidad Nacional Autónoma de México
Facultad de Ingeniería
INTRODUCCIÓN A LA
PROGRAMACIÓN EN JAVA
OpenBoxe®
http://www.openboxer.260mb.comIntroducción a la Programación en Java
1. El lenguaje de Programación Java y la Plataforma Java
El lenguaje de programación Java es un lenguaje
moderno, presentado por primera vez por Sun
Microsystems en el segundo semestre de 1995. Se
trata de un lenguaje de programación completamente
neutral con respecto a la plataforma de ejecución, lo
que permite, entre otras cosas, añadir programas a
una página web.
Lo que más les gusta a los programadores es:
La sencillez y elegancia de cómo se escriben los
programas en Java.
Se trata de un lenguaje de programación
orientado a objetos.
En el proceso de compilación se realizan una multitud de
comprobaciones que permiten eliminar muchos posibles errores
posteriores.
Las bibliotecas ya definidas que proporciona el lenguaje y que el
programador puede utilizar sin tener que hacerlas de nuevo.
La evolución de Java ha sido muy rápida, desde el momento en que se hizo
público el lenguaje y su primer entorno de programación hasta nuestros días, la
plataforma de java ha ido creciendo constantemente y a un ritmo cada vez
mayor, pues se han ido incorporando un gran número de programadores en
todo el mundo. Java 2 es la actual plataforma de desarrollo de programas que
consta de:
Un lenguaje de programación: Java
Un conjunto de bibliotecas estándar que se incluyen con la plataforma y
que deben existir en cualquier entorno con Java (Java Core). Estas
bibliotecas comprenden: strings, procesos, entrada, salida, propiedades
del sistema, fecha y hora, Applets, API de Red, internacionalización,
seguridad, componentes, serialización, JDBC, etc.
Un conjunto de herramientas para el desarrollo de programas. Entre ellas
cabe citar el compilador de Java, el generador de documentación, el
depurador de programas en Java, etc.
Un entorno de ejecución cuyo principal componente es una máquina
virtual para poder ejecutar los programas en código de bytes.
La plataforma Java 2 se puede utilizar desde distintos sistemas operativos,
ejecutándose cada uno de ellos en el hardware correspondiente.
1Introducción a la Programación en Java
Fuente Java
Herramientas
(javac y otras)
Bytecodes
Java
Sistema de ejecución API
(runtime)
Máquina virtual
Sistema operativo
(Solaris, Linux, Windows, MacOS,...)
Hardware
(Sparc, Pentium, PowerPC,...)
Figura 1. Elementos de la plataforma Java 2
2. Desarrollo de Programas
El desarrollo de programas Java, sigue un proceso como el que sigue:
Edición de programa fuente. Se denomina programa fuente al
programa que se escribe utilizando un entorno de programación o
cualquier editor, en un lenguaje de programación. En java los archivos
fuente tienen un nombre con terminación .java, donde el nombre ha de
ser el mismo que el empleado como nombre de la clase.
Compilación. Una vez escrito el programa, debemos de compilarlo; los
entornos de desarrollo facilitan esta tarea haciéndola casi invisible en
algunos de ellos o bien, utilizando en la línea de comandos la siguiente
instrucción: javac nombreArchivo.java
En este proceso, se comprueba que lo que se ha escrito es correcto en
Java y se traduce a otro lenguaje denominado código de bytes
(bytecode). Si durante la compilación se detectan errores, el entorno
avisará de los problemas detectados y dónde se han encontrado, para
que se puedan corregir. Si en la compilación no se detecta ningún error
se genera un archivo con extensión .class con el mismo nombre que la
clase que se compila.
Ejecución. Una vez compilado se ejecuta el programa y se comprueba
se hace lo que se había previsto; sino, habrá que modificarlo.
2Introducción a la Programación en Java
3. Entornos de desarrollo
Existen multitud de fabricantes que disponen de entornos de desarrollo para
Java. En primer lugar están teniendo una gran aceptación algunos entornos de
libre distribución. Se pueden utilizar otros entornos, aunque se tengan que
pagar licencias, ya que existen versiones reducidas que se pueden utilizar ara
aprender los fundamentos del lenguaje y la programación con Java.
NetBeans (java.sun.com o www.netbeans.org). NetBeans es un
proyecto de creación de un entorno de libre distribución profesional
patrocinado por Sun MicroSystems.
Eclipse (www.eclipse.org). Eclipse es un proyecto de creación de un
entorno genérico de desarrollo patrocinado principalmente por IBM. Su
objetivo es crear un marco de trabajo para distintas tareas y lenguajes
de programación.
BlueJ (www.bluej.org). BlueJ es un entorno desarrollado en la
Universidad de Kent. Antes de instalar el entorno, es necesario descargar
de la página de Sun el paquete J2SE. La interfaz es más sencilla que los
anteriores.
JCreator LE (www.jcreator.com). La versión LE es una versión de
uso gratuito; es necesario ingresar nuestro nombre y dirección de correo
electrónico, de esta manera, nos enviarán una URL de donde podremos
descargar el programa.
3Introducción a la Programación en Java
4. Entorno típico de Java
De manera general, los programas en Java pasan a través de cinco fases para
poder ejecutarse. Estas fases son: edición, compilación, carga,
verificación y ejecución.
El programa se crea en
un editor y se almacena
en disco en un archivo
con la terminación .java
El compilador crea los
códigos de bytes y los
almacena en disco, en
un archivo con la
terminación .class
El cargador de clases lee
los archivos .class (que
contienen códigos de
bytes) del disco y coloca
esos códigos de bytes en
la memoria
El verificador de código
de bytes confirma que
todos los códigos de
bytes sean válidos y no
violen las restricciones
de seguridad de Java
El intérprete lee los
Intérprete códigos de bytes y los
traduce en un lenguaje
que la computadora
pueda entender,
posiblemente
almacenando los valores
de datos a medida que
se ejecuta el programa
4Introducción a la Programación en Java
La fase 1 consiste en editar un archivo (mediante un programa de edición,
como bloc de notas) y se guarda en un dispositivo de almacenamiento
secundario (disco duro). Los nombres de archivo de los programas escritos en
Java terminan con la extensión .java.
En la fase 2, se efectúa el proceso de compilación del programa en Java,
mediante el comando javac. El compilador de Java traduce dicho programa a
códigos de bytes (instrucciones que el intérprete de Java puede entender). Si
el programa se compila correctamente, el compilador produce entonces un
archivo con extensión .class, que contiene los códigos de bytes que se
interpretarán durante la fase de ejecución.
javac nombreDeArchivo.java
En la fase 3 se realiza el proceso de carga. El programa debe colocarse en
memoria antes de ejecutarse, para esto Java cuenta con un cargador de
clases que toma los archivos .class y los transfiere a la memoria principal. A
medida que se cargan los bytes, el verificador de códigos de bytes se
encarga de verificar los códigos de bytes en la fase 4. El proceso de
verificación asegura que los códigos de bytes de las clases sean válidos y que
no violen las restricciones de seguridad de Java.
Finalmente en la fase 5, el intérprete bajo el control del sistema operativo,
interpreta el programa un código de bytes a la vez, realizando de esta forma las
acciones especificadas por el programa. Existen dos tipos de programas para
los cuales ocurre este proceso: aplicaciones y applets. Una aplicación es un
programa que generalmente se guarda y se ejecuta desde el equipo local del
usuario. Un applet es un pequeño programa que generalmente se ejecuta
desde un servido Web, de manera que los applets se cargan desde un equipo
remoto en el navegador, se ejecutan en éste y se descartan cuando termina su
ejecución.
Las aplicaciones se cargan en memoria y se ejecutan, utilizando el intérprete de
Java mediante el comando java, de la siguiente manera:
java nombreDeArchivo
5Introducción a la Programación en Java
5. Introducción a las aplicaciones en Java
Primer programa en Java
Consideremos una aplicación sencilla que muestra una línea de texto. Una
aplicación en Java es un programa que se ejecuta utilizando el intérprete java.
Consideremos cada una de las líneas del programa en orden.
Las líneas 1 y 2
// Bienvenido1.java
// Programa para imprimir texto.
Comienzan con //, indicando que el resto de la línea es un comentario. El
compilador de Java ignora estos comentarios. Un comentario de comienza con
// se llama comentario de fin de línea (o de una sola línea). También son
válidos los comentarios tradicionales denominados de múltiples líneas:
/* Éste es un comentario
Tradicinal. Puede
Dividirse en muchas líneas */
La línea 4
public class Bienvenido1 {
Comienza con una declaración de clase para la clase Bienvenido1. Todo
programa en Java consiste de cuando menos una declaración de clase que
debe ser definida por el usuario. Estas clases se conocen como clases definidas
por el usuario. La palabra reservada class introduce una declaración de clase
en Java la cual debe ir seguida inmediatamente por el nombre de la clase.
Las palabras reservadas se reservan para uso exclusivo de Java y siempre se
escriben en minúsculas.
Por convención, todos los nombres de clase en Java comienzan con una letra
mayúscula y la primera letra de cada palabra en el nombre de la clase debe ir
en mayúscula. El nombre de la clase se conoce como identificador, y está
compuesto por una serie de caracteres que pueden ser letras, dígitos, guiones
6Introducción a la Programación en Java
bajos (_)y signos de moneda ($), no pueden comenzar con un dígito y no
puede tener espacios. Java es sensible a mayúsculas y minúsculas.
Cuando se guarda una declaración de clase de tipo public, el nombre de éste
archivo debe ser el nombre de la clase, seguido de la extensión java.
La línea 7
public static void main( String args[] )
es el punto de inicio de toda aplicación Java. Los paréntesis después del main
indica que se trata de un bloque de construcción del programa, al cual se le
llama método. Las declaraciones de clases en Java generalmente contienen
uno o más métodos. En una aplicación en Java, sólo uno de estos métodos
debe llamarse main, de lo contrario, la aplicación no se ejecutará. Los métodos
pueden realizar tareas y devolver información una vez que hayan concluido. La
palabra reservada void indica que este método realizará una tarea, pero no
devolverá ningún tipo de información cuando se complete su tarea.
La línea 9
System.out.println( "Bienvenido a la programacion en Java!" );
indica a la computadora que realice una acción, en este caso, que imprima una
cadena de caracteres contenida entre los caracteres de comilla doble.
System.out se conoce como objeto de salida estándar y permite a las
aplicaciones en Java mostrar un conjunto de caracteres en la ventana de
comandos. El método System.out.println imprime una línea de texto en la
ventana de comandos.
Modificación de nuestro primer programa en Java
Mostrar una línea con varias instrucciones
¡Bienvenido a la Programación en Java! puede mostrarse en varias
formas:
Las líneas 9 y 10 del método main
System.out.print( "Bienvenido a " );
System.out.println( "la programacion en Java!" );
7Introducción a la Programación en Java
muestran una sola línea en la ventana de comandos. La primera instrucción
utiliza el método print de System.out para mostrar una cadena. A diferencia
de println, después de mostrar su argumento, print no posiciona el cursor de
salida al inicio de la siguiente línea en la ventana de comandos.
Mostrar varias líneas de texto con una sola instrucción.
Una sola instrucción puede mostrar varias líneas, utilizando caracteres de nueva
línea. Los caracteres de nueva línea indican a los métodos print y println de
System.out cuando deben de colocar el cursor de salida al inicio de la
siguiente línea en la ventana de comandos.
La barra diagonal inversa (\) que aparece en la línea 9, se le conoce como
carácter de escape e indica a los métodos print y println cuando se va a
imprimir un carácter especial.
Mostrar texto en un cuadro de diálogo
Muchas aplicaciones en Java utilizan ventanas o cuadros de diálogo para
mostrar la salida. Generalmente, los cuadros de diálogo son ventanas que
muestran mensajes importantes a los usuarios del programa. La clase
JOptionPane de Java proporciona cuadros de diálogo previamente
empaquetados.
8Introducción a la Programación en Java
Las numerosas clases predefinidas de Java se agrupan en categorías de clases
relacionadas, conocidas como paquetes. Un paquete es una colección de
clases con nombre y se conocen como la Interfaz de Programación de
Aplicaciones de Java (API). Los paquetes de la API se dividen en básicos
(comienzan con la palabra java) y opcionales (comienzan con la palabra
javax) y se utilizan para mejorar las capacidades de Java. En este ejemplo
utilizaremos la clase predefinida de Java JOptionPane, la cual se encuentra en
el paquete javax.swing.
La línea 5
import javax.swing.JOptionPane; // el programa usa JOptionPane
es una declaración import y nos permite identificar las clases predefinidas que
se utilizan en un programa en Java. El compilador trata de cerciorarse de que
se utilicen correctamente las clases de la API de Java y las declaraciones
import ayudan al compilador a localizar las clases que se desean utilizar. El
paquete javax.swing ayuda a los programadores a crear más fácilemente
Interfaces Gráficas de Usuario (GUIs). Los componentes de la GUI facilitan
al usuario de un programa la introducción de datos y el formato o presentación
de los mismos.
El las líneas 12 y 13 del método main
JOptionPane.showMessageDialog(
null, "Bienvenido\na\nla programacion\nen Java!" );
llaman al método showMessageDialog de la clase JOptionPane para
mostrar un cuadro de diálogo que contiene un mensaje. Este método requiere
de dos argumentos y se separan por comas (,). El primer argumento siempre
será la palabra reservada null y el segundo argumento es la cadena a mostrar
en el cuadro de diálogo. El primer argumento ayuda a la aplicación en Java a
determinar en dónde se va a colocar el cuadro de diálogo. Como el primer
elemento es null, el cuadro de diálogo aparece en el centro de la pantalla.
El método JOptionPane.showMessageDialog es un método especial de la
clase JOptionPane, el cual se conoce como método static. Generalmente, los
métodos estáticos se llaman utilizando el nombre de su clase, seguido de su
punto (.) y el nombre del método, de la siguiente manera
NombreDeLaClase.nombreDelMétodo(argumentos)
La barra de título del cuadro de diálogo contiene la cadena Mensaje, para
indicar que este cuadro de diálogo va a presentar un mensaje al usuario. El
cuadro de diálogo incluye Aceptar(OK), que el usuario puede oprimir para
descartarlo.
La línea 15
System.exit( 0 ); // terminar la aplicación con la ventana
9Introducción a la Programación en Java
Utiliza el método estático exit de la clase System para terminar la aplicación.
Esto se requiere para terminar cualquier aplicación que muestre una interfaz
gráfica de usuario. System es una clase del paquete java.lang. Observe que
la clase System no se importa con una declaración import al principio del
programa, de manera predeterminada, el paquete java.lang se importa en
todos los programas de Java.
El argumento 0 para el método exit indica que el programa terminó
correctamente (Un valor distinto de 0 generalmente indica que ha ocurrido un
error).
Otra aplicación en Java: Suma de enteros
Nuestra siguiente aplicación recibe como entrada dos enteros introducidos por
el usuario mediante el teclado, calcula la suma de los valores y muestra el
resultado. Este programa utiliza otro cuadro de diálogo predefinido de la clase
JOptionPane, el cual se conoce como cuadro de diálogo de entrada que
permite al usuario introducir un valor para utilizarlo en el programa. El
programa utiliza un cuadro de diálogo de mensaje que contiene la suma de
enteros.
La línea 7
10Introducción a la Programación en Java
public class Suma{
comienza la declaración de la clase Suma. El nombre de este archivo para esta
clase public debe ser Suma.java.
Las líneas 12 y 13
String primerNumero; // 1a cadena introducida por el usuario
String segundoNumero; // 2a cadena introducida por el usuario
son instrucciones para declarar variables (declaraciones), las cuales especifican
los nombres y los tipos de las variables que se utilizan en este programa. Una
variable es una ubicación en la memoria de la computadora. Todas las variables
deben declararse con un nombre y un tipo antes de poder usarse. Estas
declaraciones especifican que dichas variables son de tipo String (secuencias
de caracteres) y este tipo se define en el paquete java.lang.
Las declaraciones puede dividirse en varias líneas, separando cada variable de
la declaración con una coma (lista separada con comas). Varias variables del
mismo tipo pueden declararse en una sola declaración o en varias de ellas.
String primerNumero, // 1a cadena introducida por el usuario
segundoNumero; // 2a cadena introducida por el usuario
Las líneas 15 a 17
int numero1; // primer número a sumar
int numero2; // segundo número a sumar
int suma; // suma de numero1 y numero2
declaran que estas variables son datos de tipo de int, es decir, guarda valores
enteros.
La línea 20
primerNumero = JOptionPane.showInputDialog( “Escriba el
primer entero" );
utiliza el método showInputDialog de JOptionPane para mostrar un cuadro
de diálogo. El argumento para showInputDialog indica que el usuario debe
escribir en el campo de texto. Este mensaje se llama indicador, ya que hace
que el usuario realice una acción específica. La forma simple de entrada en
Java es similar a la salida en la ventana de comando, pero limitada. El resultado
del método showInputDialog de JOptionPane (un valor String que
contiene los caracteres escritos por el usuario) se da a la variable
primerNumero utilizando el operador de asignación =. Lo mismo sucede con
las líneas 23 y 24
segundoNumero = JOptionPane.showInputDialog( "Escriba el
segundo entero" );
Las líneas 27 y 28
numero1 = Integer.parseInt( primerNumero );
numero2 = Integer.parseInt( segundoNumero );
11Introducción a la Programación en Java
convierten los dos valores String que introduce el usuario en valore Int, para
que el programa pueda utilizarlos en el cálculo. El método estático parseInt de
la clase Integer convierte un número String en un número entero. Dicha
clase también se encuentra en el paquete java.lang.
La línea 31
suma = numero1 + numero2;
es una instrucción de asignación que calcula la suma de esas dos variables. Una
vez realizado el cálculo, las líneas 34 y 35
JOptionPane.showMessageDialog( null, "La suma es " + suma,
"Resultados", JOptionPane.PLAIN_MESSAGE );
utiliza el método estático showMessageDialog de la clase JOptionPane para
mostar el resultado de la suma. Esta nueva versión requiere de cuatro
argumentos. El primer argumento es null, que indica que el cuadro de diálogo
aparecerá en el centro de la pantalla, el segundo argumento es el mensaje a
mostrar. El tercer argumento representa la cadena que debe aparecer en la
barra de título del cuadro de diálogo. El cuarto argumento
JOptionPane.PLAIN_MESSAGE, es el tipo de cuadro de diálogo, un valor
que indica el tipo de cuadro de diálogo de mensaje que se va a mostrar. El
tercer argumento utiliza el operador + que es utilizado frecuentemente para la
concatenación de cadenas.
Aritmética
Mostrar las tablas de los operadores aritméticos utilizados en java
Toma de desiciones: Operadores de igualdad y relacionales
Mostrar la tabla de operadores de igualdad y relacionales
El siguiente ejemplo utiliza seis instrucciones if para comprobar dos números
introducidos por el usuario. Si la condición en cualquiera de las instrucciones if
es verdadera, se ejecuta la instrucción de asignación asociada. Se introducen
valores a través de los cuadros de diálogo de entrada. Se hacen las
conversiones requeridas (String int) y se efectúan las comparaciones:
// Comparacion.java
// Compara enteros utilizando instrucciones if, operadores relacionales
// y de igualdad.
// paquetes de Java
import javax.swing.JOptionPane;
public class Comparacion {
// el método main empieza la ejecución de la aplicación de Java
12Introducción a la Programación en Java
public static void main( String args[] )
{
String primerNumero; // primera cadena introducida por el usuario
String segundoNumero; // segunda cadena introducida por el usuario
String resultado; // una cadena que contiene el resultado
int numero1; // primer número para comparar
int numero2; // segundo número para comparar
// recibir el primer número del usuario como una cadena
primerNumero = JOptionPane.showInputDialog( "Escriba el primer
entero:" );
// recibir el segundo número del usuario como una cadena
segundoNumero =
JOptionPane.showInputDialog( "Escriba el segundo entero :" );
// convertir los números de tipo String a tipo int
numero1 = Integer.parseInt( primerNumero );
numero2 = Integer.parseInt( segundoNumero );
// inicializar resultado con cadena vacía
resultado = "";
if ( numero1 == numero2 )
resultado = resultado + numero1 + " == " + numero2;
if ( numero1 != numero2 )
resultado = resultado + numero1 + " != " + numero2;
if ( numero1 < numero2 )
resultado = resultado + "\n" + numero1 + " < " + numero2;
if ( numero1 > numero2 )
resultado = resultado + "\n" + numero1 + " > " + numero2;
if ( numero1 = numero2 )
resultado = resultado + "\n" + numero1 + " >= " + numero2;
// Mostrar los resultados
JOptionPane.showMessageDialog( null, resultado, "Resultados de la
comparacion",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 ); // terminar la aplicación
} // fin del método main
} // fin class Comparación
13Introducción a la Programación en Java
6. Instrucciones de Control: Parte 1
Java tiene tres tipos de estructuras de selección. La estructura if selecciona una
acción si la condición es verdadera, o evita la acción si la condición es falsa. La
instrucción if…else realiza una acción si la condición es verdadera, o realiza
una acción distinta si la acción es falsa. La instrucción switch realiza una de
entre varias acciones, dependiendo del valor de la expresión.
La instrucción if es una estructura de selección simple, ya que selecciona o
ignora una sola acción (o un solo grupo de acciones). La instrucción if…else es
una estructura de selección doble, ya que selecciona entre dos acciones
distintas (o grupos de acciones). La instrucción switch es una estructura de
selección múltiple, ya que selecciona entre diversas acciones (o grupos de
acciones).
Java también cuenta con tres estructuras de repetición (estructuras de
ciclo) que permiten a los programas ejecutar acciones en forma repetida,
siempre y cuando una condición llamada la condición de continuación de ciclo
siga siendo verdadera. Las estructuras de repetición se implementan con las
instrucciones while, do…while y for. Las instrucciones while y for realizan la
acción (o grupo de acciones) cero o más veces, si la condición de continuación
de ciclo inicialmente es falsa, no se realiza ninguna acción. La instrucción
do…while realiza la acción una o más veces.
Repetición controlada por un contador
14Introducción a la Programación en Java
Repetición controlada por un centinela
// Fig. 4.9: Promedio2.java
// Programa del promedio de una clase mediante la repetición controlada por
// centinela.
import java.text.DecimalFormat; // clase para dar formato a los números
import javax.swing.JOptionPane;
public class Promedio2 {
public static void main( String args[] )
{
int total; // suma de las calificaciones
int contadorCalif; // número de calificaciones introducidas
int calificacion; // valor de la calificación
double promedio; // número con punto decimal para el promedio
String cadenaCalif; // calificación introducida por el usuario
// fase de inicialización
total = 0; // incializar el total
contadorCalif = 0; // inicializar contador de ciclo
15Introducción a la Programación en Java
// fase de procesamiento
// obtener la primera calificación del usuario
cadenaCalif = JOptionPane.showInputDialog(
"Escriba calificación como entero o -1 para salir:" );
// convertir cadenaCalif en int
calificacion = Integer.parseInt( cadenaCalif );
// iterar hasta que el usuario introduzca el valor centinela
while ( calificacion != -1 ) {
total = total + calificacion; // sumar calificacion al total
contadorCalif = contadorCalif + 1; // incrementar el contador
// obtener siguiente calificación del usuario
cadenaCalif = JOptionPane.showInputDialog(
"Escriba calificación como entero o -1 para salir:" );
// convertir cadenaCalif en int
calificacion = Integer.parseInt( cadenaCalif );
} // fin de instrucción while
// fase de terminación
DecimalFormat dosDigitos = new DecimalFormat( "0.00" );
// si el usuario introdujo al menos una calificación...
if ( contadorCalif != 0 ) {
// calcular el promedio de todas las calificaciones introducidas
promedio = (double) total / contadorCalif;
// mostrar el promedio con dos dígitos de precisión
JOptionPane.showMessageDialog( null,
"El promedio de la clase es " + dosDigitos.format( promedio ),
"Promedio de la clase", JOptionPane.INFORMATION_MESSAGE );
} // fin de la parte if de la instrucción if...else
else // si no se introdujeron calificaciones, imprimir el mensaje
apropiado
JOptionPane.showMessageDialog( null, "No se introdujeron
calificaciones",
"Promedio de la clase", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 ); // terminar la aplicación
} // fin de main
} // fin de la clase Promedio2
Para este ejemplo podemos observar que en la línea 45 se declara dosdigitos
como una referencia a un objeto de la clase DecimalFormat (paquete
java.text). Los objetos DecimalFormat dan un formato a los números. En
este ejemplo, decidimos mostrar el promedio de la clase con dos dígitos a la
16Introducción a la Programación en Java
derecha del punto decimal. La línea 45 crea un objeto DecimalFormat que se
inicializa con el patrón “0.00”. Cada 0 especifica la posición de dígito en el
número de punto flotante con formato. La palabra clave new comienza una
expresión de creación de instancia de una clase, la cual crea un objeto del tipo
especificado a la derecha de new. El proceso de crear nuevos objetos se
conoce también como crear una instancia de, o instanciar un objeto. El valor
entre paréntesis después del tipo de la expresión de creación de la instancia de
una clase se utiliza para inicializar (dar un valor) al nuevo objeto. A la
referencia dosDigitos se le asigna el valor de la operación new, que es una
referencia al nuevo objeto. La instrucción de la línea 45 se lee como
“dosDigitos obtiene el valor de new DecimalFormat(“0.00”)”.
Estructuras de Control Anidadas
// Analisis.java
// Análisis de los resultados de un examen.
import javax.swing.JOptionPane;
public class Analisis {
public static void main( String args[] )
{
// inicializar variables en las declaraciones
int aprobados = 0; // número de aprobados
int reprobados = 0; // número de reprobados
int contadorEstudiantes = 1; // contador de estudiantes
int resultado; // resultado de un examen
String entrada; // valor introducido por el usuario
String salida; // cadena de salida
//procesar 10 estudiantes utilizando un ciclo controlado por contador
while ( contadorEstudiantesIntroducción a la Programación en Java
// fase de terminación; preparar y mostrar resultados
salida = "Aprobados: " + aprobados + "\nReprobados: " + reprobados;
// determinar si aprobaron más de 8 estudiantes
if ( aprobados > 8 )
salida = salida + "\nAumentar colegiatura";
JOptionPane.showMessageDialog( null, salida,
"Análisis de resultados del examen",
JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 ); // terminar la aplicación
} // fin de main
} // fin de la clase Analisis
7. Introducción a los Applets en Java
Los Applets son subprogramas hechos en Java que se puede inscrustar en
un documento HTML. Cuando un navegador carga una página Web que
contiene un applet, éste se descarga en el navegador Web y comienza a
ejecutarse. Esto nos permite crear programas que cualquier usuario pueda
ejecutar con sólo cargar la página Web correspondiente. El navegador que
ejecuta un applet se conoce como contenedor de applets.
Applet simple en Java: Cómo dibujar una cadena
18Introducción a la Programación en Java
Eje x
Eje y
Menú Ventana del appletviewer
Subprograma
La barra de estado imita a
La esquina superior la que se mostraría en la
izquierda del área de dibujo barra de estado del
es la ubicación (0,0). El navegador, a medida que
área de dibujo termina justo se carga el applet y
encima de la barra de comienza a ejecutarse.
estado. Las coordenadas x Coordenada de píxel (25,25) en
se incrementan de donde se muestra la cadena
izquierda a derecha. Las
coordenadas y se
incrementan de arriba hacia
abajo.
Esquina superior izquierda del
área de dibujo
Coordenada de píxel (25,25)
Barra de Estado
Este programa muestra varias características importantes de Java.
Consideraremos cada una de las líneas de programa detalladamente. La línea
17 hace el verdadero trabajo del programa: dibujar la cadena ¡Bienvenido a
la programación en Java! en la pantalla. Comencemos desde el principio.
La línea 5
import java.awt.Graphics; // importar la clase Graphics
19Introducción a la Programación en Java
es una declaración import que indica que el applet utiliza la clase Graphics
del paquete java.awt. Esta clase permite a un applet de Java dibujar gráficos,
como líneas, rectángulos, óvalos y cadenas de caracteres.
La línea 6
import javax.swing.JApplet; // importar la clase JApplet
es otra declaración import, la cual indica que el applet utiliza la clase JApplet
del paquete javax.swing. Al crear un applet en Java 2, debe importarse la
clase JApplet.
Al igual que con las aplicaciones, todos los applets de Java contienen cuando
menos una declaración de clase pública. Una característica clave de las
declaraciones de clases es que los programadores raras veces crean sus clases
desde “cero”. De hecho, cuando se crea una declaración de clase, normalmente
se utilizan piezas de una declaración de clase existente. Java utiliza la
herencia para crear nuevas clases a partir de las declaraciones de clase
existentes. La línea 8
public class SubprogramaBienvenido extends JApplet {
comienza con la declaración class para la clase SubprogramaBienvenido e
introduce la declaración de la clase. El cuerpo de la clase esta delimitados por
llaves. La palabra clave extends indica que la clase
SubprogramaBienvenido hereda los miembros existentes (datos y
métodos) de otra clase. La clase que se hereda en este punto es JApplet y
aparece a la derecha de la palabra clave extends. En esta relación de
herencia, JApplet se conoce como la superclase y
SubprogramaBienvenido se conoce como la subclase. El uso de la herencia
produce que SubprogramaBienvenido tenga los atributos (datos) y
comportamientos (métodos) de la clase JApplet así como las nuevas
características que agregaremos en nuestra de declaración de la misma clase.
Nosotros extedemos la clase JApplet porque alguien más ya definió lo que
significa ser un applet. Los contenedores de applets esperan que todos los
applets de Java tengan ciertos comportamientos (métodos). De hecho, u
contenedor de applets espera que cada applet que ejecute tenga más de
200métodos distintos. Hasta este momento hemos definido un método en cada
uno de los programas que hemos diseñado, si tuviéramos que definir 200,
nunca crearíamos un applet. El uso de extends para heredar de la clase
JApplet nos permite crear nuevos applets rápidamente, al definir solamente lo
que es nuevo y distinto acerca de nuestros applets. El mecanismo de herencia
es fácil de utilizar; el programador no necesita conocer todos los detalles acerca
de la clase JApplet ni de cualquier otra especie que vaya a heredar a una
nueva clase. El programador sólo necesita saber que la clase JApplet define las
capacidades requeridas para crear el applet mínimo.
Las clases se utilizan como plantillas o planos de construcción para instanciar
(crear) objetos, de manera que puedan utilizarse en los programas. Un
objeto (o instancia de clase) reside en la memoria de la computadora y
20Introducción a la Programación en Java
contiene la información utilizada por el programa. El término objeto
normalmente implica que los atributos (datos) y comportamientos (métodos)
están asociados con el objeto. Los métodos del objeto utilizan sus atributos
para proporcionar servicios útiles al cliente del objeto (código de programa
que llama a los métodos).
Cuando el contenedor de applets carga la clase SubprogramaBienvenido,
al contenedor crea un objeto de tipo SubprogramaBienvenido que
implementa los atributos y comportamientos del applet. El contenedor de
applets es el cliente del objeto SubprogramaBienvenido; es decir, el
contenedor de applets llamará a los métodos de SubprogramaBienvenido .
Los contenedores de applets pueden crear sólo objetos de clases que sean
public y que extiendan a JApplet. Por lo tanto, los contenedores de applets
requieren que las declaraciones de clase de los applets empiecen con la palabra
clave public, de no ser así, el contenedor de applets no podrá cargar ni
ejecutar el applet.
La línea 11
public void paint( Graphics g )
comienza con la declaración del método paint del applet, que es uno de los
tres métodos del applet, que el contenedor de applets llama cuando éste
empieza a ejecutar el applet. En orden estos métodos son init, start y paint.
La clase del applet recibe una versión gratuita de cada uno de estos métodos
de la clase JApplet. Sin no se declaran estos métodos en el applet, el
contenedor de applets llama a las versiones heredadas, dichos métodos tienen
cuerpos vacíos. Para que nuestro applet pueda dibujar, la clase
SubprogramaBienvenido sobrescribe la versión de paint de la superclase,
colocando instrucciones en el cuerpo de paint para dibujar un mensaje en
pantalla. Cuando el contenedor de applets indica al applet que se dibuje a sí
mismo es la pantalla mediante una llamada al método paint, aparece el
mensaje en la pantalla.
Las líneas 11 a 19 declaran el método paint, que dibuja gráficos (líneas, óvalos
y cadenas de caracteres en un applet. La palabra clave void (línea 11) indica
que este método no devuelve resultados. Los paréntesis indican el conjunto de
parámetros para el método paint. Generalmente los programadote pasan datos
mediante una llamada al método. Al escribir applets, no se llama al método
paint en forma explícita. En vez de eso, el contenedor de applets llama a paint
para decirle al applet que dibuje y el contenedor de applets pasa un argumento
a paint: un objeto Graphics (conocido como g), que paint requiere para
realizar su tarea. Es responsabilidad del contenedor de applets crear el objeto
Graphics al que se refiere g. el método paint utiliza la referencia (g) al objeto
Graphics para crear dibujos en los applets. Es necesario que se utilice la
palabra reservada public al inicio de la línea 11 para que el contenedor de
applets pueda llamar al método paint.
La línea 14
super.paint( g );
21Introducción a la Programación en Java
llama a la versión del método paint de la superclase JApplet. Por el momento
esta debe ser la primera instrucción en todas las declaraciones del método
paint.
La línea 17
g.drawString("¡Bienvenido a la programación en Java!",25, 25);
indica que la computadora debe dibujar los caracteres de la cadena definida.
Esta instrucción utiliza el método drawString de la clase Graphics, el cual
proporciona capacidades de dibujo. La instrucción llama a drawString
utilizando la referencia g de la lista de parámtros de paint, seguida por un
separador punto (.), al cual le sigue el nombre del método, seguida de unos
paréntesis que indica los argumentos que necesita el método para realizar su
tarea. La g al inicio de la instrucción indica que paint debe utilizar el objeto
Graphics que el contenedor de applets pasa a paint.
El primer argumento para drawString es la cadena que va a dibujar. Los
últimos dos argumentos en la lista (25,25) son las coordenadas x e y en donde
va a aparecer la esquina inferior izquierda de la cadena. Los métodos de la
clase Graphics requieren de coordenadas que indiquen en donde dibujar.
El sistema de coordenadas en Java es el siguiente: las coordenadas se miden a
partir de la esquina superior izquierda del applet, en píxeles. Un píxel es una
unidad de resolución para la pantalla de la computadora. Cada píxel tiene un
par de coordenadas que describe la posición de este píxel en la pantalla. En el
appletviewer la coordenada (0,0) de applet aparece justo debajo del menú
Subprograma. En un navegador Web, dicha coordenada aparece en la
esquina superior izquierda del área rectangular en la que se ejecuta el applet.
El tamaño de un applet depende del tamaño y resolución de la pantalla.
+x
(0,0) Eje X
+y
(x,y)
Eje Y
Compilación y ejecución del applet
Al igual que con las clases de la aplicaciones, es necesario que compilemos la
clase de un applet para poder ejecutarla:
22Introducción a la Programación en Java
javac NombreDeArchivo.java
Los applets se incrustan en páginas Web para ejecutarse en un contenedor de
applets (appletviewer o un navegador). Antes de poder ejecutar el applet es
necesario crear el documento HTML para cargar el applet en el contenedor de
applets, de manera que este archivo indique cuál applet va a cargar y que
ejecute el cargador de applets.
El elemento applet tiene varios atributos. El primero de éstos es code =
“SubprogramaBienvenido.class”, indica que el archivo class específicado
contiene la clase del applet compilada. El segundo y tercer atributo indican la
anchura y altura del applet (width, height).
El appletviewer comprende solamente las etiquetas HTML y
, por lo que algunas veces se conoce como el navegador mínimo
(ignora todas las demás etiquetas de HTML). El appletviewer nos permite
probar los applets y asegurar que se ejecute correctamente. Para ejecutar el
appletviewer, simplemente escribimos lo siguiente en la línea de comandos:
Appletviewer NombreDeArchivo.html
Dibujar cadenas y líneas
Dibujar cadenas y líneas (continuación)
23Introducción a la Programación en Java
Las líneas 17 y 20 del método paint
g.drawLine( 15, 10, 250, 10 );
g.drawLine( 15, 30, 250, 30 );
usan el método drawLine de la clase Graphics para indicar que el objeto al
que g hace referencia debe dibujar dos líneas. Dicho método requiere de cuatro
argumentos que representan los dos puntos finales de la línea en el applet: la
coordenada x, la coordenada y del punto inicial de la línea, y la coordenada x,
la coordenada y del punto final de la recta. Todos los valores de las
coordenadas se especifican con respecto a la coordenada (0,0).
Coordenada Coordenada
(15, 10) (250, 10)
Coordenada Coordenada
(15, 30) (250, 30)
Agregar números de punto flotante
24Introducción a la Programación en Java
// SubprogramaSuma.java
// Suma dos números de punto flotante.
// paquetes de Java
import java.awt.Graphics; // importar la clase Graphics
import javax.swing.*; // importar el paquete javax.swing
public class SubprogramaSuma extends JApplet {
double suma; // la suma de los valores introducidos por el usuario
// inicializar el subprograma, obteniendo los valores del usuario
public void init()
{
String primerNumero; // primera cadena introducida por el usuario
String segundoNumero; // segunda cadena introducida por el usuario
double numero1; // primer número a sumar
double numero2; // segundo número a sumar
// obtener el primer número del usuario
primerNumero = JOptionPane.showInputDialog(
"Escriba el primer valor de punto flotante" );
// obtener el segundo número del usuario
segundoNumero = JOptionPane.showInputDialog(
"Escriba el segundo valor de punto flotante" );
// convertir los números de tipo Stromg a tipo double
numero1 = Double.parseDouble( primerNumero );
numero2 = Double.parseDouble( segundoNumero );
// sumar los números
suma = numero1 + numero2;
} // fin del método init
// dibujar los resultados en un rectángulo en el fondo del subprograma
public void paint( Graphics g )
{
// llamar a la versión del método paint de la superclase
super.paint( g );
// dibujar un rectángulo, empezando desde (15, 10), que tenga 270
// píxeles de ancho y 20 píxeles de alto
g.drawRect( 15, 10, 270, 20 );
// dibujar los resultados como String en (25, 25)
g.drawString( "La suma es " + suma, 25, 25 );
} // fin del método paint
} // fin de la clase SubprogramaSuma
25Introducción a la Programación en Java
Una vez más, utilizamos JOptionPane.showInputDialog para solicitar datos
de entrada al usuario. El applet calcula la suma de los valores de entrada y
muestra el resultado, dibujando una cadena dentro de un rectángulo en el
applet. La línea 5
import java.awt.Graphics; // importar la clase Graphics
importa la clase Graphics (del paquete java.awt) para utilizarla en este
applet. En realidad no se requiere la declaración import de la línea 5, si
siempre utilizamos el nombre completo de la clase Graphics
(java.awt.Graphics), que incluye el nombre completo del paquete y el
nombre de la clase. Por ejemplo, la primera línea del método paint podría
escribirse de la siguiente manera:
public void paint ( java.awt.Graphics g )
La línea 6
import javax.swing.*; // importar el paquete javax.swing
especifica al compilador que todas las clases del paquete javax.swing están
disponibles para este applet. El asterisco (*) indica que todas las clases en el
paquete java.swing (como JApplet y JOptionPane) deben estar disponibles
para el compilador. Sin embargo, esto no hace que todas las clases del paquete
se carguen en memoria cuando el programa empieza a ejecutarse; sólo se
cargarían aquellas clases que se utilicen en el programa. Esto nos permite
utilizar nombres simples, el nombre de la clase en sí de cualquier clase del
paquete.
La línea 8 comienza con la declaración de la clase SubprogramaSuma e
indica que esta clase hereda JApplet.
public class SubprogramaSuma extends JApplet {
La línea 9
double suma; // la suma de los valores introducidos por el usuario
declara que la variable suma es una variable del tipo primitivo double, como
la variable está declarada dentro del cuerpo de la declaración de la clase, pero
fuera de los cuerpos de todas las declaraciones de los métodos de la clase, es
una instrucción de declaración de variable para un campo. Cada instancia de la
clase contiene una copia de cada campo. Un beneficio de los campos es que
todos los métodos de la clase pueden usarlos. Las variables que se declaran en
el cuerpo de un método específico se conocen como variables locales, y pueden
utilizarse solamente en el cuerpo de este método. Otra de las distinciones entre
los campos y las variables locales es que los campos tienen valores
predeterminados y las variables locales no. El valor predeterminado para un
campo de tipo double es 0.0.
26Introducción a la Programación en Java
Este applet contiene los métodos: init (líneas 12 a 35) y paint (líneas 38 a 50).
Cuando un contenedor de applets carga un applet, el contenedor crea una
instancia de la clase del applet y llama a su método init. El contenedor de
applets llama al método init sólo una vez durante la ejecución de un applet. El
método init normalmente inicializa los campos del applet (si se necesitan
inicializarse con valores distintos a los predeterminados) y realiza tareas que
deben ocurrir una sola vez, cuando el applet comienza a ejecutarse. Es en este
punto donde el applet crea la interfaz gráfica de usuario.
La línea del método init siempre aparece como:
public void init()
Los tipos en Java se dividen en dos categorías: tipos primitivos y tipos de
referencia (conocidos también como tipos no primitivos). Los tipos primitivos
son: boolean, char, byte, short, int, long, flota y double. Las variables de
estos tipos pueden cada una, guardar exactamente un tipo de su valor
declarado. Todos los tipos no primitivos son tipos de referencia, por lo que
todas las clases son tipos de referencia. Los programas utilizan variables de tipo
referencia para referirse a los objetos del programa. Dichas referencias
contienen la ubicación de un objeto en la memoria de la computadora, el cual
puede contener muchas piezas de datos y podría tener muchos métodos. Una
variable de tipo primitivo no puede usarse para invocar un método. Sin
embargo, un uso importante de una referencia es para invocar métodos de
cierto objeto.
String primerNumero; // primera cadena introducida por el usuario
String segundoNumero; // segunda cadena introducida por el usuario
double numero1; // primer número a sumar
double numero2; // segundo número a sumar
En este punto, el método init del applet regresa y el contendor del applet llama
al método start de applet, como se puede observar, dicho método no se
declaró en este applet, por lo que se llama al que hereda de la clase JApplet.
Generalmente, el método start se utiliza con un concepto avanzado conocido
como subprocesamiento múltiple.
27Introducción a la Programación en Java
8. Instrucciones de Control: Parte 2
Instrucción de repetición while
El método drawLine requiere de cuatro argumentos, los cuales representan la
primera coordenada x, la primera coordenada y, la segunda coordenada x y la
segunda y de la línea. En este ejemplo, la segunda coordenada y cambia de
valor durante cada iteración en el ciclo, con el cálculo contador*10. Este
cambio hace que el segundo punto (punto final de la línea) se mueva en cada
llamada a drawLine 10 pixeles hacia abajo del área visible del applet.
Instrucción de repetición for
28Introducción a la Programación en Java
Cálculo del interés compuesto
Una persona invierte $1000.00 en una cuenta de ahorro que produce el 5% de
interés. Suponiendo que todo el interés se deposita en la cuenta, calcule e
imprima el monto de dinero en la cuenta final de cada año, durante 10 años,
use la siguiente fórmula para determinar los montos:
c p (1 t ) n
En donde, p es el monto que se invirtió originalmente, t es la tasa de interés
anual, no es el número de años y c es la cantidad depositada al final del
n-ésimo año.
29Introducción a la Programación en Java
Las líneas 18 y 19 declaran la referencia formatoMoneda de tipo
NumberFormat, y se inicializa llamando al método estático
getCurrencyInstance de NUmberFormat. Este método devuelve un objeto
NumberFormat que puede dar formato a los valores numéricos como
cantidades monetarias. El argumento para el método (Locale.US) indica que
los valores monetarios deberán almacenarse en dólares estadounidenses:
deben comenzar con un signo de dólares ($), usar un punto decimal para
separar los dólares de los centavos y utilizar una coma para indicar los miles. La
clase Locale proporciona constantes que pueden utilizarse para personalizar
este programa y representar valores monetarios de otros países, de manera
que los formatos de moneda se muestren apropiadamente para cada
configuración regional. La clase NumberFormat se encuentra en el paquete
java.text y la clase Locale que se encuentra en el paquete java.util.
La línea 22 declara la referencia areaTextoSalida del tipo JTextArea y la
inicializa con un nuevo objeto de la clase JTextArea (java.swing). Un objeto
JTextArea es un componente de la GUI que puede mostrar muchas líneas de
texto. El cuadro de diálogo de mensaje que muestra el objeto JTextArea
determina la anchura y la altura de ese objeto, con base en la cadena que
contiene. Un objeto JTextArea cuando se combina con otro componente
llamado JScrollPane nos permite desplazarnos a través de las líneas de texto,
de manera que podamos ver toda la salida del programa. Los métodos para
colocar texto en un objeto JTextArea incluyen setText y append.
La línea 25 utiliza el método setText de JTextArea para colocar una cadena
en el objeto JTextArea al que areaTextoSalida hace referencia.
Inicialmente, un objeto JTextArea contiene una cadena vacía (es decir, una
cadena que no contiene caracteres). La instrucción anterior remplaza la cadena
vacía con una que contiene los encabezados para nuestras dos columnas de
salida: “Año” y “Cantidad en depósito”. Los encabezados de las columnas
se separan con un carácter tabulación (\n). Además, la cadena contiene el
carácter de nueva línea (\n), el cual indica que cualquier texto que se agregue
al objeto JTextArea empezará en la siguiente línea.
La instrucción for ejecuta su cuerpo 10, modificando la variable de control
anio. Java no incluye el operador de exponenciación. Por lo tanto, utilizamos el
método estático pow de la clase Math, Math.pow(x,y).
La línea 31 realiza el cálculo del enunciado del problema.
Las líneas 34 y 35 agregan mediante append, más texto al final de
salidaAreatexto. El texto incluye el valor actual de anio, un carácter de
tabulación, el resultado de la llamada al método moneyFormat.format y un
carácter de nueva línea.
Las líneas 40 y 41 muestran los resultados de los cálculos en un cuadro de
diálogo de mensaje. Una característica interesante de la clase JOptionPane es
que el mensaje que muestra con showMessageDialog puede ser una cadena
o una componente de GUI, como JTextArea.
Instrucción de repetición do…while
30Introducción a la Programación en Java
La instrucción do…while es similar a la instrucción while; ya que el programa
evalúa la condición de continuación de ciclo al principio, antes de ejecutar el
cuerpo del ciclo. Si la condición es falsa, el cuerpo del ciclo while nunca se
ejecutará. La estructura de repetición do…while evalúa la condición de
continuación de ciclo después de ejecutar el cuerpo del ciclo; por lo tanto, el
cuerpo del ciclo siempre se ejecutará cuando menos una vez.
Dibujar 10 círculos anidados, utilizando do…while
Los cuatro argumentos que representan la coordenada x superior izquierda, las
coordenada y superior izquierda, la anchura y la altura del cuadro delimitador
del óvalo se calculan con base en el valor de contador. Comienza dibujando el
círculo más interno.
Instrucción de selección múltiple switch
Java cuenta con la instrucción switch de selección múltiple para realizar
distintas acciones, con base en los posibles valores de una variable o expresión
entera. Cada acción se asocia con un valor integral constante (es decir, un valor
de tipo byte, short, int o char, pero no long) que la variable o expresión
puede asumir.
Applet para dibujar líneas, rectángulos u óvalos, con base en lo que el
usuario introduce mediante un cuadro de diálogo de entrada.
// PruebaSwitch.java
// Dibujar líneas, rectángulos u óvalos con base en la entrada del usuario.
import java.awt.Graphics;
31Introducción a la Programación en Java
import javax.swing.*;
public class PruebaSwitch extends JApplet {
int opcion; // la opcion del usuario en cuanto a cuál figura dibujar
// inicializar el subprograma, obteniendo la opción del usuario
public void init()
{
String entrada; // la entrada del usuario
// obtener la opción del usuario
entrada = JOptionPane.showInputDialog(
"Escriba 1 para dibujar líneas\n" +
"Escriba 2 para dibujar rectángulos\n" +
"Escriba 3 para dibujar óvalos\n" );
opcion = Integer.parseInt( entrada ); // convertir entrada en int
} // fin del método init
// dibujar figuras en el fondo del subprograma
public void paint( Graphics g )
{
super.paint( g ); // llamar al método paint heredado de JApplet
for ( int i = 0; i < 10; i++ ) { // iterar 10 veces (0-9)
switch ( opcion ) { // determinar la figura a dibujar
case 1: // dibujar una línea
g.drawLine( 10, 10, 250, 10 + i * 10 );
break; // fin de procesamiento de case
case 2: // dibujar un rectángulo
g.drawRect( 10 + i * 10, 10 + i * 10,
50 + i * 10, 50 + i * 10 );
break; // fin de procesamiento de case
case 3: // dibujar un óvalo
g.drawOval( 10 + i * 10, 10 + i * 10,
50 + i * 10, 50 + i * 10 );
break; // fin de procesamiento de case
default: // dibujar cadena indicando que se escribió un valor
incorrecto
g.drawString( "Se escribió un valor incorrecto",
10, 20 + i * 15 );
} // fin de instrucción switch
} // fin de instrucción for
} // fin del método paint
32También puede leer