Aprende Java Con Ejercicios - Sanchez Luis Jose PDF Java (Lenguaje de Programación) Máquina Virtual de Java
Aprende Java Con Ejercicios - Sanchez Luis Jose PDF Java (Lenguaje de Programación) Máquina Virtual de Java
Título original
Aprende Java Con Ejercicios -- Sanchez Luis Jose
Descargar ahora
Derechos de autor
© © All Rights Reserved
Formatos disponibles
PDF, TXT o lea en línea desde Scribd
Facebook Twitter
Correo electrónico
Índice general
ÍNDICE GENERAL
5. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1 Bucle for . . . . . . . . .. . . . .. . . . .. . . . . . . . .. . . . .. . . . . . . . 39
5.2 Bucle while . . . . . . . .. . . . .. . . . .. . . . . . . . .. . . . .. . . . . . . . 40
5.3 Bucle do-while . . . . . . . . .. . . .. . . . . . . . . .. . . . .. . . .. . . . . . 41
5.4 Ejercicios . . . . . . . . . . . . . .. . . . . . . . . . . . . .. . . . . . . . . . . . . 44
6. Números aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1 Generación de números aleatorios con y sin decimales . . . . . . . . . . . . . . 51
6.2 Generación de palabras de forma aleatoria de un conjunto dado . . . . . . . . 55
6.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.1 Arrays de una dimensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.2 Arrays bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.3 Recorrer arrays con for al estilo foreach . . . . . . . . . . . . . . . . . . . . . . . 70
7.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.4.1 Arrays de una dimensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.4.2 Arrays bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.1 Implementando funciones para reutilizar código . . . . . . . . . . . . . . . . . . 80
8.2 Comentarios de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.3 Creación de bibliotecas de rutinas mediante paquetes . . . . . . . . . . . . . . 83
8.4 Ámbito de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.5 Paso de parámetros por valor y por referencia . . . . . . . . . . . . . . . . . . . 87
8.6 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9. Programación orientada a objetos . . . . . . . . . . . . . . . . . . . . . . . . 95
9.1 Clases y objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.2 Encapsulamiento y ocultación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.3 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9.3.1 Creí haber visto un lindo gatito . . . . . . . . . . . . . . . . . . . . . . . . 97
9.3.2 Métodos getter y setter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9.3.3 Método toString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.4 Ámbito/visibilidad de los elementos de una clase - public, protected y private . 107
9.5 Herencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9.5.1 Sobrecarga de métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
9.6 Atributos y métodos de clase ( static) . . . . . . . . . . . . . . . . . . . . . . . . . 114
9.7 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
9.8 Arrays de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
9.9 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.9.1 Conceptos de POO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
9.9.2 POO en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
9.9.3 Arrays de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.Colecciones y diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
ÍNDICE GENERAL
ÍNDICE GENERAL
Sobre el autor
Luis José Sánchez González es Ingeniero Técnico en Informática de Gestión por la
Universidad de Málaga (España) y funcionario de carrera de la Junta de Andalucía
desde 1998. En su trabajo de profesor de Informática combina sus dos pasiones: la
enseñanza y la programación.
En el momento de publicar este libro, es profesor del I.E.S. Campanillas (Málaga) e
imparte clases en el Ciclo Superior de Desarrollo de Aplicaciones Web .
Puedes ponerte en contacto con el autor mediante la dirección de correo electró-
nico [email protected] o mediante LinkedIn (https://es.linkedin.com/pub/luis-josé-
sánchez/86/b08/34).
ii
Si eres profesor y utilizas este libro para enseñar Java, pídele al autor que añada en
esta sección el nombre de tu centro educativo o empresa, escribiendo un correo a la
dirección [email protected] indicando la localidad y el país del centro.
iii
Introducción
Java es un lenguaje de programación; es de hecho, desde hace más de 10 años, el
lenguaje de programación más utilizado en el mundo según el índice PYPL2 (PopularitY
of Programming Language index).
Los ordenadores no entienden - por ahora - el español, ni el inglés, ni ningún otro
idioma natural. De una forma muy simplificada podríamos decir que un lenguaje de
programación es un idioma que entiende el ordenador3 . Cualquier aplicación - proce-
sador de textos, navegador, programa de retoque fotográfico, etc. - está compuesta de
una serie de instrucciones convenientemente empaquetadas en ficheros que le dicen
al ordenador de una manera muy precisa qué tiene que hacer en cada momento.
Java es un lenguaje de programación estructurado y, como tal, hace uso de variables,
sentencias condicionales, bucles, funciones… Java es también un lenguaje de progra-
mación orientado a objetos y, por consiguiente, permite definir clases con sus métodos
correspondientes y crear instancias de esas clases. Java no es un lenguaje de marcas
como HTML o XML aunque puede interactuar muy bien con ellos4 .
Las aplicaciones Java se suelen compilar a bytecode, que es independiente del sistema
operativo, no a binario que sí depende del sistema operativo. De esta forma, el
bytecode generado al compilar un programa escrito en Java debería funcionar en
cualquier sistema operativo que tenga instalada una máquina virtual de java (JVM).
Cualquier editor simple como Nano o GEdit es suficiente para escribir código en
Java aunque se recomiendan IDEs5 como NetBeans o Eclipse ya que tienen algunas
características que facilitan mucho la programación como el chequeo de errores
mientras se escribe, el autocompletado de nombres de variables y funciones y mucho
más.
2
http://pypl.github.io/PYPL.html
3
En realidad un ordenador no entiende directamente los lenguajes de programación como Java, C, Ruby, etc. Mediante una
herramienta que se llama compilador o traductor según el caso, lo que hay escrito en cualquiera de estos lenguajes se convierte
en código máquina - secuencias de unos y ceros - que es el único lenguaje que de verdad entiende el ordenador.
4
El lector deberá tener unos conocimientos básicos de HTML para entender bien y sacar provecho del capítulo relativo a JSP
de este mismo libro. Una web excelente para aprender HTML es http://w3schools.com
5
IDE: Integrated Development Enviroment (Entorno de Desarrollo Integrado)
iv
OpenJDK
El Open Java Development Kit (OpenJDK) contiene una serie de componentes
que permiten desarrollar y ejecutar aplicaciones escritas en Java. Incluye la má-
quina virtual de Java (JVM) que permite ejecutar bytecode. Como mencionamos
en el apartado Introducción, el bytecode es el ejecutable en Java. El OpenJDK
también incluye el compilador javac que permite compilar el código fuente para
generar el bytecode. En Ubuntu, basta ejecutar una línea en la ventana de
terminal para instalar el OpenJDK :
$ sudo apt-get install openjdk-8-jdk
Geany
Una vez que el lector ha superado la barrera de escribir sus primeros programas,
recomendamos utilizar el entorno de programación Geany (por ejemplo a partir
del capítulo 2). Se trata de un IDE muy ligero que permite realizar aplicaciones
sencillas con rapidez. Mediante Geany se puede escribir el código, chequear
si contiene errores, compilar y ejecutar el bytecode generado. Para programas
pequeños - por ej. calcular la media de varios números - es recomendable utilizar
Geany en lugar de un IDE más complejo como Netbeans. Mientras con Geany
da tiempo a escribir el código, compilar y ejecutar, Netbeans todavía estaría
arrancando.
Instalación de Geany (y los plugins adicionales) en Ubuntu:
$ sudo apt-get install geany
$ sudo apt-get install geany-plugins
coloreadodetexto
•Kuestravaria
General
CaracterísticasSangriaCompletadosMostrar
@authorLuis
Incectaz Mostrar
2invertirloscoloresderesaltadodesintaxis
EpublicclassColo
Mostraroulasdesanona
publicstatic ArChIVOS
Stringazul YMuestraemargendemarcas
Stringmorado
Detieneeldesolazamientohaciaabaocuandosealcanzalaóltimalinea
Stringblanco
System.out.pi Marcadordelineaslargas
System.out.pr @Activado
System.out.pe
Tipo: ©Fondo
System.out.pi
Colmos Bo
Espaciosvircuales
10•
ODeshabiRado
,lobaraseleconesrectangulares
)Semore
Netbeans
Cuando las aplicaciones a desarrollar son más complejas y, sobre todo, cuando
éstas constan de varios ficheros, se recomienda utilizar Netbeans de la empresa
Oracle. En el capítulo 9, el lector ya podría sacarle mucho partido al uso de este
IDE. Se trata de un entorno integrado muy potente y muy usado a nivel profesional
que incluye el autocompletado de sintaxis y permite una depuración avanzada
paso a paso. Netbeans se puede descargar de forma gratuita y para cualquier
plataforma desde https://netbeans.org/downloads/.
Después de la instalación de Netbeans, procedemos a configurar el editor.
Para ello seleccionamos Herramientas → Opciones → Editor. A continuación
seleccionamos la pestaña Formato y en el menú desplegable correspondiente al
lenguaje de programación seleccionamos Java. La configuración debería quedar
como se indica en la imagen.
Es muy importante que los editores/IDEs que se utilicen para esribir código
en Java se configuren adecuadamente. Hemos visto cómo configurar Geany
y Netbeans, pero si el lector decide utilizar otras herramientas deberá
configurarlas igualmente. En definitiva, la configuración/preferencias de las
herramientas que se utilicen deben establecerse de tal forma que se cumplan
estos requisitos:
/**
* Muestra por pantalla la frase "¡Hola mundo!"
*
* @author Luis J. Sánchez
*/
HolaMundo.Java(-/Dropbox/ProyectosGit/aprende-Java-con-e].../01_Hola_mundo_Sallda_de_datos_por_pantalla)-gedit
Abrir RGuardar +Deshacer
capitulo01.mdxaHolaMundojavax
Muestraporpantallalafrase"¡Holamundo!"
*(authorLuisJ.Sanchez
7publicclassHolaMundo{//Claseprincipal
publicstaticvoidmain(String[]args){
System.out.println("¡Holamundo!");
Anchuradelapestat
Fíjate que el nombre que le damos al fichero es exactamente igual que la clase principal
seguido de la extensión .java. Abre una ventana de terminal, entra en el directorio
donde se encuentra el fichero y teclea lo siguiente:
$ javac HolaMundo.java
$ java HolaMundo
Figura 1.2: HolaMundo.class es el bytecode generado (1). El resultado del programa es una línea de texto
escrita en pantalla (2).
La instrucción que hemos utilizado para mostrar una frase por pantalla es Sys-
tem.out.println() , colocando la frase entre paréntesis. También se puede volcar texto
por pantalla mediante System.out.print() . La única diferencia radica en que esta última
no añade un salto de línea al final, pruébalo en HolaMundo.java y compruébalo por ti
mismo. Si lo que quieres mostrar es una palabra o una frase, como en este ejemplo,
es importante que el texto esté entrecomillado.
/**
* Coloreado de texto
*
* Muestra varias palabras en el color que corresponde.
*
* @author Luis José Sánchez
*/
Como puedes ver en los dos ejemplos que hemos mostrado, algunas líneas están
ligeramente desplazadas hacia la derecha, es lo que se llama sangría o indentación.
En programación es muy importante sangrar (indentar) bien porque da una idea de qué
partes del código son las que contienen a otras. En este último ejemplo tenemos un
programa que tiene unos comentarios al principio y luego la clase principal marcada
por la línea public class Colores {. Dentro de la clase Colores está el main o bloque del
programa principal que tiene sangría por estar dentro de la definición de la clase
Colores. A su vez, dentro del main hay una serie de líneas de código que igualmente
tienen sangría.
En este libro, tanto el código de los ejemplos como el de las soluciones a los
ejercicios siguen el estándar de Google para el código fuente escrito en el lenguaje de
programación Java2 , por tanto, cada vez que se aplique la sangría será exactamente
de dos espacios.
2
http://google-styleguide.googlecode.com/svn/trunk/javaguide.html
1.3 Ejercicios
Ejercicio 1
Escribe una programa que muestre tu nombre por pantalla.
Ejercicio 2
Modifica el programa anterior para que además se muestre tu dirección y
tu número de teléfono. Asegúrate de que los datos se muestran en líneas
separadas.
Ejercicio 3
Escribe un programa que muestre por pantalla 10 palabras en inglés junto
a su correspondiente traducción al castellano. Las palabras deben estar
distribuidas en dos columnas y alineadas a la izquierda. Pista: Se puede
insertar un tabulador mediante \t.
Ejercicio 4
Escribe un programa que muestre tu horario de clase. Puedes usar espacios o
tabuladores para alinear el texto.
Ejercicio 5
Modifica el programa anterior añadiendo colores. Puedes mostrar cada asig-
natura de un color diferente.
Ejercicio 6
Escribe un programa que pinte por pantalla una pirámide rellena a base de
asteriscos. La base de la pirámide debe estar formada por 9 asteriscos.
Ejercicio 7
Igual que el programa anterior, pero esta vez la pirámide estará hueca (se
debe ver únicamente el contorno hecho con asteriscos).
Ejercicio 8
Igual que el programa anterior, pero esta vez la pirámide debe aparecer
invertida, con el vértice hacia abajo.
Ejercicio 9
Escribe un programa que pinte por pantalla alguna escena - el campo, la
habitación de una casa, un aula, etc. - o algún objeto animado o inanimado
- un coche, un gato, una taza de café, etc. Ten en cuenta que puedes utilizar
caracteres como *, +, <, #, @, etc. ¡Échale imaginación!
2. Variables
2.1 Definición y tipos de variables
Una variable es un contenedor de información. Imagina una variable como una cajita
con una etiqueta que indica su nombre, una cajita en la que se puede introducir un va-
lor. Las variables pueden almacenar valores enteros, números decimales, caracteres,
cadenas de caracteres (palabras o frases), etc. El contenido de las variables puede
cambiar durante la ejecución del programa, de ahí viene el nombre de “variable”.
Java es un lenguaje fuertemente tipado, es decir, es necesario declarar todas las
variables que utilizará el programa, indicando siempre el nombre y el tipo de cada
una.
El nombre que se le da a una variable es muy importante; intenta usar siempre
nombres significativos que, de alguna forma, identifiquen el contenido. Por ejemplo,
si usas una variable para almacenar el volumen de una figura, una buena opción sería
llamarla volumen; si tienes una variable que almacena la edad de una persona, lo mejor
es llamarla edad, y así sucesivamente.
Un programa se lee y se depura mucho mejor si los nombres de las variables se han
elegido de forma inteligente.
¿Podrías averiguar qué hace la siguiente línea de código?
Variables 9
/**
* Uso de variables enteras
*
* @author Luis J. Sánchez
*/
Si pretendemos almacenar valores muy grandes en una variable, usaremos el tipo long
en lugar de int.
double x, y;
Cada variable se debe definir en una línea diferente. Lo siguiente sí sería correcto.
Variables 10
double x;
double y;
/**
* Uso de variables que contienen números decimales
*
* @author Luis J. Sánchez
*/
x = 7;
y = 25.01;
Como puedes ver, también se pueden almacenar números enteros en variables de tipo
double .
/**
* Uso del tipo String
*
* @author Luis J. Sánchez
*/
Variables 11