Prog. Java Nivel I
Prog. Java Nivel I
Objetivos
Los fundam ento s de program acin nos van a servir para desarro llar program as en
distintos lenguajes. Este curso aplica los cono cim iento s de algoritm ia y anlisis a un
lenguaje de alto nivel com o es Java, com pletando la form acin bsica y perm itiendo
introducirnos en un lenguaje.
Destinatarios
C ualqu ier persona que tenga suficientes cono cim iento s de algoritm ia. Especialm ente
dirigido a personas que hayan realizado los cursos "B ases de la program acin Nivel I y
II", pero tam bin til para program adores que quieran introducirse a Java.
Contenidos
Duracin
120 horas de dedicacin efectiva, incluyendo lecturas, estudio y ejercicios.
Inform tico de
aprenderapro gram ar.com . Se oferta bajo las m odalidades w eb (gratuito) o con tickets
de soporte.
10
CONSIDERACIONES PREVIAS
En este curso emplearemos el Lenguaje de Programacin Java para aplicar los conceptos y
conocimientos de fundamentos de programacin a un lenguaje concreto. Puedes utilizar este curso
para aplicar conocimientos previos y conocer aspectos bsicos de programacin orientada a objetos,
pero no recomendaramos seguirlo si buscas un desarrollo en profundidad y metdico sobre estas
materias. No vamos a entrar en definiciones ni en consideraciones abstractas. Tampoco vamos a seguir
lo que sera un guin completo de estudio sobre el lenguaje Java. Dejaremos de lado los aspectos
estticos: el mundo de las formas de presentacin, los colores, imgenes, efectos visuales, etc. Es
atractivo y parte ms o menos importante de los programas, pero no es nuestro objetivo. Nos vamos a
centrar en los "esqueletos" de los programas: el cdigo que hace que funcionen, no el que hace que
sean bonitos.
Cabe hablar del lenguaje a utilizar en el desarrollo de programas. El conjunto de lenguajes y
versiones de lenguajes constituyen una torre de Babel, un conglomerado de difcil seguimiento e
interpretacin. Lo ms habitual es decantarse por estudiar lenguajes que adquieren popularidad y un
uso extendido por todo el mundo, como es Java. Pero incluso despus de este ejercicio hay que
enfrentarse a la evolucin del lenguaje a travs de sus diversas versiones. En Java todas las versiones
siguen los mismos estndares de datos, esto permite que un programa que hayamos hecho con una
versin antigua, pueda ser ejecutado con una versin ms nueva sin necesidad de ningn cambio.
Nuestra opinin consiste en que es preferible dejar esa carrera loca, quizs necesaria, para los
programadores profesionales y empresas, mientras que los usuarios podemos contentarnos con
programas que funcionen, aunque sean un poco "antiguos". Por tanto, respecto a qu versin de Java
usar, usa la que quieras. Si no coincide con la que hemos usado nosotros (JDK 1.6.0_18) no pasa nada.
Notars que los ejercicios aqu desarrollados no tendrn problemas incluso con la versin JDK 1.6.0_14,
que tomaremos como la versin mnima a emplear ya que las anteriores suponen algunos cambios ms
significativos. No obstante, tambin puedes usar versiones ms antiguas haciendo pequeas
adaptaciones a los programas.
Citaremos tambin que existen distintas formas de programar en Java: la ms bsica es usar el
compilador (programa que permite que el ordenador entienda las instrucciones que le demos en
lenguaje Java, ya que el ordenador no entiende directamente los lenguajes de programacin). Otras
opciones son el uso de entornos visuales como Eclipse, NetBean, etc. que se han hecho muy populares,
son gratuitos y muy tiles. Nosotros vamos a usar el compilador, tambin de distribucin gratuita,
porque pensamos que es la mejor manera de aprender Java: aprender sus fundamentos. Cuando ya
tengamos los fundamentos, podemos pasar a usar un entorno visual que nos permitir crear programas
ms atractivos y de forma ms rpida, pero tratar de usarlos directamente pensamos que no es lo ms
didctico.
En resumen, los lenguajes evolucionan de forma constante, pero detrs de los aparentes
cambios casi siempre se encuentra el mismo "fondo".
Si despus de todo, sigues dudando del lenguaje que mejor se adecua a tus necesidades, te
animamos a que profundices en Java. Vers que se trata de un lenguaje til para casi todo tipo de
problemas. Podemos citar como funcionalidades de Java varias:
1. Aplicaciones "cliente": son las que se ejecutan en un solo ordenador (por ejemplo el porttil
de tu casa) sin necesidad de conectarse a otra mquina. Pueden servirte por ejemplo para realizar
clculos.
2. Aplicaciones "cliente/servidor": son programas que necesitan conectarse a otra mquina
(por ejemplo un servidor de datos) para pedirle algn servicio que le pueda ofrecer, como podra ser el
uso de una base de datos.
3. Podemos hablar tambin de "aplicaciones web" , que son programas Java que se ejecutan en
un servidor. Estas aplicaciones reciben "solicitudes" desde un ordenador y envan al navegador
(Internet Explorer, Mozilla, Opera, etc) que acta como su cliente pginas de respuesta en HTML.
stos son slo algunos ejemplos de todo el potencial que hay detrs de Java como lenguaje
para aprender y obtener muchos beneficios con su uso. Obviamente por determinados trminos
empleados (cliente, cliente/servidor, base de datos, HTML..), te dars cuenta de que el lenguaje Java
tiene mucha potencialidad, pero tambin de que su conocimiento a fondo requerira mucho tiempo.
Nosotros en este curso vamos a estudiar nicamente los aspectos ms bsicos de Java.
INTRODUCCIN A JAVA
Java es un lenguaje de programacin creado por la compaa Sun. Antes de su lanzamiento al
mercado, como demostracin de que se trataba de un lenguaje potente, la empresa desarroll el
navegador "HotJava". Este navegador estaba construido utilizando el lenguaje Java. Fue mostrado en
mayo de 1995 y a principios de 1996 se lanz la primera versin del lenguaje. Esta versin introdujo
caractersticas novedosas con respecto a otros lenguajes de programacin que hicieron que Java
pudiera calificarse de lenguaje innovador. La principal novedad introducida fue que Java es
independiente del hardware y del sistema operativo en que se ejecute. Es decir, Java es independiente
de la plataforma: los programas Java no se ejecutan en nuestra mquina real (en nuestro ordenador o
servidor) sino que Java simula una mquina virtual con su propio hardware y sistema operativo. Y es en
esta mquina virtual simulada donde se ejecuta Java. Esto permite que Java pueda ejecutarse en una
mquina con el Sistema Operativo Unix, Windows, Linux o cualquier otro, porque en realidad no va a
ejecutarse en ninguno de los sistemas operativos, sino en su propia mquina virtual que se instala
cuando se instala Java.
La mquina virtual era la razn principal que diferenciaba a Java de otros lenguajes cuando
irrumpi en el mercado de los lenguajes de programacin. Otra razn de su gran xito ha sido que
cuando surgi se convirti en un lenguaje ms orientado a objetos que todos los otros lenguajes
existentes. Adems cabe destacar su potencia y el permitir crear programas de aspecto y
funcionamiento
Esto afianz su
10
Si no tienes instalado Java en tu ordenador, es necesario que lo instales para poder comenzar a
programar. Java, aparte de ser el nombre del lenguaje, es tambin el nombre del programa que
necesitamos para poder escribir cdigo en nuestro ordenador.
DESCARGA DE JAVA
Java Expert?
Gef pad everytime you
answer iava questions1
Larn More
L IV IP E R S O N
Llegados a la siguiente pgina, debemos hacer click en el enlace "Download", para descargar la versin
ms actual de Java. Por defecto, est seleccionada la versin Java para el Sistema Operativo Windows
en el combo desplegable "Platform". Esta es la plataforma con la que trabajaremos en este curso; no
obstante, se puede trabajar con Java tambin en otras plataformas. Existen versiones de Java para
muchos otros Sistemas Operativos como puede comprobarse desplegando el combo.
Si nos pide nombre de usuario (User Name) y Password (contrasea) pulsaremos en "Skip this Step"
(saltar este paso) ya que no es obligatorio el registro como usuarios.
En esta ltima pgina, haremos click con el mouse en el enlace indicado con el nombre de archivo (que
ser del tipo jdk... .exe), para empezar la descarga del instalador Java. En nuestro caso pulsamos sobre
el link para descargar el archivo "jdk-6u18-windows-i586.exe" y lo guardamos en nuestro disco duro. El
archivo puede ocupar bastante (ms de 70 Mb), por lo que necesitamos una buena conexin a internet
si queremos que la descarga sea rpida.
Con esto hemos finalizado la descarga del instalador de Java. Si tienes problemas para descargar desde
internet, tambin puedes conseguir el instalador Java en cd's de revistas especializadas que estn
disponibles en bibliotecas pblicas. Una vez descargado, el siguiente paso ser instalar Java en nuestro
ordenador.
10
Aparece una ventana inicial de instalacin, informndonos sobre las condiciones de la licencia. Una vez
leda, continuamos la instalacin pulsando en el botn "Accept" (aceptar).
En la parte central nos seala opciones respecto a qu podemos instalar (Development Tools o
herramientas de desarrollo, Demos and samples o ejemplos de prueba, Source Code o cdigo fuente, y
Public JRE o mquina virtual). Podemos elegir instalar ciertas partes de Java y dejar sin instalar otras.
Para ahorrar espacio en el disco duro, podemos no instalar ciertas partes de Java como los ejemplos de
prueba, lo que haramos deseleccionando esta opcin. Si no tienes problemas de espacio lo
recomendable es dejarlo todo tal como est y que se instalen todas las opciones. Dicho lo anterior
hacemos click en el botn "Next" (siguiente) y continuamos con la instalacin.
Sin haber terminado el proceso de la ventana anterior, se muestra la siguiente ventana, que es algo
parecida a la que vimos anteriormente, donde nos muestra una ruta por defecto en la que se instalar
la "Maquina Virtual" de Java. La mquina virtual se reconoce por el nombre de "jre6", presente al final
de la ruta. Siguiendo el mismo criterio comentado anteriormente, es una ruta ya reconocida por
defecto por muchos programas que requieren de la "Mquina Virtual" Java. Para evitar problemas de
configuracin de ruta, es preferible que los usuarios no avanzados no hagan cambios. Si an as
quisiramos hacerlo, usaramos el botn "Change..." (cambiar). Seguimos con la instalacin, haciendo
click en el botn "Next" (siguiente).
El proceso de instalacin continua hasta que la coloracin verde (progreso de la instalacin) cubre en
su totalidad la barra gris.
Finalmente, si todo ha ido bien, aparecer una ventana indicando que la instalacin se ha completado.
Hacemos click en "Finish" para finalizar la instalacin.
Ahora vamos a verificar la instalacin. Para ello vamos a comprobar que se hayan creado dos carpetas
con un nombre similar a "jdk1.6.0_18" y "jre6" en la ruta "C:\Archivos de programa (x86)\Java". La
primera carpeta, de nombre similar a "jdk1.6.0_18", corresponde al compilador e intrprete Java, cuyas
funciones explicaremos ms adelante. La segunda carpeta, de nombre similar a "jre6", corresponde a la
"Mquina Virtual" de Java, concepto que ya hemos comentado anteriormente. Si hemos llegado hasta
aqu, hemos finalizado correctamente la instalacin de Java en Windows.
Organizar *
VT Favoritos
Descargas
K
Escritorio
Sitios recientes
Bibliotecas
[3 Documentos
B
Imgenes
J) Msica
Nombre
| l ) jdkl.6.0_18
i jreS
Compartir con
Grabar
Mua carpeta
Fecha ere modifica,
Tipo
19/03/201110:15
Carpeta de archivo
18/03/2010Vl;53
Carpeta de archivo
10
JAVA_HOME, es una variable de entorno del sistema que informa al Sistema Operativo sobre la ruta
donde se encuentra instalado Java.
Seguiremos la siguiente secuencia de pasos para configurar esta variable:
Abrimos el explorador de Windows o pulsamos sobre "Mi Pc". Pulsamos sobre Equipo ^ Propiedades
^ Configuracin avanzada / Cambiar configuracin ^ Opciones avanzadas ^ Variables de entorno ^
Nueva (Variables del sistema). Luego escribir en las cajas de texto que se muestran lo siguiente:
Nombre de variable
: JAVA_HOME
Valor de variable
el propio explorador de Windows buscando la carpeta en que se ha instalado Java, que normalmente
ser del tipo C:\Program Files\Java\jdk1.6.0_18 C:\Program Files (x86)\Java\jdk1.6.0_18.
C:\Program Files\Java\jdkl.6.0_l
Archivo
Edicin
Ver
Herramientas
SR R M
3s I
Ayuda
Grabar
Fecha modificacin
Tipo
bin
03/04/2010 20:03
Carpeta de archivos
demo
03/04/2010 20:04
Carpeta de archivos
include
03/04/2010 20:03
Carpeta de archivos
Nombre
Carpetas
InterVideo
Java
jdkl.6.0_18
u jre
03/04/2010 20:03
Carpeta de archivos
jrel.6.0
, lib
03/04/2010 20:03
Carpeta de archivos
jre6
sample
03/04/2010 20:04
Carpeta de archivos
Tamao
Itmoh
L i COPYRIGHT
17/12/2009 18:33
Archivo
4 KB
MagidSO
RUCEN SE
03/04/2010 20:03
Archivo
18 KB
Microsoft.NET
3jUCENSE.rtf
03/04/2010 20:03
18 KB
Microsoft Games
C , README.html
03/04/2010 20:03
Documento HTML
29 KB
Microsoft Office
. READMEJa.html
03/04/2010 20:03
Documento HTML
26 KB
^ README_zh_CN.html
03/04/2010 20:03
Documento HTML
21 KB
^ register.html
03/04/2010 20:09
Documento HTML
6 KB
registerja.html
03/04/2010 20:09
Documento HTML
6 KB
fSj register_zh_CN.html
03/04/2010 20:09
Documento HTML
17/12/200918:34
Carpeta comprim...
19.195 KB
03/04/2010 20:03
Documento de tex...
183 KB
Microsoft Works
Movie Maker
Mozilla Firefox
1 srcjip
MSBuild
MSN
MSXML4.0
myphotobook
MySQL
MySQL-Front
[_, THIRDPARTYUCENSER..
E
5 KB
: PATH
Valor de variable
: C:\WINDOWS;C:\WINDOWS\system32 ;%JAVA_HOME%\bin
A modo de resumen: hemos creado una variable de entorno llamada JAVA_H O M E y hemos aadido
una expresin a la variable PATH.
Asegrate de que se han creado correctamente cerrando todas las ventanas y entrando a Variables de
entorno para comprobar que est todo como hemos indicado.
10
La
ruta
de
ambos
archivos
es
esta
una
similar
esta:
"C:\Archivos
de
programa
(x86)\Java\jdk1.6.0_18\bin". Aclarar que para efectos de compilacin se usar una ruta del tipo:
"C:\Program Files (x86)\Java\jdk1.6.0_18\bin", que es la ruta real con la que Windows trabaja. El
explorador de Windows nos muestra una barra con la ruta en que nos encontramos (ruta aparente).
Para conocer la ruta real basta pinchar sobre la ruta aparente.
Ahora indicaremos los pasos para compilar e interpretar nuestro primer programa escrito en lenguaje
Java.
PASO 1
Abrir el Bloc de notas de Windows (Inicio ^ Todos los programas ^ Accesorios ^ Bloc de notas), que
ser nuestro editor de trabajo por su simplicidad. Ms adelante veremos un editor ms sofisticado. Si
prefieres usar otro editor en este momento no hay problemas (por ejemplo WordPad, Notepad, etc.).
Da igual mientras que se grabe el programa como "Texto sin formato" (en cdigo ASCII). Una vez que
tengamos el bloc de notas abierto escribiremos nuestro primer programa, que mostrar un texto "Hola
Java", en la ventana consola del DOS (Ventana negra que ms adelante explicaremos cmo manejar).
Aclarar que por el momento no debemos preocuparnos de entender lo que escribimos: esto lo
explicaremos ms adelante. Nuestro objetivo ahora es simplemente comprobar que podemos ejecutar
un programa escrito en Java.
El cdigo de nuestro programa en Java, escrito en el bloc de notas, ser el siguiente:
public class Ejemplo {
public static void main(String[] arg) {
System.out.println("Hola Java");
}
}
Los caracteres de llaves y corchetes se escriben pulsando ALT GR + la tecla correspondiente.
Para seguir un orden y evitar problemas posteriores durante la compilacin, seguiremos los siguientes
pasos. Crearemos una carpeta en C: denominada "Ejercicios". Ubicaremos el programa Ejemplo.java
dentro de esta carpeta.
PASO 2
En este paso, veremos la compilacin e interpretacin de un programa Java. Comentar que este
paso se har usando la ventana consola del DOS. Para visualizar esta ventana debemos seguir estos
pasos: Inicio ^ Todos los programas ^ Accesorios ^ Smbolo del sistema. A continuacin, una vez que
estemos en la ventana consola debemos escribir el comando "cd c:\Ejercicios" y pulsar enter. Esto nos
traslada a la carpeta donde se ubica nuestro archivo ("Ejemplo.java"). A continuacin daremos la
instruccin para que se realice el proceso de compilacin del programa, para lo que escribiremos "javac
Ejemplo.java", donde "javac" es el nombre del compilador (javac.exe) que transformar el programa
que hemos escrito nosotros en lenguaje Java al lenguaje de la mquina virtual Java, dando como
resultado un archivo "Ejemplo.class" que se debe haber creado en este mismo directorio. Si te aparece
un mensaje de error revisa todos los pasos anteriores que hemos explicado, pues es posible que no se
hayan creado las variables de entorno o que el archivo no est bien ubicado, etc. Para comprobar si se
ha creado el archivo escribiremos en la ventana consola el comando "dir". Comprobaremos que nos
aparecen dos archivos: Ejemplo.class (creado por el compilador) y Ejemplo.java (creado por nosotros).
Finalmente, vamos a pedirle al intrprete que transforme el cdigo de la mquina virtual Java en cdigo
mquina interpretable por nuestro ordenador. Para ello escribiremos en la ventana consola: java
Ejemplo.
El resultado ser que se nos muestra la cadena "Hola Java".
=\ E je r e ic io s > ja va c Eje m p lo . ja v a
c : \ E je r c ic io s ^ ja u a E jem p lo
o la
Ja v a
lo s d e r e c h o s .
10
LA AYUDA DE JAVA
Si ya has trabajado con algn otro lenguaje de programacin, seguramente tendrs clara la importancia
de las ayudas de los lenguajes para los programadores. Pero si no es as, vamos a tratar de dejarlo claro.
En primer lugar, cabe decir que prcticamente nadie conoce a fondo todos los trminos y posibilidades
de un lenguaje. Es como un idioma hablado: hay gente que lo chapurrea, gente que lo habla
correctamente pero con escasez de recursos, gente que lo habla bien y con abundancia de recursos y
expertos a distintos niveles. Pero nadie, lo sabe "absolutamente todo". Por tanto, cuando estamos
programando y no sabemos hacer algo o tenemos dudas, tendremos que recurrir a ayudas externas
como:
Manual de lenguaje.
Otros programas.
Otros programadores.
La ayuda del lenguaje es una parte del programa o entorno de programacin, a la que podemos acceder
para encontrar informacin y recomendaciones, que han sido generadas por los propios creadores del
lenguaje. Las principales ventajas de la ayuda de un programa son:
Rapidez: si estamos programando y surge una duda o necesidad, podremos resolverla a travs de la
ayuda, sin necesidad de movernos o desplazar la atencin de lo que estamos haciendo.
Potencia: las ayudas suelen ser bastante completas y tiles, por lo que podemos estar seguros de
que van a resolver un alto porcentaje de los problemas que podamos tener con el lenguaje.
Como inconvenientes de las ayudas podemos citar:
Si no conocemos el trmino que describe aquello que buscamos, quizs no podamos llegar a la
informacin deseada.
A veces, la ayuda es una traduccin no demasiado acertada desde otro idioma, lo que dificulta su
comprensin.
Cualquier programador que se precie, conoce y usa las ayudas de los programas. Son de especial
inters, para programadores aprendices o autodidactas.
Veamos ahora cmo acceder y optimizar la ayuda de Java. Como no vamos trabajar con un entorno
visual,
en
particular,
la
ayuda
la
obtendremos
http://www.java.com/es/download/help/index.xml
de
pginas
oficiales
de
Java
Google, cada persona valorar la pgina que le resulte ms funcional acorde a sus necesidades, as
como navegar por los distintos links incluidos en foros, de ah que no podemos establecer una nica
pgina de referencia de Java.
Quizs sea para algunos, una forma muy tediosa de bsqueda de informacin, pero actualmente con
los buscadores cada vez ms sofisticados, la ayuda la podemos obtener al instante, slo es cuestin de
saber buscar por la red, ya que los buscadores se han convertido en verdaderos y ventajosos surtidores
de informacin.
Mostraremos a continuacin, unos ejemplos de bsqueda avanzada, en el buscador ms usado
actualmente Google, y que ser de gran utilidad al momento de querer buscar informacin sobre Java:
Buscar todos los documentos en formato "pdf", que contengan esta expresin "Java" exactamente.
Entonces pones en la caja de texto de bsqueda de google, lo siguiente:
"Java" filetype:pdf
Quizs, deseamos buscar algo ms especfico, como "variables en java". Entonces ponemos lo siguiente:
"variables en java" filetype:pdf
Ahora se me ocurre, desear buscar todas las pginas de universidades espaolas, que tengan la palabra
"Java". Entonces escribimos lo siguiente:
"Java" site:.edu.es
Mencionar que "edu.es" es un dominio, que hace referencia a las pginas de universidades espaolas,
lo mismo podemos hacer, si deseamos de universidades mexicanas, cambiando por este otro dominio
"edu.mx"
Hay entornos de trabajo visuales para Java, como Netbean, Eclipse etc..., que presentan ayudas
integradas al entorno, pero sus explicaciones no estn comprendidas en este trabajo.
10
TIPO DE DATOS
MEMORIA
REQUERIDA
EQUIVALENCIA
CON VARIABLES
USADAS EN
PSEUDOCDIGO
1 byte
-128 a 127
Entero
Uso en contadores,
bucles, etc.
control
de
2 bytes
Entero
Uso en contadores,
bucles, etc.
control
de
Entero
Uso en contadores,
bucles, etc.
control
de
Uso en contadores,
bucles, etc.
control
de
Byte
(Entero)
Short
(Entero corto)
OBSERVACIONES
-2 1 4 7 4 8 3 6 4 8
Int
4 bytes
(Entero)
214 7 4 8 3 6 4 7
Long
(Entero largo)
8 bytes
9223372036854775808
a
9223372036854775807
Entero
4 bytes
3 ,4 E -3 8 a 3 ,4 E 3 8
Real
8 bytes
1,7E-308 a 1,7E308
Real
Float
(Decim al sim ple)
Double
(Decim al doble)
True
Boolean
(Booleano)
1 byte
Booleano
False
String
Char
Variable
2 bytes
A lfanum rica
Carcter
Cad a
carcter
en
Java
esta
codificado
en
un
form ato
denom inado
Unicode.
En
este
form ato cada carcter ocupa dos
bytes, frente a la codificacin en
ASCII, dnde cada carcter ocupaba
un solo byte.
Conociendo ya los tipos de variables y cmo nombrarlas, veamos ahora cmo declararlas y asignarles
contenido al mismo tiempo. Una forma bsica que nos permita empezar a trabajar y, de paso, crear
nuestro primer programa.
EJEM PLO
Supn que declaras: una variable destinada a contener la edad de una persona. Sabemos que la edad
de una persona puede oscilar entre cero y 125 aos (siendo groseros), y que sus valores no son
decimales, entonces segn los tipos que tenemos en Java podramos usar "byte" o "int" o "short" o
"long", pero analizando de cada uno de ellos sus rangos de valores que soportan, segn la tabla
indicada arriba, siempre hay una que es mejor que otra en cuanto a que consumiriamos menos
memoria. Por tanto puede declararse como tipo byte (-128 a 127) en lugar de int (-2147483648 a
2147483647) sin ningn problema. Si una variable no lo requiere, no conviene asignarle un tipo que
ocupe ms memoria de la realmente requerida. En el caso de la edad, si la declaramos como entera
vamos a ocuparle 4 bytes al sistema cuando podramos haber ocupado slo 1 con el tipo byte. Esto, a
gran escala, es una falta de eficiencia y economa.
byte edad = 78;
A la hora de declarar variables conviene seguir estas pautas:
Elegir siempre el tipo de variable ms sencillo posible. Consideraremos que el grado de sencillez
viene definido por la memoria requerida (a menor memoria requerida mayor es la sencillez). Esto
redunda en un menor consumo de recursos del sistema y en una mayor rapidez de las operaciones
que realiza el ordenador.
Java permite declarar variables sin contenido en mltiples lneas una por lnea, pero tambin varias
variables en una sola lnea.
Usaremos para ello la sintaxis:
[Tipo de variable][Nombre de variable],..., [ Nombre de variable];
EJEMPLO
Expresin abreviada
Equivalente
a)
int i;
int j;
a) in t i, j, k;
int k;
o
int i; int j; int k;
10
EJERCICIO:
Realizar una declaracin de variables para las siguientes propuestas de programas.
a) Un programa que muestra un mensaje de bienvenida.
b) Un programa que nos pide nuestra edad y nos muestra el ao en que nacimos.
c) Un programa que nos muestra el valor medio de tres magnitudes.
d) Un programa que trabaja con: tres contadores para bucles, tres valores de momentos en una viga
(de magnitud no conocida), valores de longitud de la viga, canto y ancho y un valor interruptor que
permite o impide que se muestren resultados.
SOLUCIN:
a) String mensaje;
b) byte edad;
Se podra definir otra variable llamada aonacimiento segn el programador lo estime oportuno o no.
c) flo at m agnitudl, magnitud2, magnitud3;
flo at media;
Hemos utilizado el tipo float para cubrirnos las espaldas. No sabemos con qu tipo de valores vamos a
trabajar y por ello cogemos un tipo de variables bastante amplio como es el float. Preferimos no coger
double si no es estrictamente necesario.
Hemos utilizado dos lneas pero slo un tipo de variable Por qu? El programador ordena la
declaracin de variables como estime ms conveniente. En este caso ordenamos "valores para el
clculo" en una lnea y "resultados" en otra. Resulta ms fcil de leer y analizar que estando todo en
una sola lnea.
d) int i, j, k;
flo at momento1, momento2, momento3;
flo at largo, canto, ancho;
boolean muestraResultados;
Siempre ser preferible usar las expresiones m om entol, momento2 y momento3 antes que m1, m2 y
m3 que resultan ms confusas. Sin embargo, este tipo de decisiones siempre quedan a criterio del
programador.
Declaracin
int a;
a = 123;
float a;
a = - 3323,57f; 1
String a;
String a;
a = "123 coches";
String a;
int salario;
salario = 30500;
float salario;
salario = 30500;
String salario;
Declaracin
int a, b, suma;
b = 32;
suma = a + b;
a = 5;
b = 32;
int a, b, c, d, e;
boolean agotamiento;
c = a * b;
d = a + c;
e = d;
agotamiento = true;
! Todo valor de tipo float debe llevar al final la letra "f" o "F" en caso contrario ser un valor double por defecto
int a, b;
a= 7*b
Supone que "a" valga cero, ya que si no se asigna un valor a "b", esta variable tiene por contenido el
valor por defecto, es decir, cero. "7 * b" equivale en este caso a "7 * 0".
10
Vamos a crear un programa que declare una variable tipo String llamada mensaje y nos muestre un
texto en la ventana del DOS. Para ello escribiremos el siguiente cdigo:
public class ImprimirMensaje {
}
}
Analicemos las lneas que lo componen.
1. Las llaves { } delimitan bloques (conjuntos de elementos de un programa) en Java.
2. public class ImprimirMensaje. Sera el bloque ms externo de todo programa Java, en donde
declaramos el nombre de nuestra clase, que llamaremos "ImprimirMensaje" y que ser a la vez el
nombre de nuestro programa. Esto es as dado que Java es un lenguaje de programacin orientado a
objetos y por lo tanto todo debe estar dentro de una clase desde un principio. La palabra public es
para aclarar que la clase "ImprimirMensaje" ser pblica, es decir se podr acceder a ella desde otra
clase. Esto lo veremos posteriormente en ejemplos ms avanzados.
3. public static void main(String arg[]) . Sera el bloque donde escribiramos nuestro programa Java y
se trata de un mtodo especial llamado main (principal); especial por el hecho de que cuando
compilemos nuestro programa, el compilador el primer mtodo que buscar ser el que tenga el
nombre main. Esto es as porque una clase tiene como elementos de su estructura uno o ms
mtodos y si queremos que nuestra clase sea un programa que podamos ejecutar, al menos uno de
ellos debe tener el nombre main. Un mtodo corresponde a una funcin o procedimiento (ambos
pueden recibir uno o ms valores de entrada, pero el primero devuelve siempre un solo valor y el
segundo no devuelve ningn valor). En nuestro caso void indicara que se trata de un procedimiento.
La palabra static indicara que el mtodo main es un mtodo de clase, es decir que se ejecutar sin
necesidad de crear un objeto de la clase. El mtodo main recibe String arg[], que significa "un array
de Strings". Este es el nico parmetro (opcional) de entrada que le podemos pasar por lnea de
comando. Su uso lo veremos en un ejemplo posteriormente cuando veamos arrays.
4. String mensaje. Aqu estamos declarando una variable de tipo String . Es decir, nuestra variable
"Bienvenido a este programa" (es alfanumrico por estar entre comillas dobles) a nuestra variable
mensaje.
println es un mtodo que recibe como valor de entrada nuestro mensaje, el cual ser mostrado en
la ventana DOS como un texto y con un enter de cambio de fila al final. Hay otro mtodo parecido
llamado print, que hace lo mismo, pero sin poner un enter de cambio de fila al final. En cuanto a out
es un objeto perteneciente a la clase System, y es un objeto ya establecido por java para invocar a
los mtodos print o println. No debemos preocuparnos por saber ms que esto de momento.
Compila e interpreta el programa para ver el resultado, siguiendo los pasos vistos en la entrega del
curso CU00506A. En las siguientes imgenes vemos primero la compilacin y luego la interpretacin del
programa, sin mayores detalles, al estar ya explicados en la entrega del curso indicada.
I m p r im ir M e n s a je . j a v a
C : \ E j e r c i c io s >
Compilacin
Interpretacin (Resultado)
El mtodo println sin ningn valor pasado como parmetro da lugar a que se muestre una lnea en
blanco. Prueba a introducir variables de tipo numrico y a dar lugar a que se muestren sus contenidos
en la ventana DOS. Juega con los nombres de las variables, sus contenidos y la asignacin de
contenidos.
Tambin puede resultar de inters que compruebes qu ocurre si declaras una variable de un tipo y le
asignas contenido de otro tipo.
Por ejemplo declara int salario, asgnale el contenido salario = "Son 3000 euros" y prueba a mostrarlo
en la ventana DOS.
o
Qu ocurre cuando incum plim os las previsiones de Ja va para asignar
contenidos a variables (por ejem plo, para una variable a tipo byte definir a =
532000, que est fuera del rango previsto)? No vam os a an alizar los distintos casos
que se pueden presentar, sino a tratar de dar una respuesta genrica. Cuando
hacem os algo no esperado, com o asign ar un valor fuera de rango, asign ar un valor
que no concuerda con el tipo de la variable, sum ar variables num ricas con
alfanum ricas, a sign a r decim ales a un nm ero entero..., etc. pueden suceder varias
cosas:
a)
Com o program adores hem os de buscar program as 1 00% predecibles, en los que no
se pueda producir que "sea difcil prever lo que va a suceder". Por tanto
intentarem os que la declaracin y asignacin de contenidos a variables se ajuste a
las norm as de Java. En ltim a instancia, podrem os prever una rutina de gestin de
errores para casos im previstos.____________________________________________________
Entrega n10 del curso Lenguaje de program acin Java Nivel I".
10
ARRAYS UNIDIMENSIONALES
La sintaxis para declarar e inicializar un array ser:
El tipo devariable puede ser cualquiera de los admitidos por Java y que yahemos explicado.
Ejemplos
de declaracin einicializacin con valores por defecto de arrays usando todos los tipos de variables
Java, seran:
-
b)
c)
Para cadenas
String[ ] nombre = {"Mara", "Gerson"}; //Array de 2 elementos
Para caracterers
char[ ] sexo = {'m','f'}; //Array de 2 elementos
Para booleanos
boolean[ ] = {true,false}; //Array de 2 elementos
Cuando creamos un array de nombre "a" y de dimensin "n" (int[ ] a = new int[n]) estamos creando n
variables que son a[0], a[1], a[2],
primer elemento, hasta el n-1 que sera el ltimo elemento. Es decir, si tenemos un array de 5
elementos, el primer elemento sera el cero y el ltimo elemento sera el 4. Esto conviene tenerlo en
cuenta porque puede dar lugar a alguna confusin. Disponer de un valor con ndice cero puede ser de
utilidad en situaciones como considerar cada variable asociada a una hora del da, empezando a contar
desde la hora cero hasta la 23 (total de 24 horas), cosa que es habitual en algunos pases. En lugar de 1,
2, 3, ..., 24 estaramos usando 0, 1, 2, ..., 23.
Vamos a trabajarlo sobre el ordenador en un programa y ver qu pasara si declaramos un array de
tamao "n" y vamos asignando un valor a cada variable del array desde la posicin cero hasta la
posicin "n-1". Adicionalmente vamos a comprobar qu ocurre si tratamos de asignarle valor a la
variable de posicin "n".
=
=
=
=
=
Luis;
Mara;
Carlos;
Jo se ;
Ismael; //Error:No existe esta variable array de ndice 4
}
}
C:\Ejenplos>javac ArrayDeNombres.java
C:\Ejenplos>
Una vez escrito el programa, cuando compilamos observamos que no hay ningn error de sintaxis, es
decir, no faltan puntos y comas, las llaves estn bien equilibradas, las palabras reservadas del lenguaje
son las correctas, etc. Por tanto, aparentemente el programa debera ejecutarse y darnos un resultado.
Sin
embargo
cuando
cuando
interpretamos
el
programa
observamos
un
error
Damos por entendido que ya hemos compilado el programa y no hay errores de sintaxis. Nos
centramos por tanto en la ejecucin del programa (interpretacin).
Si escribimos en la ventana DOS java ParametrosDeEntrada Pepe Luis Juan, los parmetros de entrada
son Pepe, Luis y Juan. Cuando ejecutamos el programa se nos mostrar que la cantidad de parmetros
son tres, y adems nos mostrar el primer y segundo elementos del array, es decir, Pepe y Luis.
Si escribimos en la ventana DOS java ParamentrosDeEntrada Pepe, hay un solo parmetro de entrada y
el array arg tiene un solo elemento. En este caso el programa nos va a dar un error porque la nica
variable que existe es arg [0], y al tratar de llamar a arg[1] nos va a dar error.
C:\Ejenplos>
Comprobamos que el programa recibe 2 parmetros a travs de la lnea de comandos (es decir, los
introducimos a continuacin de la instruccin para ejecutar el programa). Estos dos parmetros son las
cadenas "Hola" y "Java", las cuales son capturadas en las variables del array de cadenas arg[0] y arg[1].
Estas variables se usan para imprimir los parmetros en pantalla. Esto se puede ver en el cdigo fuente
del programa. Por otro lado, con el atributo "arg.length" podemos saber cuntos parmetros se le han
pasado a nuestro programa. Tambin decir que hacemos uso de un nuevo smbolo: "+", que significa
"concatenar" la cadena "Cantidad de parmetros" con el valor del atributo arg.length (que es 2 en este
caso). El resultado es la cadena "Cantidad de parmetros : 2 ", que se imprime en la ventana DOS como
parte de la salida de nuestro programa.
El introducir parmetros al mismo tiempo que se invoca la ejecucin de un programa es una posibilidad
que admite Java a travs de la venta DOS. En otros lenguajes no es posible pasar parmetros de entrada
a un programa.
Entrega n11 del curso Lenguaje de program acin Java Nivel I".
10
EJERCICIO:
Crea el cdigo de dos programas que cumplan las siguientes premisas:
a) Programa 1.
Declara un array tipo int (entero) denominado numerodecoches que contenga 24 variables. Declara
una variable tipo int (entero) que se llame r. Establece el valor de r en 2 y el valor de numerodecoches
para un localizador de valor r en 23. Procede a mostrar en pantalla un mensaje que indique cul es la
hora r y el nmero de coches para la hora r. Finalmente, modifica nicamente la asignacin de valor a r
de modo que en vez de 2 sea 21 y ejecuta de nuevo el programa.
b) Programa 2.
Sobre el programa anterior mantn el nmero de elementos de numerodecoches en 24. Declara dos
variables a y b de tipo int(entero). Establece a con valor 8, b con valor 4 y r con valor a dividido entre b .
Ejecuta el programa.
SOLUCIN:
El programa 1 ser el siguiente. Si lo ejecutamos obtendremos "El nmero de coches en la hora 2 fue
23". Si cambiamos r = 2 por r = 21 obtendremos "El nmero de coches en la hora 21 fue 23".
}
}
Nota: Recordar que cuando declaramos un array de 24 elementos como int[ ] numerodecoches = new
los elementos del array que se crean son numerodecoches[0], numerodecoches[1] ... hasta
numerodecoches[23]. Tenemos por tanto 24 elementos (del 0 al 23) pero no existe la variable
numerodecoches[24] como puede ocurrir en otros lenguajes.
int[24]; ,
Nota: El smbolo "+" significa concatenacin y se usa para concatenar en este caso valores cadena con
variables que tienen un valor numrico. De este modo obtenemos una sola cadena que se imprime en
la pantalla DOS. Tambin recordar que numerodecoches[r] = 23 significa que estamos asignando el
nmero 23 a la posicin indicada por el valor que tenga r en su momento, siendo el valor mximo que
podra tener r el valor 23 y el valor mnimo 0. El uso de otros valores de r dara lugar a un error.
El programa 2 ser el siguiente. Ten en cuenta que el array numerodecoches tiene 24 elementos siendo
el primero el de localizador cero. El resultado va a ser igual que el del anterior programa, ya que r = 2
dado que 8/4 = 2. Por lo tanto se mostrar en pantalla "El nmero de coches en la hora 2 fue 23".
}
}
Arrays multidimensionales en
Java. (CU00513A)
Seccin: Cursos
Categora: Lenguaje de programacin Java Nivel I
Fecha ltima actualizacin: 2010
Autor: Walter Sagstegui Lescano
Resumen:
Entrega n12 del Curso Lenguaje de program acin Java Nivel I"
10
ARRAYS MULTIDIMENSIONALES
Tal y como explicamos en su momento, ser posible crear arrays con ms de una dimensin, pasando
de la idea de lista, vector o matriz de una sola fila a la idea de matriz de m x n elementos, estructuras
tridimensionales, tetradimensionales, etc. La sintaxis ser:
Tipo_de_variable[][]... [ ]
El tipo de variable puede ser cualquiera de los admitidos por Java y que ya ha sido explicado. Ejemplos
de declaracin e inicializacin con valores por defecto de arrays, usando todos los tipos de variables
Java, seran:
-
donde {1,2} corresponde a la fila 1, {3,4} a la fila 2 y {5,6} a la fila 3, y los nmeros separados por coma
dentro de cada fila, corresponden a las columnas. En este caso, los nmeros (1, 3, 5) de cada una de las
filas corresponden a la primera columna y los nmeros (2, 4, 6) ataen a la segunda columna.
Para obtener el nmero de filas de la matriz, podemos recurrir a la propiedad "length" de los arrays, de
la siguiente manera:
int filas = matriz.length;
Tambin Java nos permite la posibilidad de clonar una matriz, es decir, crear una matriz nueva a partir
de otra matriz, siguiendo esta sintaxis:
String[][] nuevaMatriz = matriz.clone();
donde clone() es un mtodo especial, que permite la clonacin de arrays de cualquier dimensin en
Java. De esta manera "nuevaMatriz" y "matriz" son 2 matrices distintas pero con los mismos valores.
Vamos a definir una matriz, a modo de ejercicio: queremos almacenar en una matriz el nmero de
alumnos con el que cuenta una academia, ordenados en funcin del nivel y del idioma que se estudia.
Tendremos 3 filas que representarn al Nivel bsico, medio y de perfeccionamiento y 4 columnas en las
que figurarn los idiomas (0 = Ingls, 1 = Francs, 2 = Alemn y 3 = Ruso). La declaracin de dicha matriz
sera:
La representacin grfica que podramos asociar a esta asignacin de datos sera esta matriz:
rz
14
3>
19
V3
13
1,
Declaracin con Ja va
Duracin del conteo
Tipo de array
(nc es Nmero de coches)
Un da
Varios das
(hora y da)
Varios meses
(hora, da y mes)
Varios aos
Veamos lo que sera un ejemplo de programa con array multidimensional, usando un tipo String.
El resultado del programa es la aparicin del mensaje "El alumno nmero 24 del curso tercero se llama
Pedro Hernndez Gonzlez".
En este ejemplo, [5] representa a los cursos. Hablamos de 5 cursos que son identificados con 0, 1, 2, 3,
4, por lo que [2] hace mencin al tercer curso;lo mismo podemos decir de [23], que corresponde al
alumno nmero 24. Hay que recordar que siempre en Java tenemos que contar el cero, ya que si no lo
hacemos podemos cometer errores.
Comentarios y herramientas
lgicas y matemticas en Java.
(CU00514A)
Seccin: Cursos
Categora: Lenguaje de programacin Java Nivel I
Fecha ltima actualizacin: 2010
Autor: Walter Sagstegui Lescano
Resumen:
Entrega n13 del Curso Lenguaje de program acin Java Nivel I"
10
El signo / / comentario de una lnea: la presencia del signo //, transforma en comentario todo lo que se
encuentre a continuacin de l en una lnea. El signo // puede encontrarse al principio de una lnea, con
lo cual, nada de lo que aparezca en dicha lnea ser ejecutado, o bien, despus de una o varias
instrucciones que se encuentren en una lnea, con lo cual una parte de la lnea se ejecutar.
El signo / * .... */ comentario de varias lneas: la presencia del signo /* abre un comentario y todo lo
que escribamos a partir de ese signo, puede estar en una o varias lneas hasta indicar el cierre del
comentario con el signo */. El signo /* ... */ puede encontrarse en cualquier parte del programa por lo
que nada de lo que aparezca entre /* y */ ser ejecutado.
Ejem p lo 1:
public class Programa {
public static void main(String args[]) {
//Declara una variable
boolean seleccionado;
//Asigna contenido
seleccionado = true;
//Introduce espacio
System.out.println();
//Valor actual
System.out.println("El valor actual de seleccionado es " + seleccionado);
}
}
Ejem p lo 2:
Ejem p lo 3:
Ejem p lo 4:
El ejemplo 1, corresponde a un programa con comentarios insertados a travs del signo //^comentarios
previamente situados a la lnea que comentan.
El ejemplo 2, es similar al caso anterior, pero se han creado los comentarios con los signos /* ... */.
En el ejemplo 3, los comentarios con el signo //, se sitan a continuacin de las instrucciones, en la
misma lnea.
Por ltimo, el ejemplo 4 combina el uso del signo / / con los signos /* ... */, separados los comentarios
de las instrucciones que se van a ejecutar.
Los criterios para insertar comentarios sern los que se estudian en los cursos de bases de la
programacin, debindose buscar que los comentarios aporten claridad a un programar. Los
comentarios son una parte importante de los programas, por lo que es conveniente cuidar su
estructuracin y contenidos. Dado que el signo de corchetes se usa muchas veces para indicar un
comentario cuando se plantea un algoritmo como pseudocdigo, podemos usar los corchetes detrs
del signo/* para "recordar" el carcter de comentario de dicho texto.
/*[Esto es un comentario detrs de un /*. El corchete no es estrictamente necesario pero podemos
ponerlo si queremos]*/
Operadores
Operadores de
O perador de
Operadores
Aritm ticos
comparacin
concatenacin
lgicos
(Multiplicacin)
(Menor que)
<
Operador &&
(And)
<=
Operador ||
(Suma)
(Or)
>
O p era d o r!
(Resta)
(Mayor que)
(Not)
>=
(Divisin)
%
(Resto)
(Igual a)
=
(Distinto de)
La mayora de estos operadores nos resultarn conocidos, pues son comunes con otros lenguajes y se
estudian en los cursos de bases de la programacin. El operador + tiene cierto inters para concatenar
cadenas. Por ejemplo "Hoy puede" + "ser un gran da" equivale a "Hoy puede ser un gran da".
En cuanto a las funciones matemticas, las funciones disponibles vienen definidas en la clase Math y se
pueden consultar en la lista completa, disponible en la siguiente direccin oficial de Java:
http://download.oracle.com/avase/1.4.2/docs/api/ava/lang/Math.html
Funciones
Significado
Ejemplo de uso
Resultado
abs
Valor absoluto
int x = Math.abs(2.3);
x = 2;
atan
Arcotangente
double x = Math.atan(1);
x = 0.78539816339744;
sin
Seno
double x = Math.sin(0.5);
x = 0.4794255386042;
cos
Coseno
double x = Math.cos(0.5);
x = 0.87758256189037;
tan
Tangente
double x = Math.tan(0.5);
x = 0.54630248984379;
exp
Exponenciacin neperiana
double x = Math.exp(1);
x = 2.71828182845904;
log
Logaritmo neperiano
double x = Math.log(2.7172);
x = 0.99960193833500;
pow
Potencia
double x = Math.pow(2.3);
x = 8.0;
round
Redondeo
double x = Math.round(2.5);
x = 3;
random
Nmero aleatorio
double x = Math.ramdom();
x = 0.20614522323378;
Matemticas
Destacar que las funciones matemticas, al pertenecer a la clase Math, se invocan siempre de la
siguiente manera: Math.funcion(argumentos).
Las funciones relacionadas con ngulos (atan, cos, sin, tan, etc.) trabajan en radianes. Por tanto, para
operar con grados, tendremos que realizar la conversin oportuna.
La funcin random,permite generar nmeros aleatorios en el rango ]0,1[. Por tanto el 0 y el 1 estn
excluidos.
La funcin exponenciacin neperiana o exponenciacin de e, matemticamente significa ex, que en Java
sera Math.exp(x),donde x es un nmero real y la base es la constante neperiana e = 2.7172...
La funcin logaritmo neperiano, matemticamente significa Ln x, que en Java correspondera a la
expresin Math.log(x).
S i vas a tra baja r con constantes fsicas o m atemticas, te resultar de inters la instruccin
final para la declaracin de constantes. La ventaja de decla rar una constante en vez de una
variable, consiste en que la constante no puede va ria r en el transcurso del program a. Por tanto, se
impide que po r erro r pueda tener un valor no vlido en un momento dado. Las constantes facilitan
la documentacin del program a y lo hacen fcil de m odificar. Una declaracin tipo de constante
podra ser la siguiente:
final double pi = 3.141592653 58979;
Sin embargo, el propio Java tiene una constante propia para defin ir la constante matem tica PI:
public static final double PI;
Entrega n14 del Curso Lenguaje de program acin Java Nivel I"
10
Construccin preliminar de programas, en los que a falta de datos definitivos, introducimos datos
aleatorios.
Simulacin de procesos aleatorios (nmero resultante de tirar un dado, eleccin de un color por
parte de una persona, nmero premiado en un sorteo de lotera, cantidad de personas que entran
a un supermercado en una hora...)
Otras aplicaciones.
Conviene recordar que "aleatorio" no puede confundirse con "cualquier cosa", "descontrol", "incierto",
"impredecible", etc. Usaremos el vocablo "aleatorio", ms en el sentido de "no predeterminado" que
el de "no predecible", ya que en general, vamos a definir qu tipo de resultado queremos obtener y en
qu rango de valores debe estar. Vamos a imaginar que Java genera nmeros aleatorios, como si fuera
un robot lanzador de dardos muy preciso (robot rnd). De este modo, cuando se le dice que comience a
tirar dardos en distintas posiciones, repite siempre los lugares. Por ejemplo, si la diana est marcada
con nmeros, cada vez que le decimos que tire, genera la misma secuencia: 7, 5, 6, 3, etc. Cmo
conseguir convertir este proceso predefinido en aleatorio? Simplemente, poniendo a girar la diana
(mayordomo randomize), en este caso, a una velocidad que depende del segundo del da en que nos
encontremos. As pues, el proceso lo dividimos al decirle al mayordomo que ponga a girar la diana y al
indicarle al robot que dispare. Bueno, un poco simple, pero para qu complicarnos? Veamos los pasos
sintcticos a emplear para crear una secuencia de nmeros aleatorios:
1. Proporcionar a nuestro programa informacin acerca de la clase Random. Al principio del programa
escribiremos la siguiente sentencia:
Import java.util.Random;
Funcin miembro
Descripcin
rnd.nextInt()
rnd.nextLong()
2-64 y 264
rnd.nextFloat()
[0,1[
rnd.nextDouble()
[0,1[
Rango
2
32
2
y
ro
Cas sempre, para generar un nmero aleatorio, se usa la funcin miembro rnd.nextDouble().El valor
devuelto es de tpo double. Un aspecto mportante a tener en cuenta, es que el valor devuelto se
encuentra en el rango mayor o gual a cero y menor a 1. Es decr, el nmero devuelto puede ser cero
pero no puede ser uno.
En el sguente ejemplo mostraremos todo lo expresado hasta este momento:
mportjava.til. Random;
public class Programa {
}
J ____________________________________________________________________________
En el caso de necestar nmeros aleatoros enteros en un rango determnado, podemos trasladarnos a
un ntervalo dstnto, smplemente multplcando, aplcando la sguente frmula general:
donde (nt) al nco, transforma un nmero decmal double en entero int, elmnando la parte decmal.
Por ejempIo, si deseamos nmeros enteros comprendidos entre eI rango [0,99], incIuidos Ios extremos,
Ia frmuIa quedara de Ia siguiente manera:
(int)(rnd.nextDoubIe() * 100 + 0);
(int)(rnd.nextDoubIe() * 100);
100 es Ia cantidad de nmeros enteros en eI rango [0,99] y 0 es eI trmino inicia! deI rango.
En eI caso de querer nmeros aIeatorios enteros comprendidos entre [1,6], que son Ios Iados de un
dado, Ia frmuIa quedara as.
(int)(rnd.nextDoubIe() * 6 + 1);
6 es Ia cantidad de nmeros enteros en eI rango [1,6] y 1 es eI trmino iniciaI deI rango.
A continuacin, daremos dos programas compIetos , como ejempIo para expIicar eI cambio de semiIIa
en Ia generacin de nmeros aIeatorios:
importjava.utiI.Random;
public class Programa {
}
}
SaIida
Primera secuencia.
0.477306442553755
0.6150676961227264
0.8217343290939352
Segunda secuencia.
0.6607147048099735
0.10104896936581531
0.2628223838639594
En este primer ejempIo, mostramos dos secuencias de tres nmeros aIeatorios, Ios cuaIes estn en eI
rango [0,1[, incIuido eI cero pero excIuido eI uno. Vemos que Ios nmeros aIeatorios en Ias dos
secuencias, son distintos, ya que en realidad, es una sola secuencia, que tiene como punto de partida la
misma semilla. A continuacin, lo compararemos con el siguiente ejemplo, donde utilizaremos la
funcin "setSeed(semilla_nueva)", para el cambio de semilla, funcin resaltada con un comentario
flecha:
importjava.util.Random;
public class Programa {
}
}
Salida
Primera secuencia.
0.778983378859943
0.36474001734926775
0.9579995205698871
Segunda secuencia.
0.778983378859943
0.36474001734926775
0.9579995205698871
Observamos que las dos secuencias estn formadas por los mismos nmeros aleatorios, ya que a ambas
secuencias, les precede la funcin de cambio de semilla "rnd.setSeed(3816)". En dicha instruccin, las
dos funciones
elegido cualquier otro nmero, pero con la peculiaridad de que la semilla tiene que ser igual en ambas
funciones para producir dos secuencias con los mismos nmeros aleatorios.
Entrega n15 del Curso Lenguaje de program acin Java Nivel I"
10
EJERCICIO
Crear el cdigo de un programa en el que se declaran tres variables tipo float a, b y c, cuyo valor se
muestra en pantalla y debe estar comprendido entre cero y 10, excluido el diez.
Solucin:
import java.util.Random;
public class Programa {
public static void main(String arg[]) {
float a, b, c;
Random rnd = new Random();
a = (float)(rnd.nextDouble() * 10);
b = (float)(rnd.nextDouble() * 10);
c = (float)(rnd.nextDouble() * 10);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
Comentario: la instruccin siguiente (rnd.nextDouble() * 10), genera un valor de tipo doble y dado que
la variables a, b, y c han sido declaradas como float al inicio del programa, se ha procedido a hacer la
conversin a un valor de tipo float ,a travs de la instruccin (float).
EJERCICIO
Crear el cdigo de un programa que genera tres nmeros enteros aleatorios a, b, c, comprendidos entre
65 y 90, ambos inclusive. Los mostraremos en pantalla.
Solucin:
import java.util.Random;
public class Programa {
public static void main(String arg[]) {
int a, b, c;
Random rnd = new Random();
a = (int)(rnd.nextDouble() * 26 + 65)
b = (int)(rnd.nextDouble() * 26 + 65)
c = (int)(rnd.nextDouble() * 26 + 65)
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
Comentario: Si quieres puedes usar otra frmula. Puedes escribir con igual resultado, lo siguiente:
a = (int)(rnd.nextDouble() * (90 - 65 + 1) + 65);
b = (int)(rnd.nextDouble() * (90 - 65 + 1) + 65);
c = (int)(rnd.nextDouble() * (90 - 65 + 1) + 65);
Cdigo versin 1:
Cdigo versin 2 :
La sangra, al escribir cdigo, la estableceremos normalmente a travs del tabulador. El primer nivel de
sangrado, corresponder a una primera pulsacin del tabulador, el segundo nivel, a dos pulsaciones y
as sucesivamente.
Explicar que en Java, System.out, representa la pantalla como salida, por lo tanto cuando escribimos
esta instruccin System .out.println(argumento), el mensaje que le pasamos como argumento al
mtodo println, se imprime en la pantalla. Cierta similitud, sucede con System.in, que representa al
teclado como entrada de datos. Cuando escribimos la instruccin System.in.read(), estamos haciendo
la entrada de un carcter por teclado a travs del mtodo read , pero como tipo int, por lo que se hace
la conversin a un carcter con la instruccin (char).
Como podemos comprobar, con el mtodo read, es muy incmodo estar leyendo por teclado letra a
letra, por ello, para poder leer una cadena completa, emplearemos el siguiente cdigo:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String cadena = br.readLine();
Empezaremos explicando System.in, donde in (input) es un objeto de entrada de datos por teclado,
perteneciente a la clase System. En trminos prcticos, diremos que System.in, representa el teclado
como entrada de datos.
La instruccin new InputStreamReader(argumento), significa que estamos creando un objeto de la
clase InputStreamReader, es decir, estamos estableciendo y abriendo un flujo de entrada de datos y al
pasar como argumento System.in, indicamos que el flujo de entrada de datos es a travs del teclado.
La instruccin BufferedReader br = new BufferedReader(argumento), crea un objeto que se recibe en
la variable br de la clase BufferedReader, y a travs del objeto br tenemos acceso al mtodo readLine().
Esto se ve plasmado en la instruccin br.readLine(), que se constituye en un mtodo especial, para leer
una
cadena
travs
del
flujo
creado
cuando
recibe
el
argumento
el
objeto
new
EJEMPLOS: PEDIR DATOS Y GESTIONAR LOS POSIBLES ERRORES CON TRY-CATCH O THROWS
Seguidamente, daremos dos ejemplos de cmo leer dos nmeros por consola, que inicialmente se leen
por teclado en formato cadena y luego lo convertiremos en nmeros reales de tipo double, para
posteriormente sumarlos y mostrar el resultado en la pantalla de consola.
import java.io.*;
public class Programa {
public static void main(String a rg []){
BufferedReaderbr = new BufferedReader(new InputStreamReader(System.in));
double n1 = 0.0, n2 = 0.0, s = 0.0;
tiy {
System.out.print("Ingresar nmero 1 ? "); n i =
Double.parseDouble(br.readLine());
System.out.print("Ingresar nmero 2 ? "); n2 =
Double.parseDouble(br.readLine());
} catch(IOException e) { System.out.println(Error en datos introducidos); }
s = n i + n2;
System.out.println("Suma : " + s);
}
}
En este ejemplo, pedimos ingresar dos nmeros por teclado. Si por error, el usuario ingresa "a2" en
lugar de "12" como cadena, es obvio que al tratar de convertirlo en un nmero real de tipo double,
aparezca un error, ya que "a2" empieza por una letra y no es un nmero. Si esto ocurre en Java decimos
que ha ocurrido una excepcin, la cual se maneja con la clase IOException, que significa manejo de
excepciones de entrada y salida. Como se ve en el ejemplo, se ha producido un error de entrada, por lo
que se ejecuta la instruccin catch (lOException e), que indica que es una excepcin de entrada y salida,
dando como resultado el mensaje que se muestra en pantalla de la consola:"Error en datos
introducidos" .De esta manera, se sabe con el mensaje cul fue el error y el programa termina en forma
normal sin bloquearse. La otra manera de manejar excepciones, es como se muestra en el siguiente
programa:
import java.io.*;
public class Programa {
public static void main(String arg[]) throws IOException {
BufferedReaderbr = new BufferedReader(new InputStreamReader(System.in));
double n i = 0.0, n2 = 0.0, s = 0.0;
System.out.print("Ingresar nmero 1 ? "); n i = Double.parseDouble(br.readLine());
System.out.print("Ingresar nmero 2 ? "); n2 = Double.parseDouble(br.readLine());
s = n i + n2;
System.out.println("Suma : " + s);
}
}
La diferencia radica en que hemos cambiado try/catch y en su lugar usamos throws. De esta manera,
throws
IOException
maneja la excepcin como try/catch, pero sin avisar al usuario con un mensaje de
cul ha sido el error. Tampoco se produce un bloqueo del programa por el error (programa colgado),
sino que termina aparentemente de forma correcta, sin saber el usuario qu es lo que realmente ha
ocurrido.
Indicar tambin, que esta forma de manejar los errores por parte de Java a travs de excepciones, es
muy til en otros casos, como por ejemplo, una divisin entre cero, que originara un bloqueo del
programa. Sin embargo, si se pone el manejo de excepciones de la siguiente manera:
try {
System.out.println("Resultado : " + 5/0);
} catch(ArithmeticException e) {System.out.println("Error divisin entre cero") }
se captura el error con la excepcin ArithmeticException, que es divisin entre cero. Se muestra el
mensaje del error producido y el programa continua, pero sin bloquearse por el error.
En resumen, las excepciones son una manera que tiene Java de capturar los errores producidos por
datos de entrada incorrectos, que podran producir bloqueos, abortando o colgando el programa.
Gracias al manejo de excepciones podemos, por el contrario, hacer que estos programas terminen
correctamente, mostrando al usuario un mensaje que le indica el tipo de error cometido.
Entrega n15 del Curso Lenguaje de program acin Java Nivel I"
10
3PPENDER W OGRAMAR B
/ / ( 1 ) PAQUETE
import java.aw t.*;
import javax.sw ing.*;
/ / ( 2 ) FORMULARIO
public cla ss Program a extends JFram e {
/ / ( 3 ) CO N TRO LES DEL FORMULARIO
JPanel jpanel = (JPanel) this.getContentPane();
JTextField jtextfield = new JTextField();
/ / ( 4 ) CO NSTRUCTO R DEL FORMULARIO
public Program a() {
/ / ( 5 ) PRO PIED A D ES DEL CONTENEDOR
jpanel.setLayout(null);
jpanel.setBackground(Color.lightGray);
}
/ / ( 9 ) METODOS DEL FORMULARIO
public static void m ain(String arg[]) {
new Programa();
}
}
h o rm l
j-
J ;| X ;
(1) Paquete
En este punto, se usa la sentencia import, para declarar los paquetes que emplearemos en nuestro
programa. Explicar, que un paquete es algo similar a una ruta, donde se encuentran las clases que
utilizaremos en el programa. En nuestro caso, JTextField, JPanel, JFram e, son clases que pertenecen
al paquete javax.swing , as como la clase Color pertenece al paquete java.awt. Los paquetes forman
parte de java, lo nico que hacemos nosotros es cargarlos para poder usarlos en nuestro programa.
(2) Formulario
Program a extends JFram e. La idea de esta sentencia, es hacer que nuestro programa tenga el
comportamiento de un formulario (ventana Windows) y para ello debemos heredar (extends) de
JFrame, sus particularidades. JFrame, es una clase que tiene todas las caractersticas propias de una
ventana en Windows. A partir de este punto, nuestro programa deja de ser un programa de consola
DOS y pasa a ser un programa visual tipo ventana Windows.
jpanel.setLayout(null). Esta instruccin significa, que al pasarle null como parmetro al mtodo
setLayout, nuestro contenedor, representado a travs del objeto jpanel, no administrar la forma de
colocar los controles en el contenedor, sino que dejar que esa labor la realice el programador a travs
de coordenadas.
.- jpanel.add(jtextfield, null). El mtodo add pertenece a la clase Jpanel. Este mtodo, es usado para
aadir un control al contenedor, representado con el objeto jpanel. El primer parmetro, el objeto
jtextfield, se aade al contenedor y el segundo parmetro, null, indica que la posicin, dnde colocar el
controlador jtextfield dentro del contenedor, ser determinado por el programador, a travs de
coordenadas que fueron explicadas en el punto 5 y 6.
.- setVisible(true). Este parmetro true, del mtodo setVisible, determina que el formulario sea visible
en la pantalla, ya que si ponemos false, el formulario est en la pantalla de forma invisible.
LA FUNCIN GETTEXT
El contenido que introduce un usuario a travs de un JTextField, tiene carcter de texto. Para trasladar
dicho contenido a una variable, se usa la funcin getText. La sintaxis a emplear es:
Si deseamos convertir el valor retornado por la instruccin jtextfield.getText(), en forma de texto, que
se recibi en la variable cadena, a un valor en forma de nmero, la sintaxis es la siguiente:
float a = Float.parseFloat(cadena);
Esto supone, que la variable a, que ha sido definida como tipo float, adopta el contenido numrico del
JTextField.
La funcin getText, no elimina los espacios en blanco, ni los tabuladores ni los avances de lnea. Para
suprimirlos, podemos aplicar el ejemplo siguiente:
String cadena = "
38205
";
Otra form a relevante de pedir datos con Java, consiste en el uso de ventanas
de dialogo de peticin de datos (JOptionPane.showInputDialog). Cuando se invoca la
funcin JOptionPane.showInputDialog, se despliega una ventana independiente, con un
mensaje definido de solicitud de datos al usuario, que dispone de una caja de texto
asociado para responder y de botones para aceptar o cancelar. La sintaxis es:
String s = JOptionPane.showInputDialog("Introduzca un nmero","Introduccin nmero");
donde "s" es una variable, que toma el valor que haya introducido el usuario en forma de
cadena.
Te animamos a que, valindote de los ejemplos que hemos visto, crees tus propios programas de
prueba y veas por t mismo los distintos formatos de presentacin y resultados que se pueden obtener.
Entrega n16 del Curso Lenguaje de program acin Java Nivel I"
11
/ / ( 1 ) PAQUETE
import java.awt.*;
import javax.sw ing.*;
/ / ( 2 ) FORMULARIO
public cla ss Program a extend s JFram e {
/ / ( 3 ) CO N TRO LES DEL FORMULARIO
JPanel jpanel = (JPanel) this.getContentPane();
JTextArea jtextarea = new JTextArea();
/ / ( 4 ) CO NSTRUCTO R DEL FORMULARIO
public Program a() {
/ / ( 5 ) PRO PIED A D ES DEL CONTENEDOR
jpanel.setLayout(null);
jpanel.setBackground(Color.lightGray);
}
/ / ( 9 ) METODOS DEL FORMULARIO
public static void main(String arg[]) {
new Programa();
}
}
Esto es un control
JTextArea
de varias lneas
El cdigo en todos sus detalles, fue explicado en el artculo anterior. Slo aadir, que en lugar del
control JTextField estamos usando el control JtextArea. Al tratarse de un control para ingresar un texto
de varias lneas, la forma de cambiar de lnea es a travs de los caracteres de escape \r\n, donde \r
significa "ir al inicio de la lnea" y \n significa "cambio de lnea". Esto se puede observar en la instruccin
siguiente:
/ / ( 1 ) PAQUETE
import java.aw t.*;
import javax.sw ing.*;
/ / ( 2 ) FORMULARIO
public cla ss Program a extend s JFram e {
/ / ( 3 ) CO N TRO LES DEL FORMULARIO
JPanel jpanel = (JPanel) this.getContentPane();
JLabel jlabel = new JLabel();
JTextField jtextfield = new JTextField();
/ / ( 4 ) CO NSTRUCTO R DEL FORMULARIO
public Program a() {
/ / ( 5 ) PRO PIED A D ES DEL CONTENEDOR
jpanel.setLayout(null);
jpanel.setBackground(Color.lightGray);
/ / ( 6 ) PRO PIED A D ES DE LO S CO NTRO LES
jlabel.setBounds(new Rectangle(5, 15, 220, 21));
jlabel.setText("Introduzca su peso en kgs por favor");
jtextfield.setBounds(new Rectangle(225, 15, 80, 21));
}
/ / ( 9 ) METODOS DEL FORMULARIO
public static void m ain(String arg[]) {
new Programa();
}
}
En cuanto a las propiedades de los JLabels, su manejo es bsicamente igual que el de los JTextField.
Mostraremos a continuacin una serie de mtodos propios de un Jlabel. Estos mtodos se usan para
modificar las propiedades de los JLabels. Algunas estn plasmadas en el ejemplo mostrado arriba y
otras no. Vamos a dar ejemplos para un uso adecuado:
.- jlabel.setBounds(new Rectangle(130, 149, 125, 20)). El mtodo setBounds se usa para posicionar el
control JLabel en una posicin determinada dentro del formulario. Esta posicin est indicada por el
objeto new Rectangle(130, 149, 125, 20), que se le pasa como argumento, donde 130, 149 son
respectivamente las coordenadas x,y dentro del formulario y 125 es el ancho y 20 la altura del control
JLabel.
Para mostrar un mensaje compuesto de distintas partes en un JLabel, hemos de usar el smbolo de
concatenacin +. Por ejemplo:
jlabel.setText(msg1 + msg2);
El smbolo en cuestin, hace que se muestre el contenido derivado de las variables m sg l y msg2.
Entrega n18 del Curso Lenguaje de program acin Java Nivel I"
11
//(1) PAQUETE
import
import
import
import
import
import
import
import
import
javax.sw ing.JLabel;
javax.swing.JTextField;
javax.swing.JPanel;
javax.swing.JFram e;
javax.swing.SwingConstants;
javax.swing.BorderFactory;
javax.swing.border.Border;
java.awt.Color;
java.awt.Rectangle;
//(2) FORMULARIO
public Programa() {
//(5) PROPIEDADES DEL CONTENEDOR
jpanel.setLayout(null);
jpanel.setBackground(Color.lightGray);
for(int i = 0; i < label.length; i+ + ) {
label [i] = new JLabel(); //Llenam o s el array de etiquetas
text[i] = new JTextField();
//Llem an o s el array de ca jas de texto
//(6) PROPIEDADES DE LOS CONTROLES
jpanel.add(label[i], null);
jpanel.add(text[i], null);
}
//(8) PROPIEDADES DEL FORMULARIO
setSize(200,330);
setTitle("Form1");
setVisible(true);
}
//(9) METODOS DEL FORMULARIO
En este formulario, hemos definido 6 JLabels denominados label[0], label[1], label[2], label[3], label[4],
label[5] as como 6 JTextFields, denominados text[0], text[1], text[2], text[4], text[5]. Tambin
podramos haberlos nombrado simplemente como label0, label1, label2, label3, label4, label5, etc. Pero
al igual que ocurre con las variables, resultar mucho ms cmodo de cara al tratamiento de datos el
nombrarlas como una matriz de controles, que nos permite un tratamiento automatizado.
Ahora, nos centraremos en explicar el cdigo del programa expuesto anteriormente.
//(1) PAQUETE
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.SwingConstants;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import java.awt.Color;
import java.awt.Rectangle;
En este primer bloque de cdigo, declaramos las rutas donde estn ubicadas todas las clases que
estamos usando en el programa .Y como recordatorio de otros artculos, import j'ava.swing.Jlabel, se
interpreta de la siguiente manera "importar la clase JLabel ubicado en la ruta /java/swing/, siendo java
y swing carpetas".
La sentencia JLabel[] label = new JLabel[6], es una declaracin de un array de controles de tipo Jlabel y
el array es de tamao 6, es decir, estamos declarando 6 variables y cada una de estas variables
almacena un control de tipo Jlabel y el nombre de stas adoptan la siguiente forma:
label[0], label[1], label[2], label[3], label[4], label[5]. De igual manera, se puede interpretar lo que hace
la sentencia JTextField[] text = new JTextField[6], en este caso, las variables presentan esta forma:
textl[0], text[1], text[2], text[3], text[4], text[5] y cada una almacena un control de tipo JTextField.
Border border = BorderFactory.createLineBorder(Color.black, 1);
Esta sentencia, es la declaracin de una variable de nombre border, que almacena un borde, con la
caracterstica de que es de color negro y de un grosor de 1, pudiendo tanto el color como el grosor del
borde cambiar a gusto del programador. Por ejemplo, si queremos un borde rojo en lugar de "black",
pondramos "red" y si deseamos un grosor mayor, podemos poner "2" en lugar de "1", hasta obtener la
caracterstica del borde que nos agrade para la etiqueta JLabel. Ms adelante, en el cdigo, se usa esta
caracterstica del borde para ponerlo como atributo de nuestras etiquetas.
for(int i = 0; i < label.length; i++) {
label[i] = new JLabel(); //Llenamos el array de etiquetas
text[i] = new JTextField(); //Llemanos el array de cajas de texto
}
La sentencia for en el programa es usada para manejar los arrays de controles que hemos declarado
previamente. El uso del for en Java lo estudiaremos ms adelante, por lo que no debemos
preocuparnos ahora por entender la sintaxis. Simplemente decir que vamos a crear tantas etiquetas y
tantas cajas de texto como hayamos definido; en nuestro caso, crearemos 6 etiquetas y 6 cajas de
texto. Lo primero a destacar es el atributo label.length, que nos da de forma automtica el tamao de
los arrays mencionados, que en este caso es de tamao 6. Tambin podamos haber usado text.length,
que nos da igualmente el valor 6 , ya que text y label son arrays declarados, ambos de tamao 6.
Por otro lado, la sentencia label[i] = new JLabel(); toma la siguiente forma por cada iteracin de la
sentencia for :
label[0]
label[1]
label[2]
label[3]
label[4]
label[5]
=
=
=
=
=
=
new
new
new
new
new
new
JLabel();
JLabel();
JLabel();
JLabel();
JLabel();
JLabel();
Cada una de estas 6 variables label[0], ... label[5], toma como valor un objeto de tipo JLabel o lo que es
lo mismo, un control de tipo JLabel. De la misma manera, podemos interpretar la sentencia text[i] =
new JTe xtFie ld ();
text[0] = new JTextField();
text[1] = new JTextField();
text[2] = new JTextField();
}___________________________________________________________
Esta parte del cdigo est dentro de la sentencia for que vimos antes; por lo tanto, en cada iteracin,
estas sentencias, toman la forma siguiente. Slo analizaremos cuando i = 0 .Para los siguientes valores
1, 2, 3, 4 y 5, se produce la misma accin.
(1)
(2)
(3)
(4)
(5)
Aclarar que las sentencias numeradas con (1), (2), (3), (4) y (5), ya fueron explicadas en anteriores
entregas; vamos a explicar aspectos generales de lo que hacen en el programa. En (1), tenemos la
sentencia
determinada, as como con un ancho y una altura especfica. Resaltaremos el artificio hecho para
espaciar una etiqueta de otra, de tal forma, que estn en filas distintas y no se superpongan en el
formulario. Por ejemplo, si i = 0, entonces (i +1)*40 = 40, es decir, que esta primera etiqueta label[0], se
ubica dentro del formulario en la fila 40 y si analizamos cuando i = 1, vemos que (i+1)*40 = 80, significa
que la etiqueta label[1], se ubica dentro del formulario en la fila 80.
En (2), tenemos la sentencia encargada de poner un texto a la etiqueta label[0] en el formulario, en este
caso cuando i = 0, la etiqueta label[0] muestra el texto "Dato 1" y cuando i = 1, la etiqueta label [1]
muestra el texto "Dato 2" y as sucesivamente con las dems valores para i.
En (3), tenemos la sentencia encargada de poner un borde a nuestra etiqueta label[0], la definicin de
las caractersticas de este borde, como el color y grosor, ya fueron explicados ms arriba.
En (4), tenemos la sentencia encargada de centrar el texto del punto (2).
En (5) tenemos la misma sentencia de (1), pero en este caso ubica la caja de texto dentro del formulario
en una coordenada determinada, as como el ancho y altura de la etiqueta text[i].