You are on page 1of 44

Programaci´on Concurrente y de Tiempo Real

Gui´on de pr´acticas 1: Introducci´on a Java
Natalia Partera Jaime
Alumna colaboradora de la asignatura

´Indice
1. Breve introducci´
on a Java
1.1. Programas en Java: la plataforma J2SE, compilaci´on y ejecuci´on . . . . . . . . . . . . . .
1.2. Comparaci´
on entre Java y C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Breve introducci´
on a la orientaci´
on a objetos . . . . . . . . . . . . . . . . . . . . . . . . .

2
2
6
8

2. Estructura de un programa en Java
2.1. Clases y estructura general de una clase . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. M´etodos y estructura de un m´etodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9
10
11

3. Elementos b´
asicos de Java
3.1. Identificadores . . . . . . . .
3.2. Tipos, variables y valores . .
3.3. Expresiones y operadores . .
3.4. Instrucciones . . . . . . . . .
3.4.1. Instrucci´
on if . . . .
3.4.2. Instrucci´
on while . .
3.4.3. Instrucci´
on for . . . .
3.4.4. Instrucci´
on do while
3.4.5. Instrucciones break 3.4.6. Instrucci´
on switch . .
3.5. Entrada y salida de consola .

12
12
13
14
17
17
18
19
19
20
21
22

. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
continue
. . . . . .
. . . . . .

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

4. Paquetes de biblioteca

25

5. Clases de envoltura

26

6. Ejercicios para profundizar

29

7. Soluciones de los
7.1. Ejercicio 3 . .
7.2. Ejercicio 4 . .
7.3. Ejercicio 5 . .
7.4. Ejercicio 7 . .
7.5. Ejercicio 8 . .
7.6. Ejercicio 9 . .
7.7. Ejercicio 10 .
7.8. Ejercicio 11 .
7.9. Ejercicio 12 .
7.10. Ejercicio 14 .
7.11. Ejercicio 15 .
7.12. Ejercicio 16 .
7.13. Ejercicio 17 .
7.14. Ejercicio 18 .
7.15. Ejercicio 19 .
7.16. Ejercicio 20 .
7.17. Ejercicio 21 .
7.18. Ejercicio 22 .

ejercicios
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

30
30
30
31
33
33
34
35
35
36
38
38
39
40
41
43
43
44
45

1.

Breve introducci´
on a Java

Java es un lenguaje de programaci´
on independiente de la plataforma. La independencia a la plataforma
se debe a que Java se compila sobre su propia m´aquina virtual. Esto permite que en cualquier plataforma
se pueda ejecutar un mismo programa en c´odigo Java, independientemente de las caracter´ısticas que
soporte la plataforma, como la concurrencia, ya que es la m´aquina virtual de Java quien proporciona o
simula estas caracter´ısticas.
Cabe mencionar tambi´en que Java es un lenguaje orientado a objetos. Puede que usted no haya estudiado a´
un el paradigma de la orientaci´
on a objetos. De momento tan s´olo debe conocer la estructura de
un programa en Java.

1.1.

Programas en Java: la plataforma J2SE, compilaci´
on y ejecuci´
on

Observe la siguiente figura y localice el compilador y la m´aquina virtual de Java.

Figura 1: Imagen de la plataforma J2SE.

Como puede ver, el compilador de Java se situa sobre la m´aquina virtual. Por esta raz´on, un programa
en Java no tiene que ser compilado en diferentes plataformas, sino que se ejecuta sobre la m´aquina virtual
de Java correspondiente para dicha plataforma.
Hay otros aspectos que necesita saber sobre el desarrollo de programas en Java antes de empezar a
programar.
Editando: el nombre de los archivos fuente debe seguir el esquema nombre_clase.java. El nombre
del archivo (nombre_clase) debe coincidir con el nombre de la clase, y la extensi´on del archivo debe
ser .java. Preste atenci´
on a las letras min´
usculas y may´
usculas. No se preocupe si no sabe ahora
qu´e es una clase. Posteriormente encontrar´a un sencillo ejemplo ilustrativo.

2

Compilando: tras instalar en su equipo el JDK y configurarlo adecuadamente (vea el documento
guia-jcreator.pdf), podr´
a compilar sus programas en Java. Para ello debe ejecutar el comando
javac seguido del nombre del fichero fuente a compilar (incluyendo la extensi´on). El comando a
ejecutar en su terminal deber´
a seguir el esquema:
javac nombre_clase.java

Figura 2: Imagen de la compilaci´on.
Ejecutando: una vez que el programa haya sido compilado correctamente, podr´a ejecutarlo en su
terminal usando el comando java seguido del nombre del programa (mismo nombre que el archivo
fuente sin extensi´
on). Su comando en la terminal deber´a seguir el siguiente esquema:
java nombre_clase

3

4 .Figura 3: Imagen de la ejecuci´on. Documentando: en Java la documentaci´on del programa se puede incluir dentro del mismo. La documentaci´ on se genera en un archivo html usando el comando javadoc: javadoc nombre_clase.java Figura 4: Imagen de la documentaci´on.

*. Cuadro 1: Etiquetas u ´tiles para generar la documentaci´on. Un ejemplo de un c´ odigo documentado es el siguiente: /** * Programa en Java que pide al usuario el lado de * un cuadrado. Indica que est´a obsoleto y ya no se usa. Indica el autor del c´odigo.util. Indica el par´ametro de devoluci´on de la funci´on. Las etiquetas que m´ as se utilizan al generar documentaci´on son: Etiqueta @version @author @param @return @throws @deprecated @see nombre_clase Sirve para Indica la versi´on del documento. Indica un par´ametro de entrada de la funci´on.0 */ import java. Genera un enlace a la documentaci´on de la clase indicada. * * @author Natalia Partera * @version 1. y muestra su ´ area y su per´ ımetro. *@param args array de cadenas de caracteres *@exception no se generan excepciones */ 5 . Indica las excepciones que puede lanzar la funci´on. public class Cuadrado { /**El m´ etodo main recibe como argumento * un array de cadenas de caracteres.Figura 5: Imagen del resultado de la documentaci´on.

println("El ´ area del cuadrado es " + lado * lado). En cualquier caso. Sobrecarga de operadores. union ´ o typedef (presentes en C y C++). Scanner teclado = new Scanner(System. Macros para el preprocesador. puede leer el resto del documento y volver al final a este apartado para comprobar lo que ha entendido.public static void main (String[] args) { System. Si no conoce C++ y la orientaci´on a objetos. System. en oposici´on a C++.out. Observe el resultado. 1.in). Necesidad de liberar la memoria manualmente (posee recolecci´on autom´atica de basura). Operador sizeof.println("El lado del cuadrado mide: "). inline. Conversiones de tipo definidas por el usuario. } } Ejercicio 1 Cree un archivo fuente para el c´odigo anterior siguiendo las instrucciones de este apartado. include. double lado = teclado. Si usted est´ a muy familiarizado con C ´o C++ es recomendable que lea atentamente este apartado. Superclases protected ´ o private. Necesidad de ser compilado en diferentes plataformas. Plantillas (presentes en C++). Herencia m´ ultiple ´ o clases de base m´ ultiple. existen algunas diferencias. No obstante. Si no es el caso. register. Campos de bits. friend y template. Comparaci´ on entre Java y C/C++ En muchos aspectos. struct. ni archivos de cabecera. 6 .nextDouble(). Copia impl´ıcita de objetos.println("El per´ ımetro del cuadrado es " + lado * 4). aconsejamos que lea tambi´en los siguientes apartados donde se explica con detalle el lenguaje Java. no se preocupe si ahora no entiende algunas de las diferencias entre Java y C++. Notaci´ on de asignaci´ on expl´ıcita. A continuaci´ on se indican las caracter´ısticas de C ´o C++ que Java no soporta o no tiene: Punteros y aritm´etica de punteros.out.2. System. ejec´ utelo y genere su documentaci´on.out. Declaraciones extern. Java se parece bastante a los lenguajes de programaci´on C y C++. Comp´ılelo. Variables de referencia.

El operador % funciona en Java para enteros y punto flotante. Organizaci´ on del c´ odigo por paquetes..Tambi´en hay algunos aspectos de Java que no est´an presentes en C ni en C++: Es interpretado cuando se ejecuta. Posee recolecci´ on autom´ atica de basura (el programador no tiene que encargarse de destruir los objetos no u ´tiles). Java soporta los operadores de desplazamiento >> y >>>. Cadenas y vectores como objetos. Creaci´ on de objetos mediante new. Variables y par´ ametros de objeto como referencias. Java no tiene tipo de devoluci´ on predeterminado para m´etodos. Y hay otras caracter´ısticas de Java que trabajan de un modo distinto a como lo hacen en C ´o C++: Java utiliza true-false en lugar de cero-no cero para operaciones booleanas. Tipos primitivos boolean y byte. Las clases de Java utilizan el m´etodo finalize en lugar de destructores. no como en C++). Soporta trabajo en red. Soporta multiprocesamiento y m´etodos sincronizados. Programas y caracteres en Unicode de 16 bits. es ahora una clase Enum en Java. y u ´nico tipo de herencia. Soporta programaci´ on controlada por eventos. Todos los tipos enteros tienen signo. La resoluci´ on de una llamada a un m´etodo sobrecargado difiere en Java y en C++. Herencia simple (no presente en C. Java no tiene tipo unsigned. Soporta programaci´ on de GUI (Graphical User Interface) independiente de la plataforma. Las clases de Java se organizan en paquetes con un nombre. 7 . Soporta applets Web. El tipo enum de C. Cada paquete puede contener uno o m´ as archivos de c´ odigo fuente. ..

usted profundizar´ a en el paradigma de la orientaci´on a objetos en otras asignaturas posteriores.3. Breve introducci´ on a la orientaci´ on a objetos Antes de continuar con la introducci´ on al lenguaje Java. puede invocar a sus m´etodos o atributos desde el objeto: ´ public class NombreClase { .atributo.. es necesario declarar y construir un objeto de la clase correspondiente. Atributo. . //Declaraci´ on y construcci´ on del objeto: NombreClase objeto = new NombreClase().. Una clase es un conjunto de objetos similares. public static void main (String[] args) { . Un m´etodo es una funci´ on de un objeto.. Tambi´en debe saber que para acceder a un atributo perteneciente a un objeto o para invocar a un m´etodo de un objeto. y en cada objeto como en una variable de dicho tipo de datos. No obstante.. } . Durante el ambito de vida del objeto. //Uso de atributo: objeto. Los m´etodos de una clase funcionan igual para todos sus objetos. el valor de estos atributos es distinto para cada objeto. Aunque todos los objetos de una clase tengan los mismos atributos. es conveniente que usted entienda el significado y las diferencias entre algunos t´erminos para que no se confunda al leer este documento.metodo(parametro). } 8 .1.. Los t´erminos elementales de la orientaci´on a objetos son los siguientes: Clase.. M´ etodo. Puede pensar en una clase como un nuevo tipo de datos. Objeto.. Todos los objetos de una clase tienen los mismos atributos (variables o datos) y m´etodos (funciones u operaciones).. Un objeto es una entidad que posee atributos (datos) y m´etodos (operaciones). Un atributo es un dato de un objeto. //Llamada a m´ etodo: objeto. Los objetos con similares caracter´ısticas se agrupan en una misma clase.

¿El resultado obtenido se corresponde con lo esperado por usted? Analicemos los elementos del programa anterior: Comentario: Las primeras l´ıneas del c´ odigo anterior corresponden a un comentario." en la pantalla. En este caso. seguramente habr´a visto con anterioridad el programa "Hola Mundo". todas las funciones (o m´etodos) deben pertenecer a alguna clase.2. Java tambi´en acepta los comentarios t´ıpicos de C (/*Comentario*/) que pueden ocupar varias l´ıneas.println("Hola mundo. En Java. Definici´ on del m´ etodo: Dentro de la clase se define el m´etodo main(). Todos los programas en Java deben tener un m´etodo main(). } } Ejercicio 2 ¿Qu´e espera que haga este programa? Copie este c´odigo y gu´ardelo en el fichero Hola_mundo. cuyo cometido es mostrar en la salida externa por defecto (en este caso. 9 . debe ser un m´etodo de alguna clase (clase principal). y de C++ (//Comentario) que ocupa lo que queda de l´ınea. A continuaci´ on comp´ılelo y ejec´ utelo.out. Estructura de un programa en Java Si usted ya ha aprendido a programar en alg´ un otro lenguaje de programaci´on. A continuaci´on puede observar una versi´on de dicho programa en Java: /** * Programa en Java que escribe "Hola mundo. salvo que puede estar precedido por algunas palabras reservadas que le dan unas caracter´ısticas nuevas propias de la orientaci´on a objetos. Instrucciones o sentencias: El m´etodo main() contiene las instrucciones del programa principal. * * @author Natalia Partera * @version 1. el m´etodo main(). Los comentarios en Java empiezan con /** y acaban en */. seguida del nombre de la clase y del bloque encerrado entre llaves que le sigue.java. La estructura de este m´etodo es similar a como lo es en el lenguaje C. Definici´ on de la clase: Para definir una clase usamos la palabra reservada class. As´ı pues. el monitor) el texto entrecomillado. el programa tiene una u ´nica instrucci´on.0 */ public class Hola_mundo { public static void main (String[] args) { System. que contiene la ejecuci´ on del programa."). El contenido de la clase empieza con el car´ acter { y acaba con el car´ acter }.

Habr´ a observado que en la plantilla anterior aparece la palabra reservada public delante de la definici´ on de la clase. Instrucciones o sentencias: Son las instrucciones a ejecutar en el m´etodo main(). Declaraci´ on de m´ etodos: Son fragmentos de c´odigo que hacen una determinada funci´on. Las funciones que realizan son caracter´ısticas de los objetos de la clase. Clases y estructura general de una clase Veamos c´ omo es la estructura general de una clase en Java: /** * Estructura de una clase en Java */ public class NombreDeLaClase { //Declaraci´ on de los atributos de la clase //Declaraci´ on de los m´ etodos de la clase //M´ etodo main. Entender´a mejor la importancia de la visibilidad y el uso de los paquetes en el apartado 4. Cada objeto tiene estas variables. una detr´as de otra. 10 . Su argumento es una cadena de caracteres que contiene los argumentos introducidos al ejecutar el programa. Las sentencias se ejecutan siempre en el orden en el que se escriben y. varios m´etodos. si no es p´ ublica. En caso contrario. De momento necesita saber que esto se debe a que las clases pueden tener distinta visibilidad.1. pero el valor de estas variables cambia de un objeto a otro de la misma clase. Declaraci´ on de variables: Son las variables locales del m´etodo main(). son: Atributos de la clase: Son las variables que definen el estado de los objetos.2. Son variables accesibles desde todos los m´etodos del objeto. dicha clase s´olo puede ser utilizada dentro de su propio paquete. hasta que se acaba el m´etodo main(). que indica d´ onde empieza la ejecuci´ on public static void main (String[] args) { //Declaracion de las variables del m´ etodo //Sentencias de ejecuci´ on del m´ etodo } } Los elementos que suelen componer una clase cualquiera en Java. Una clase puede poseer un atributo. M´ etodo principal main(): El m´etodo main() aparece en la clase principal. varios atributos. y describe la ejecuci´ on del programa. un m´etodo. Este es otro aspecto de la orientaci´on a objetos que estudiar´a m´as adelante. Si una clase es p´ ublica puede ser utilizada desde cualquier paquete. una combinaci´on de las anteriores o estar vac´ıa. siempre.

2. String s2) {return (s1 + s2).23). El m´etodo main() debe ser p´ ublico siempre para que el int´erprete de Java lo pueda invocar. Los m´etodos pueden ser de clase o de instancia.m´ etodo(argumentos) //o de la forma objeto_de_la_clase. de modo que cada objeto puede llamar a su m´etodo de clase y pueden coexistir varios m´etodos con el mismo nombre pero que han sido llamados desde distintos objetos.. se pasa al m´etodo la referencia por valor.) { declaraciones locales /** Si hay */ instrucciones } Al igual que en otros lenguajes. System. que son siempre pasados por valor. En el cuerpo del m´etodo se incluye una secuencia de declaraciones e instrucciones entre llaves. tipo_2 arg_2. Los m´etodos contienen instrucciones y variables o referencias. En ´el. se especifican las variables locales si son necesarias. Adem´ as.} void potencia (int b) { String potencia = "El cuadrado de ". Si el par´ ametro formal es una referencia a un objeto. .Del mismo modo. log() o read()) o pueden ser definidos por el programador (como los m´etodos concatenar() y potencia() que aparecen a continuaci´ on). este m´etodo es com´ un a todos los objetos de la clase.2.. M´ etodos y estructura de un m´ etodo Un m´etodo es un procedimiento de c´ alculo definido en una clase. } //Ejemplos de llamadas a m´ etodos predefinidos: //Deben ser llamados de la forma Clase. En la cabecera del m´etodo se especifican los par´ametros formales. 11 . Veamos el esquema de un m´etodo: tipo_devoluci´ on Nombre (tipo_1 arg_1. Los m´etodos de clase son los m´as habituales.m´ etodo(argumentos) ln = Math. int cuad = b * b.println(potencia + b + " es " + cuad). Los m´etodos pueden pertenecer a clases predefinidas (por ejemplo. En el lado opuesto.out. Son aquellos que se definen para todos los objetos de una clase. los m´etodos println(). los elementos de las clases tambi´en pueden tener distinta visibilidad. los m´etodos de instancia son los declarados como static.log(1. Ejemplos de definici´ on y uso de m´etodos: //Ejemplos de declaraci´ on de m´ etodos String concatenar (String s1. los m´etodos en Java constan de una cabecera y un cuerpo. Estos m´etodos tienen la peculiaridad de que s´olo puede existir un m´etodo con este nombre para todos los objetos de la clase. Desde cualquier otro programa o cualquier parte del programa se puede acceder a los miembros declarados como public.

Si el nombre es compuesto. _v´ ı´ o_L^ oQ¨ u¨ e¨ o_N^ o_3303459345 Es recomendable que cuando elija un identificador: Utilice nombres significativos. Se considera un d´ıgito a cualquier car´ acter entre los caracteres ’0’ a ’9’. un identificador se puede escribir con caracteres hebreos. la clase debe incluir un m´etodo main que muestre todos estos datos. Para formar un identificador tambi´en se consideran letras los caracteres subrayado ’ ’ y d´olar ’$’. Una letra es cualquier car´ acter que se considera una letra en Java. Un identificador no debe coincidir con una palabra reservada del lenguaje. EjemploDeIdentificador. Elementos b´ asicos de Java Veamos poco a poco c´ omo construir programas en Java. asignaturasCursadas del tipo int. aunque el car´ acter ’$’ pr´ acticamente no se suele utilzar. Identificadores Un identificador es un nombre. uno2tres4oM´ as. Ejecute su programa. salgo en alg´ un tipo de nombrado autom´atico. Ejercicio 3 Cree una clase en Java que se llame MisDatos. A~ noM´ as. Son v´alidos los siguientes identificadores: ejemplo. Incluir´a tambi´en los atributos edad.scanner1. Como en Java se utiliza Unicode para los caracteres.1. Evite usar el car´ acter ’ ’ para separar unas palabras de otras. cir´ılicos. ciudad y ocupacion del tipo String. katakana. 3. Todos los atributos estar´an inicializados. Los nombres de clases empiecen con may´ uscula. εγεµπλo. otroEjemplo12. Un identificador debe empezar con una letra y debe seguir una sucesi´on de letras y d´ıgitos. En los nombres compuestos para variables y clases. apellidos. Por u ´ltimo. Puede ver una posible soluci´on en 7. En la clase existir´ a un m´etodo llamado asigSuspensas que reciba dos par´ametros del tipo int y devuelva otro par´ ametro del mismo tipo que indique el n´ umero de asignaturas que ha suspendido en la carrera.read(). La clase debe incluir los atributos nombre. 12 . etc. Los nombres permiten identificar los elementos que se est´an manejando en un programa. asignaturasAprobadas. utilice el car´acter subrayado para separar unas palabras de otras. Los nombres de constantes se escriben en may´ usculas. 3. No olvide crear un objeto de la clase MisDatos en el m´etodo main.1. Los nombres de variables y m´etodos empiecen con min´ uscula. armenios. cada nueva palabra empieza con may´ uscula.

2. nombre_variable1 = valor_variable1. ´estos se guardan en variables. tipo_variable2 nombre_variable2 = valor_variable2. variables y valores Un programa maneja datos o valores. La declaraci´ on de variables es igual que en C. Debe ser como se ha indicado en la secci´on 3. por eso hay que darle un valor a la vez que se declara. La declaraci´ on de constantes se realiza anteponiendo al tipo la palabra reservada final.Ejercicio 4 Dados los siguientes identificadores que se van a utilizar en un programa escrito en Java. diga adem´as si es recomendado y corr´ıjalo si no es recomendado. Un rango de valores. 3. Los tipos primitivos en Java son: 13 . Justifique sus respuestas. Una variable queda determinada por: Un nombre o identificador. Tipos. El valor de una constante no se puede modificar en el programa.2. a) mi carta b) unacarta c) mis2escritos d) 4cientos e) es_un_mensaje f) no_vale nada g) _____ejemplo_____ h) mi-programa i) ¿cuantos? j) el%Descontado k) a150PORHORA l) TengoMUCHOS$$$ m) LOS400GOLPES n) quieroUNAsoluci´ on Recuerde que puede ver la soluci´ on en 7. Un tipo de datos. La inicializaci´on de variables se puede realizar en su declaraci´ on o posteriormente: tipo_variable1 nombre_variable1. final tipo_cte NOMBRE_CTE = valor_cte. El rango de valores que la variable puede admitir viene determinado por el tipo de la variable. En el caso de que sean correctos. diga cu´ ales de ellos son correctos y cu´ ales no. Una variable guarda un u ´nico valor. El tipo de datos indica qu´e tipos de valores se pueden almacenar en esa variable. Para poder manejar los valores en un programa.1.

.40282347e + 38 a ±1. texto = "En un lugar de la Mancha de cuyo nombre . En Java.Tipo boolean char byte short int long float double Descripci´ on Verdadero o falso Car´ acter Unicode de 16 bits Entero con signo de 8 bits Entero con signo de 16 bits Entero con signo de 32 bits Entero con signo de 64 bits Coma flotante de 32 bits Coma flotante de 64 bits Rango true o false \u0000 a \uFFFF −128 a 127 −32768 a 32767 −2147483648 a 2147483647 −922117036854775808 a 922117036854775807 ±3. cabe mencionar el tipo String.94065645841246544e − 324 Cuadro 2: Tipos primitivos en Java. un cuadro resumen de los operadores en Java: 14 . 3. A continuaci´ on. String texto.".. use el operador de concatenaci´on + entre ellas. las variables de este tipo son objetos que se utilizan de forma sencilla como si de variables de un tipo sencillo se tratasen. Expresiones y operadores En Java hay un conjunto de operadores que se pueden utilizar sobre los tipos de valores para formar expresiones o c´ alculos.40239846e − 45 ±1.79169313486231570e + 308 a ±4. Tambi´en es posible concatenar con los tipos b´ asicos de Java. Aunque realmente no es un tipo primitivo. Para concatenar cadenas.3.

52 78. real Entero. real Entero Real Entero Real Entero. entero Real. real Entero.014 723 == 773 34. entero Real.82 98 .63 3 * 15 2. real Entero.1 x *= 10 y *= 2.0237 <= 32. Valor de devoluci´ on Entero Real Entero Real Entero Real Entero Real Entero Real Entero Real Entero Real Entero Real Entero Real Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Boolean Nada Nada Nada Nada Nada Nada Nada Nada Entero Real Nada Nada Boolean Boolean Boolean Boolean Boolean Boolean Cuadro 3: Tabla de los operadores en Java.Nombre del operador Suma unaria Resta unaria Producto Divisi´ on Resto Suma binaria Resta binaria Pre-incremento Post-incremento Pre-decremento Post-decremento Menor que Menor o igual que Mayor que Mayor o igual que Igual que Distinto de Asignaci´ on Suma y asignaci´ on Resta y asignaci´ on Producto y asignaci´ on Divisi´ on y asignaci´ on Resto y asignaci´ on Negaci´ on l´ ogica Y l´ ogico O l´ ogico Tipo de operador Unario Unario Multiplicativo binario Multiplicativo binario Multiplicativo binario Aditivo binario Aditivo binario Aditivo unario Aditivo unario Relaci´ on binaria Relaci´ on binaria Relaci´ on binaria Relaci´ on binaria Relaci´ on binaria Relaci´ on binaria Asignaci´ on simple Aditivo y asignaci´ on Aditivo y asignaci´ on Multiplicativo y asignaci´ on Multiplicativo y asignaci´ on Multiplicativo y asignaci´ on Booleano binario Booleano binario Booleano binario Valor que recibe Entero Real Entero Real Entero.62 < 9. entero Real.62 == 93. entero Real. real Entero.13 362 >= 472 72.7 ++65 o 987++ ++6.53 > 762. entero Real. 15 Ejemplo de operaci´ on +44 +2. entero Real. entero Real.-l´og.3 + 2 . entero Real. real Entero. Boolean Expresi´on arit. Boolean Expresi´on arit. entero Real.5 -56 -75.2 x -= 6 y -= 9. entero Real.5 x %= 2 y %= 7. entero Real.209 / 29. entero Real. entero Real.-l´og.16 + 7.71 !false !(8 . real Entero.5 x /= 2 y /= 1. entero Real. real Entero.812 502 > 809 890.25. real Entero.456 >= 69.78 5 % 2 45.32++ --61 o 83---4.13 x += 3 y += 4. real Entero.05 4 + 5 3. real Entero.34 != 62. entero Real. real Entero. real Entero.74 29 <= 56 47. real Entero.7) true && false (3+5) < (5*2) && (3 > 8) true || false 0 || (8-2) .53 o 7.34 x = 45 y = 6.178 * 5.609 12 / 3 345.26 564 != 998 62. real Entero. entero Real.8 % 2. real Boolean Expresi´on arit.75 o 8.-l´og. real Entero.51-35 < 28 45. entero Real.3 .

16 . La prioridad de los operadores de asignaci´ on es la menor de todas. de izquierda a derecha.out. Operadores unarios.) float dinero = teclado. Operadores de relaci´ on. import java.*. public class CalculoIntereses { public static void main (String[] args) { Scanner teclado = new Scanner(System. System.nextFloat(). de izquierda a derecha.println("Dinero ingresado:").in).3. //Hay que separar los decimales con coma (. Operadores aditivos. Las expresiones aritm´etico-l´ ogicas son expresiones que devuelven un valor booleano y donde se utilizan operadores artim´eticos y operadores relacionales y de igualdad. 5. a) !(a > b && 2 * a <= b) b) ++b < 3 || a + b <= 8 && !(a > b) c) ++a <= 6 && (b += 2) < a d) ++a / 2 <= b && (++a / 2 > b || (a * 2 < b * 4)) Puede comprobar sus soluciones con las que aparecen en el apartado 7. En una expresi´on aritm´etico-l´ogica se pueden combinar varias expresiones sencillas mediante operadores l´ogicos. Operadores de asignaci´ on. 4. El orden de prioridad al evaluar los operadores es: 1. Ejercicio 5 Dadas las siguientes expresiones aritm´etico-l´ogicas calcule cu´al es el resultdo de evaluarlas. El orden de prioridad entre los operadores booleanos es: la negaci´ on. 2. por lo que primero se eval´ uan las desigualdades y despu´es los operadores booleanos.util. 3. System. float interes = teclado.println("C´ alculo de intereses.Estos operadores tienen un orden de preferencia a la hora de ser evaluados.println("Interes anual (%): "). float ganancia = dinero*interes/100/2. System. Operadores multiplicativos."). La precedencia de los operadores booleanos es menor que la de los operadores relacionales.out. Suponga que las variables a y b que aparecen son del tipo int y a tiene el valor 5 y b tiene el valor 3.out. El siguiente programa ilustra el manejo de tipos reales para calcular el inter´es obtenido en seis meses. despu´es el Y l´ogico y por u ´ltimo el O l´ogico.nextFloat().

else instrucci´ on2. Las instrucciones simples terminan en un punto y coma (. Su esquema es el siguiente: if (condici´ on) instrucci´ on1.out. es momento de conocer las instrucciones selectivas y repetitivas presentes en Java para hacer programas m´as interesantes.. } } Ejercicio 6 Copie el ejemplo anterior en un archivo y comp´ılelo.4. las instrucciones complejas comprenden a varias instrucciones simples encerradas entre llaves. Observe el resultado.println("Intereses a los seis meses: " + ganancia). Instrucciones Sabiendo definir y usar variables de los tipos primitivos. Anteriormente se mencion´o que el cuerpo de un m´etodo puede contener instrucciones.. Recuerde: Una declaraci´ on siempre termina en . puede comprobar su c´odigo con el que aparece en 7. Cuando lo ejecute. 3. No hay . 3.). No hay . que pueden emplearse en cualquier lugar donde se emplee una simple. Una instrucci´ on simple siempre termina en .out. 17 . despu´es de una definici´ on de clase. Instrucci´ on if Es una instrucci´ on de bifuraci´ on condicional y por tanto permite modificar la direcci´on de la ejecuci´ on de una lista de instrucciones. despu´es de una instrucci´ on compuesta.4.System.println("Dinero disponible en total a los seis meses: " + (dinero + ganancia)). System. A las instrucciones compuestas tambi´en se les llama bloque.4.1. Estas instrucciones de Java pueden ser simples o compuestas. En cambio. Ejercicio 7 Escriba un programa que solicite el radio de la base y la altura de un tri´angulo y calcule su ´ area.

Si la condici´ on se cumple. 3. boolean primo = true. while ((divisor * divisor <= numero) && primo) { if (numero % divisor == 0) primo = false. int b) { if(a == 2 * b) return (true). else if (b == 2 * a) return (true). } return primo. Estas instrucciones pueden ser sustituidas por bloques de instrucciones entre llaves. Ejemplo: boolean doble (int a. se ejecuta la instrucci´ on2. ejecuta el cuerpo. Luego puede compararlo con el programa en 7. La variable que controla el ciclo es llamada variable de control. Ejemplo: public boolean primo (int numero) { int divisor = 2. Si no. divisor++.5. Instrucci´ on while La instrucci´ on while es controlada por una condici´on que repite el cuerpo de la misma mientras ´esta no se evalue como false. En caso contrario. Si es true. El esquema de la instrucci´on es: while (condici´ on) { bloque de sentencias } La instrucci´ on while prueba el valor de la condici´on. } 18 .2. se ejecuta la instrucci´ on1. } Ejercicio 8 Realice un programa que dados tres n´ umeros cualesquiera diga si son pares o impares. termina el ciclo y pasa el control a la siguiente instrucci´on. la instrucci´on if puede anidarse y el bloque del else puede omitirse si es necesario.4. else return (false).

6. Un ejemplo de la utilizaci´ on de esta instrucci´on es la siguiente: import java. public class PedirNumero { public static void main(String[] args) { 19 . siempre que la condici´ on de control es true. Posteriormente puede comprobarlo con la versi´ on que aparece en 7. 3.*. iter <= 10. } Ejercicio 10 Realice un programa muestre en pantalla los 10 primeros m´ ultiplos de 29. donde el cuerpo del ciclo se ejecuta un n´ umero fijo de veces. iter++) { System. Cuando lo haya ejecutado. Instrucci´ on for La instrucci´ on for es una forma especializada de while.out. pero garantiza que el cuerpo del bucle se ejecuta al menos una vez. Su forma general es: do { cuerpo del bucle } while (condici´ on)."). for (iter = 1. Instrucci´ on do while La instrucci´ on do while es similar a la instrucci´on while. el cuerpo no se ejecuta nunca. condici´ on_de_control. Si la condici´on es false al principio. } System.println(cadena).util. 3.println("Fin de la repetici´ on. incremento) { cuerpo del ciclo } Un ejemplo del uso de la instrucci´ on for es: void repetirDiez (String cadena) { int iter = 1.4.4.4. Su forma general es: for (inic.Ejercicio 9 Realice un programa que muestre en pantalla una cuenta atr´as desde 5 hasta 0.7. puede compararlo con el c´ odigo que aparece en 7.3.out.

} La instrucci´ on continue aborta la iteraci´on actual e inicia la siguiente iteraci´on. String linea. palabras++. String textoAux = texto. 20 . } } Ejercicio 11 Escriba un m´etodo que reciba dos valores enteros como par´ametros y dibuje un rect´angulo en el que la base es el mayor de los dos par´ametros recibidos y el otro es la altura. Puede comprobar su programa con la soluci´ on que aparece en 7. numero = teclado. el control se transfiere de inmediato a la primera instrucci´on a continuaci´on del bloque o de la iteraci´ on actual. Consejo: puede utilizar un s´ımbolo (como el ’*’) que represente cada celda perteneciente al rect´angulo.8.nextInt(). transfiere el control de inmediato a la prueba de la condici´on. Scanner teclado = new Scanner(System. } return palabras.length()) break.int numero. El siguiente c´ odigo muestra un ejemplo: public int cuentaPalabras (String texto) { int palabras = 0.charAt(i) == " ") i++. Al ejecutarse.length() && textoAux.continue La instrucci´ on break suele utilizarse para salir de una iteraci´on de forma incondicional.in).charAt(i) != " ") i++. Dentro de un bucle while o do while. System.println("Introduzca un n´ umero entre 0 y 100: "). while(true) { if (i == textoAux.trim().out. } while (numero < 0 || numero > 100). Instrucciones break . Cree una objeto de la clase. while (i < textoAux.length() && textoAux.5. while (i < textoAux.out. i = 0.4. 3.println("El n´ umero introducido es: " + numero). pida al usuario los valores de la base y la altura e imprima el rect´angulo. do { System.

4. Su sintaxis es la siguiente: switch (expresi´ on_de_tipo_int) { case valor_1: instrucciones case valor_2: instrucciones .println("El mes " + mes + " tiene " + dias + " d´ ıas. mes y a˜ no de una fecha y devuelva un valor booleano que indique si se trata de valores v´alidos para una fecha. Septiembre. A continuaci´on. switch (mes) { case Abril: case Junio: case Septiembre: case Noviembre: dias = 30. un ejemplo: public class DiasDelMes { enum Mes {Enero. case Febrero: //No se conoce el a~ no dias = 28. 21 . Julio."). default: dias = 31. } System. Mes mes = Mes. Todas las etiquetas case deben ser distintas.. Mayo. case valor_n: instrucciones default: instrucciones } La instrucci´ on switch eval´ ua la expresi´ on de cambio y compara su valor con todas las etiquetas case. Octubre.Noviembre. Instrucci´ on switch La instrucci´ on switch proporciona una manera de elegir una entre un conjunto de opciones predefinidas. Junio. break. break. Febrero.9. } } Ejercicio 12 Escriba un m´etodo que reciba como par´ametros tres valores enteros con el d´ıa.6. break. Abril. Diciembre} public static void main(String[] args) { int dias.3. Marzo. Noviembre.. Agosto. El control se transfiere a aquella etiqueta cuyo valor coincida con el de la expresi´on o a default si no coincide ninguna. Puede comparar su c´ odigo con la soluci´ on indicada en 7.out.

teclado. System. Salida est´ andar La salida est´ andar se representa con el objeto System.5. teclado. Otro modo de obtener datos desde la entrada est´andar es utilizar la clase Scanner que se construye pas´ andole un objeto de la clase System.nextDouble().io.write(int c) Otro m´etodo que se puede llamar con el objeto System.nextLong().nextByte().nextBoolean(). Entrada y salida de consola Todo programa en Java tiene asociados tres flujos est´andar de E/S: flujo de entrada.in llame a la funci´ on read(). Entrada est´ andar La entrada est´ andar se representa con el objeto System. Una forma de obtener los datos desde la entrada est´andar. Ver´a qu´e son los paquetes en el apartado 4. Ejemplo: System.println(String str) 22 .nextFloat(). Ejemplo: Scanner teclado = new Scanner(System.in.read() La funci´ on read() devuelve un byte (entre 0 y 255) como tipo de dato int o -1. teclado. Una forma para escribir en pantalla es con el m´etodo write().out. hay que importar el paquete java. Cuadro 4: M´etodos de la clase Scanner para la lectura de distintos tipos de datos. teclado.in y lee el teclado.nextInt(). Este m´etodo recibe un entero y env´ıa al flujo de salida el byte menos significativo de dicho entero.out y escribe en la pantalla. es haciendo que el objeto System.out es el m´etodo println(). Para poder utilizar estos flujos.in).in. La clase Scanner proporciona los siguientes m´etodos de lectura para los tipos b´asicos del lenguaje: Tipo byte short int long float double boolean M´ etodo a invocar teclado. teclado.3.nextShort(). flujo de salida y flujo de error. teclado. que recibe una cadena y envia al flujo de salida dicha cadena y una terminaci´on de l´ınea dependiente de la plataforma.out. De momento solo necesita saber que para importar un paquete debe poner la palabra reservada import seguida de un espacio y el nombre del paquete antes de comenzar a declarar la clase. System.

Scanner. public class EjemploScanner { public static void main (String[] args) { byte by.write(dato) } while (true).gc(). int dato..io..*.currentTimeMills()). System. double d.out.in: import java.toLowerCase((char) i). short s.out y System.out. System. El ejemplo a continuaci´ on ilustra el uso de los m´etodos println().out.util.Existe un m´etodo equivalente al anterior pero que no a˜ nade la terminaci´on de l´ınea: System.println(System. class Minuscula { public static void main (String[] args) throws IOException { int i.in. //muestra el tiempo actual en milisegundos System."). long l.err y proporciona un flujo de salida donde almacenar los errores o excepciones que se dan durante la ejecuci´on del programa. en JCreator o CTRL-C desde un shell } } El siguiente ejemplo muestra el uso de la clase Scanner: import java. dato = Character. //muestra propiedades del sistema System.println(System.println("Introduzca un car´ acter. do { i = System. 23 . //esto fuerza la recolecci´ on de basura System.getProperties()). //salir con CTRL-B. float f.out. Los m´etodos que se pueden utilizar para a˜ nadir informaci´on al flujo de error est´andar son los mismos que se utilizan en el flujo de salida est´ andar.out. int i.read(). boolean b.print(String str) Error est´ andar El error est´ andar se representa con el objeto System. read() y write() y de los objetos System.

by = Tec.nextLong().println("Short: " + s).println("Float: " + f). d = Tec. i = Tec.out.print ("Un double ").out. System. ejec´ utelos y obs´ervelos. Haga algunas modificaciones para pedir o mostrar m´ as datos.println("Byte: " + by).out. comp´ılelos.nextShort().out. System. 24 . l = Tec.print ("Un long ").println("Long: " + l). System.print ("Un short "). puede comparar su soluci´on con la ofrecida en 7.nextFloat(). Todas las clases de un fichero son amigas. Esto se hace anteponiendo a la definici´ on de la clase la palabra reservada package seguida del nombre del paquete: package nombre_paquete.print ("Un float ").println("Int: " + i).out.out.print ("Un int "). System. System.in en un objeto de clase Scanner Scanner Tec = new Scanner(System.out. Cuando lo termine. System.out. } } Ejercicio 13 Copie estos ejemplos. f = Tec. Las clases de un mismo paquete son clases amigas entre s´ı.nextByte(). 4.out. System.nextDouble(). es que puede ser llamada desde el cuerpo de la otra funci´ on. s = Tec. El programa deber´a mostrar los n´ umeros de los que debe realizar la media y el resultado. System. realice un programa que pida al usuario dos n´ umeros y calcule su media.println ("Introduzca: "). Si una funci´ on es amiga de otra. ya que en Java un fichero fuente es un paquete por s´ı mismo. Paquetes de biblioteca Los paquetes son agrupaciones de clases que est´an relacionadas entre s´ı. System.in).out.10. System. System.out.println("Double: " + d).out.out. Si las clases est´ an definidas en varios ficheros se pueden agrupar en un u ´nico paquete tambi´en. System. System.print ("Un byte ").nextInt().//Se envuelve System. Ejercicio 14 Ahora que ya sabe c´ omo se utiliza la entrada y la salida est´andar.

. public Monomio() {} public Monomio(int gr. public class Polinomio2grado { public static void main(String[] args) { //Para usar las clases de mi paquete podemos importarlas y usarlas..} } package Polinomios. double coef) { grado = gr. coeficiente = coef. puede importarse al c´ odigo en el que quiere usarse import paquete1. o pueden importarse todas las clases del paquete.Coeficiente()). public class Polinomio { //Uso de clase amiga public Polinomio() {new Monomio(). utilizar su nombre completo incluyendo el prefijo mipaquete. El espacio de nombres de un paquete es propio a sus clases.clase1. private double coeficiente.. paquete1. System. public class Monomio { private int grado. hay que importarlas como a continuaci´on: import Polinomios.clase1.Grado() + " tiene coeficiente " + m. Monomio m1 = new Monomio(). Polinomio p = new Polinomio().75). 25 . } } En el caso de clases que no son amigas.Monomio. //o bien. 3.*. para utilizar una clase clase1 del paquete paquete1: puede usarse el nombre completo. } public int Grado() {return grado.} public double Coeficiente() {return coeficiente. El nombre de las clases pasa a incluir el nombre del paquete.print("El monomio de grado " + m.. As´ı se definen clases en un paquete y se usan: package Polinomios. Monomio m = new Monomio(2.. public class Prueba { public static void main(String[] args) { //Uso de clases amigas.Las clases que no se declaren dentro de ning´ un paquete forman un paquete ”por defecto” y son amigas entre s´ı. Por tanto..out.} } package Polinomios. import paquete1.

en ingl´es). Use en ´el la clase Scanner para leer n´ umeros por la entrada y que use dos funciones del paquete java.5). intValue().Polinomios. us´ andose la clase Integer. M´etodo toString() que transforma el valor en una cadena.Grado() + " y de coeficiente " + m2.util. 5. etc.out. Para conseguir este efecto. Las clases de envoltura disponen de: Constructores a partir de un tipo simple.Coeficiente()). M´etodo equals() para comparar el valor entre envoltorios.. Son funciones especiales que sirven para definir e inicializar los objetos. Los tipos b´ asicos byte y short se incluyen en Java por razones de eficiencia. existen las clases de envoltura ( o wrappers. .11.Scanner.Math y el paquete java. Los constructores son m´etodos propios de la orientaci´on a objetos. Clases de envoltura A veces puede ser necesario que las variables de los tipos b´asicos en Java funcionen como si fueran objetos. Puede ver un ejemplo en 7.println("El monomio m2 es de grado " + m2. Constructores a partir de una cadena.math. M´etodo que devuelve el tipo b´ asico. 5. por lo que no tienen envoltorios predefinidos. Integer d = new Integer(dato).Monomio m2 = new Polinomios.. Un ejemplo de c´ omo se usan es el siguiente: int dato = 3. } } Ejercicio 15 Realice un programa en el que importe el paquete java. Para los dem´as tipos simples. las clases de envoltura son: 26 . El nombre se forma concatenando el tipo b´asico y Value: charValue(). System.Monomio(2.

out. Float noNumero = new Float(Math. Float infinito = new Float(s). } } Ejercicio 16 Revise el paquete java. 27 .Clase envoltorio Boolean Character Integer Long Float Double Tipo b´ asico boolean char int long float double Cuadro 5: Clases de envoltura definidas en Java Un ejemplo algo m´ as complejo donde se usan las clases de envoltura es el siguiente: public class Envoltura { public static void main (String[] args) { float s = 0. //Imprimir´ a "infinito es Infinity" System. el m´ınimo entre dos valores y el logaritmo. y mu´estrelos por pantalla.out. la tangente. //Imprimir´ a "noNumero es NaN" System.Math y realice un programa que pida al usuario varios n´ umeros y calcule el seno.println("noNumero es " + noNumero). el m´aximo entre dos valores. el coseno.sqrt(-1)).12. s = 10 / s. Puede ver un ejemplo en 7.println("infinito es " + infinito). Encapsule los datos que reciba en clases de envoltura para asegurarse del correcto funcionamiento de los c´ alculos.

Puede compararlo con el c´odigo ofrecido en 7.17. Ejercicio 17 Escriba un programa para calcular el consumo medio de un autom´ovil. lo escriba en pantalla en grados. Ejercicio 21 Tras haber hecho los ejercicios anteriores.13. Puede comprobar su programa con el que aparece en 7. Despu´es. Ejercicio 22 Investigue sobre la clase Math. Haga un programa que imprima los valores de esas tres funciones para los valores 0. el coseno y la tangente.14. Puede comparar su programa. primerApellido. puede comparar su c´ odigo con el programa propuesto en 7.erez segundoApellido con valor ”L´ opez”. De la segunda vez s´olo solicitar´a el precio del litro del combustible y el total pagado en llenar el dep´ osito. cuando termine. π/2. escriba un programa que declare una cadena de caracteres denominada nombre. con valor . y de la tercera vez solicitar´a el valor que indicaba el cuentakil´ometros. Puede comprobar su soluci´on con la que aparece en 7. Cree un programa para ejecutarlo y comprobar su m´etodo. el programa imprime el nombre completo y su longitud. y π en radianes. el total pagado en llenar el dep´osito y el n´ umero de kil´ometros que marcaba el cuentakil´ ometros. Con estos datos debe calcular el consumo por cada 100 km y el coste por kil´ometro. π/4. Ejercicios para profundizar En esta secci´ on se encuentran propuestos algunos ejercicios adicionales que utilizan elementos explicados a lo largo del presente gui´ on. 28 .15. Cuando lo termine. as´ı como los valores del seno. el programa concatena a nombre el primer apellido y luego el segundo. Para ello el programa debe solicitar informaci´ on sobre ls tres u ´ltimas veces que se repost´o combustible. Cuando termine. puede comprobar su soluci´ on con el c´ odigo en el apartado 7. con el que aparece en 7. Es aconsejable que los realice para mejorar su dominio de los contenidos del tema. Ejercicio 18 Escriba un programa que escriba en la pantalla el valor de la suma de los n primeros n´ umeros pares. Luego. Ejercicio 19 Investigue la clase String. 2 Ejercicio 20 Cuando haya realizado el ejercicio anterior.18. De la primera solicitar´ a el precio del litro del combustible. escriba un m´etodo llamado escribeAlReves que reciba un String y escriba dicho texto en la pantalla al rev´es. Por u ´ltimo. escriba un programa que cuente el n´ umero de vocales que aparecen en un texto que se le solicita al usuario. con valor inicial ”Juan”.16.6. Despu´es escriba un m´etodo que dado un ´angulo en radianes.

0 */ public class MisDatos { String nombre = "Sara". String apellidos = "S´ anchez S´ anchez". int asignaturasAprobadas = 12.asignaturasAprobadas + ". String ocupacion = "estudiante".asignaturasAprobadas) + ". System. a) mi carta: este no es un identificador porque el espacio no est´a permitido. int asigAprobadas) { return (asigCursadas .apellidos + ". System.println("Vivo en " + yo.1. /** * Programa en Java que muestra mis datos.ocupacion + ". int edad = 22. s´olo se incluye el caso al que se refiere. } } 7. public int asigSuspensas (int asigCursadas. He cursado " + yo. Este identificador ser´ıa adecuado para un objeto si fuera miCarta.7. Soluciones de los ejercicios 7.").edad + " a~ nos.out."). * * @author Natalia Partera * @version 1.asigSuspensas(yo. Ejercicio 4 A continuaci´ on la soluci´ on del ejercicio 4.out.nombre + " " + yo. En los casos en los que el identificador parece que se refiere claramente a un objeto.println("Me llamo " + yo.asignaturasCursadas. String ciudad = "C´ adiz". System. Puede practicar m´ as a˜ nadiendo soluciones para identificar objetos. int asignaturasCursadas = 15. yo.println("Soy " + yo. 29 .asigAprobadas). Ejercicio 3 Esta es una posible soluci´ on para el ejercicio 3.asignaturasCursadas + " asignaturas: he aprobado " + yo."). y he suspendido " + yo. clases y constantes para cada identificador. } public static void main (String[] args) { MisDatos yo = new MisDatos().ciudad + " y tengo " + yo. una clase o una constante y puede mejorarse.out.2.

para describir una clase es NoValeNada y para describir una constante es NO_VALE_NADA. si est´as cambian el valor inicial de las variables. para una clase QuieroUnaSoluci´ on y para una constante QUIERO_UNA_SOLUCI´ ON. Un posible identificador para un objeto ser´ıa cuatrocientos. l) TengoMUCHOS$$$: este identificador es correcto. 30 . i) ¿cuantos?: este identificador no es v´alido ya que no empieza por una letra y no puede contener ? por considerarse un operador. e) es_un_mensaje: este identificador es correcto. para una clase es MiPrograma y para una constante es MI_PROGRAMA. la mejor forma seria A_150_POR_HORA. la variable por su valor cuando se va a utilizar. pero no recomendado. Para un objeto el identificador adecuado es elPorcentajeDescontado. Para una constante se puede usar LOS_400_GOLPES para mejorar la claridad. aunque debe evitarse el uso del car´acter $ siempre que sea posible. para describir una clase ser´ıa mejor EsUnMensaje y para describir una constante ser´ıa mejor ES_UN_MENSAJE. Para describir un objeto el identificador adecuado es miPrograma. para una constante es mejor EL_PORCENTAJE_DESCONTADO. d) 4cientos: este no es un identificador porque un identificador no puede empezar por d´ıgito. Tenga en cuenta al realizar operaciones. Otra forma para que este identificador resultara m´ as claro y se refiriera a un objeto es misDosEscritos. h) mi-programa: este identificador no es v´alido. En cambio. Una versi´ on para identificar objetos es tengoMuchos$.3. j) el%Descontado: este identificador no es v´alido ya que contiene el s´ımbolo % que es un operador. Para una constante podr´ıa ser TENGO_MUCHOS_$. Ejercicio 5 En este ejercicio hay que sustituir. Para un objeto el identificador v´alido es cuantos. el mejor ser´ıa ElPorcentajeDescontado.b) unacarta: este identificador es correcto pero no es recomendado. 7. Podr´ıa mejorarse para que se refiriera a un objeto siendo unaCarta. Si se tratara de una clase. Para un objeto se podr´ıa utilizar quieroUnaSoluci´ on. m) LOS400GOLPES: este identificador es correcto. Para describir un objeto ser´ıa mejor esUnMensaje. ya que el s´ımbolo . pero puede hacerse m´as claro. Para describir un objeto el identificador m´ as adecuado es ejemplo. Para una constante. g) _____ejemplo_____: este identificador es correcto pero no es recomendado. en cada una de las expresiones. Para una constante ser´ıa mejor CUATROCIENTOS. f) no_vale nada: este identificador no es correcto porque el espacio no est´a permitido. Para describir un objeto el adecuado es noValeNada. aunque podr´ıa escribirse de una manera m´as clara. En el c´ alculo hay que tener en cuenta la precedencia de los operadores y que los resultados de las operaciones ser´ an n´ umeros enteros. k) a150PORHORA: este identificador es v´ alido. c) mis2escritos: este identificador es correcto.lo puede tomar por un operador. n) quieroUNAsoluci´ on: este identificador es correcto.

Para ello se eval´ ua primero la parte izquierda del operador &&: !(a > b&&2 ∗ a <= b) ≡!(5 > 3&&2 ∗ a <= b) ≡!(true&&2 ∗ a <= b) Como la parte izquierda del operador && vale true. b se incrementa en 1 pasando a valer 4. hay que evaluar su parte derecha: !(true&&2 ∗ a <= b) ≡!(true&&2 ∗ 5 <= 3) ≡!(true&&10 <= 3) ≡!(true&&f alse) De donde evaluando los operadores booleanos: !(true&&f alse) ≡!(f alse) ≡ true b) ++b < 3 || a + b <= 8 && !(a > b) Esta expresi´ on se eval´ ua de izquierda a derecha.a) !(a > b && 2 * a <= b) En primer lugar se eval´ ua la parte del par´entesis. La expresi´ on (b += 2) a˜ nade a b el valor 2 y devuelve el valor resultado de la asignaci´ on: true&&(b+ = 2) < a ≡ true&&(5) < a ≡ true&&5 < 6 ≡ true&&true ≡ true El resultado final es true y las variables a y b han quedado con los valores a = 6 y b = 5. por lo que en primer lugar se eval´ ua su parte izquierda: + + a/2 <= b&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) ≡ + + 5/2 <= b&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) ≡ 6/2 <= b&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) ≡ 3 <= 3&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) ≡ true&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) Al evaluarse la expresi´ on ++a. Como la parte izquierda del operador || vale false hay que evaluar su parte derecha: true&&(f alse||(a ∗ 2 < b ∗ 4)) ≡ true&&(f alse||(7 ∗ 2 < 3 ∗ 4)) ≡ true&&(f alse||(14 < 12)) ≡ true&&(f alse||(f alse)) ≡ true&&(f alse) ≡ f alse Evalu´ andose. 31 . finalmente. la variable a = 6 se incrementa en 1 pasando a valer 7. d) ++a / 2 <= b && (++a / 2 > b || (a * 2 < b * 4)) Esta expresi´ on consta de un operador booleano (&&) entre dos expresiones. Como tiene mayor prioridad el operador && que el operador || se eval´ ua como si estviese escrito (e1||(e2&&e3)). Como la parte izquierda de la expresi´ on vale false hay que evaluar la parte derecha. Como la parte izquierda del operador && vale true hay que evaluar su parte derecha. Por tanto. el valor de la variable a se incrementa en 1 a 6. se eval´ ua en primer lugar su parte izquierda: + + a <= 6&&(b+ = 2) < a ≡ + + 5 <= 6&&(b+ = 2) < a ≡ 6 <= 6&&(b+ = 2) < a ≡ true&&(b+ = 2) < a Como puede ver. la expresi´ on a false. A continuaci´on se eval´ ua la parte derecha del operador&&. por tanto se eval´ ua e1 y si su valor es false se eval´ ua la parte derecha del operador ||: + + b < 3||a + b <= 8&&!(a > b) ≡ + + 3 < 3||a + b <= 8&&!(a > b) ≡ 4 < 3||a + b <= 8&&!(a > b) ≡ f alse||a + b <= 8&&!(a > b) Al evaluar antes ++b. Para ello se comienza evaluando la parte izquierda del operador ||: true&&(+ + a/2 > b||(a ∗ 2 < b ∗ 4)) ≡ true&&(+ + 6/2 > b||(a ∗ 2 < b ∗ 4)) ≡ true&&(7/2 > b||(a ∗ 2 < b ∗ 4)) ≡ true&&(3 > 3||(a ∗ 2 < b ∗ 4)) ≡ true&&(f alse||(a ∗ 2 < b ∗ 4)) Al evaluar la ++a. la variable a se ha incrementado en 1. Se comienza entonces por la parte izquierda del operador &&: f alse||a + b <= 8&&!(a > b) ≡ f alse||5 + 4 <= 8&&!(a > b) ≡ f alse||9 <= 8&&!(a > b) ≡ f alse||f alse&&!(a > b) Como la parte izquierda del operador && vale false ya no es necesario evaluar la parte derecha: f alse||f alse&&!(a > b) ≡ f alse||f alse ≡ f alse c) ++a <= 6 && (b += 2) < a Esta expresi´ on s´ olo tiene un operador booleano &&. valiendo en este momento 6.

util.5.Scanner.println((base * altura) / 2). System.0 */ import java. Ejercicio 7 Esta es una posible soluci´ on para el ejercicio 7. System.7. * * @author Natalia Partera * @version 1. altura = teclado.out. base = teclado. System.in).util.Scanner.println("Introduzca los datos del tri´ angulo: "). public class AreaTrian { public static void main (String[] args) { double base.out.0 */ import java. Ejercicio 8 Esta es una posible soluci´ on para el ejercicio 8. } } 7.nextDouble().4.out.print("El ´ area del tri´ angulo es: ").out. double altura. System. * * @author Natalia Partera * @version 1.out. public class ParImpar { void calculaPar (int a) { if (a % 2 == 0) 32 .print("Base: ").nextDouble(). System. Scanner teclado = new Scanner(System. /** * Programa en Java que pide al usuario la base y la altura * de un tri´ angulo y calcula su a ´rea.print("Altura: "). /** * Programa en Java que pide al usuario tres n´ umeros enteros * e imprime si son pares o impares.

System.print("Introduzca otro n´ umero entero: "). * * @author Natalia Partera * @version 1. else System.calculaPar(num2).out.println("El n´ umero " + a + " es impar.6. } public static void main (String[] args) { int num1. num1 = teclado."). --n. obj.out. obj.println(n).").calculaPar(num3).print("Introduzca un u ´ltimo n´ umero entero: "). num2.out.out. /** * Programa en Java que muestra una cuenta atr´ as * desde 5 hasta 0.nextInt().System.out. Ejercicio 9 Esta es una posible soluci´ on para el ejercicio 9. } } 33 . while (n >= 0) { System. obj.out. Scanner teclado = new Scanner(System. num3."). System.out. num3 = teclado.in). System.calculaPar(num1).print("Introduzca un n´ umero entero: ").0 */ public class CuentaAtras { public static void main (String[] args) { int n = 5.out. num2 = teclado. } System.println("Empieza la cuenta atr´ as: ").println("Fin de la cuenta atr´ as.println("El n´ umero " + a + " es par. } } 7.nextInt().nextInt(). System. ParImpar obj = new ParImpar().

print("* ").7. /** * Programa en Java que pide al usuario las dimensiones de * un rect´ angulo y lo imprime por pantalla.out. ++n) { System. } System. System. b = 1. * * @author Natalia Partera * @version 1.Scanner. } } 7.out.print("Los 10 primeros m´ ultiplos de 29 son: "). x = 29.out. * * @author Natalia Partera * @version 1. public class Rectangulo { void imprimeRectangulo (int base. int alt) { int a = 1. for(.print(x * n + " "). n <= 10. /** * Programa en Java que muestra los 10 primeros m´ ultiplos de 29. Ejercicio 10 Esta es una posible soluci´ on para el ejercicio 10. do { b = 1.7.0 */ import java. do { System.util.out.println().0 */ public class Multiplos { public static void main (String[] args) { int n = 1. 34 . Ejercicio 11 Esta es una posible soluci´ on para el ejercicio 11.8.

System. Scanner teclado = new Scanner(System. ++a. mes y a~ no * de una fecha e indica si es una fecha v´ alida. System.println().out. if (a~ no < 1600 || a~ no > 3000) return false. //Se comprueba que el mes es correcto. System. Ejercicio 12 Esta es una posible soluci´ on para el ejercicio 12.print("Introduzca el valor de la base: "). } } 7. if (mes < 1 || mes > 12) return false.nextInt().Scanner. //Es un mes correcto. altura. se calcula los d´ ıas que tiene. int mes.println(). altura).out. Rectangulo rect = new Rectangulo(). base = teclado. } public static void main (String[] args) { int base.0 */ import java.9. public class FechaOK { public boolean esFechaOK (int dia. System.util.print("Introduzca el valor de la altura: "). } while(b <= base).++b.imprimeRectangulo(base. altura = teclado.in). int a~ no) { int diasMes.nextInt(). rect.out. } while(a <= alt). switch (mes) { 35 . /** * Programa en Java que pide al usuario el d´ ıa.out. * * @author Natalia Partera * @version 1.

if (f.out. return dia >= 1 && dia <= diasMes. case 2: if ((a~ no % 4 == 0) && (a~ no % 100 != 0) || (a~ no % 400 == 0)) { diasMes = 29.out.out. a~ no)) System. FechaOK f = new FechaOK().10.out. break. default: diasMes = 31. } } 7.out.esFechaOK(dia. mes. } break.print("Introduzca el mes: "). } else { diasMes = 28.case 4: case 6: case 9: case 11: diasMes = 30.").println("La fecha es incorrecta. Scanner teclado = new Scanner(System.nextInt(). a~ no = teclado. 36 ."). break. mes = teclado. System.println("La fecha es correcta.in).nextInt(). dia = teclado. } //Se comprueba que el d´ ıa es correcto.print("Introduzca el a~ no: "). System.nextInt(). System. /** * Programa en Java que pide al usuario dos n´ umeros * y calcula su media. mes.print("Introduzca el d´ ıa: "). else System. Ejercicio 14 Esta es una posible soluci´ on para el ejercicio 14. } public static void main (String[] args) { int dia. a~ no.

Scanner teclado = new Scanner(System. raiz.util.in).out.0 */ import java. Ejercicio 15 Esta es una posible soluci´ on para el ejercicio 15.println("Introduzca los siguientes datos: ").0 */ import java.util. System. x. System. med = (x + y) / 2.print("Introduzca el otro n´ umero: ").in).* * @author Natalia Partera * @version 1. y. y = teclado.print("Introduzca un n´ umero: "). potencia.out. public class Paquetes { public static void main (String[] args) { double base. /** * Programa en Java que pide al usuario n´ umeros * y realiza c´ alculos con ellos. * * @author Natalia Partera * @version 1.print("Base: ").out.out.11.nextDouble().Scanner. med = 0. Scanner teclado = new Scanner(System. x = teclado.nextDouble().Scanner.out.println("La media de " + x + " y " + y + " es " + med). 37 . public class Media { public static void main (String[] args) { double med. System. System. int exponente. System. double radicando. } } 7.

println("El seno de " + xf + " es " + seno).in).lang.nextDouble(). System.println(base + " elevado a " + exponente + " = " + potencia).pow(base. System. z = teclado. radicando = teclado. System. raiz = Math. Float xf = new Float(x).Scanner. Float coseno = new Float(cos(yf)). System. } } 7.util. exponente).print("Introduzca el tercer n´ umero: ").nextInt().out. System. Ejercicio 16 Esta es una posible soluci´ on para el ejercicio 16.base = teclado.nextDouble().println("El coseno de " + yf + " es " + coseno).nextDouble().out.out. Float zf = new Float(z).0 */ import java.out. Scanner teclado = new Scanner(System.nextDouble().print("Introduzca el primer n´ umero: "). x = teclado. z.*. y.12.println("La ra´ ız cuadrada de " + radicando + " es " + raiz). 38 . public class MathEnvoltura { public static void main (String[] args) { double x.out. import static java. Float seno = new Float(sin(xf)).print("Radicando: ").sqrt(radicando). System.out. System. Float tangente = new Float(tan(zf)). y = teclado.print("Exponente: ").Math.nextDouble().out.print("Introduzca el segundo n´ umero: "). Float yf = new Float(y). /** * Programa en Java que pide al usuario n´ umeros * y realiza c´ alculos con ellos. System.out. exponente = teclado. * * @author Natalia Partera * @version 1.out. System. potencia = Math.

System.nextDouble().out. int kmInicial.in).System. precioLitro = teclado.out.nextDouble(). } } 7. litros = pagado / precioLitro. km. coste += pagado. litros = 0. public class ConsumoAuto { public static void main(String[] args) { double precioLitro.out. System. coste = 0. litros += pagado / precioLitro. precioLitro = teclado. kmInicial = teclado.out.println("El m´ aximo entre " + xf + " y " + yf + " es " + max(xf. System. System.print("Introduzca el precio por litro del primer repostaje: ").out. zf)).print("Introduzca el coste total del segundo repostaje: ").print("Introduzca el coste total del primer repostaje: ").nextInt(). * * @author Natalia Partera * @version 1.0 */ import java. Float logaritmo = new Float(log(xf)).Scanner. kmFinal.out. coste = pagado.13.print("Introduzca el precio por litro del segundo repostaje: ").out. double pagado. System.println("El logaritmo neperiano de " + xf + " es " + logaritmo).out.out.out.nextDouble(). System. System. yf)). System. /** * Programa en Java que calcula el consumo medio de * un autom´ ovil seg´ un 3 repostajes consecutivos. System.print("Introduzca el valor del cuentakil´ ometros en el primer repostaje: "). Scanner teclado = new Scanner(System. Ejercicio 17 Esta es una posible soluci´ on para el ejercicio 17.nextDouble(). 39 .println().println("La tangente de " + zf + " es " + tangente).util. pagado = teclado.println("El m´ ınimo entre " + yf + " y " + zf + " es " + min(yf. pagado = teclado.

print("Introduzca el valor del cuentakil´ ometros en el tercer repostaje: "). } } 7. public class SumaPares { public static void main(String[] args) { Scanner teclado = new Scanner(System.out. * * @author Natalia Partera * @version 1. } System.out. Ejercicio 18 Esta es una posible soluci´ on para el ejercicio 18.").nextInt().println().Scanner. } } 40 .0 */ import java.in). System.14. for(int i = 0.out.out.println("El gasto medio es de " + coste / km + " por kil´ ometro. numero = teclado.out. suma = 0.println("El consumo medio del autom´ ovil es de " + (litros / km * 100) + " litros por cada 100 Km.util. km = kmFinal . i = i + 2) { suma = suma + i. /** * Programa en Java que calcula la suma de los n * primeros n´ umeros pares. i < 2 * numero . System.nextInt().print("Introduzca el n´ umero n: "). kmFinal = teclado.System. System.println("La suma de los primeros " + numero + " numeros pares es: " + suma)."). System.kmInicial.out. int numero.

0 */ public class Cadenas { public static void main(String[] args) { String nombre = "Juan". * * @author Natalia Partera * @version 1. /** * Programa en Java que trabaja con cadenas * de la clase String.println("Sin invertir:"). String primerApellido = "P´ erez".charAt(i)). } } 7.". System.out. String segundoApellido = "L´ opez".out. String quijote = "En un lugar de la Mancha . Ejercicio 20 Esta es una posible soluci´ on para el ejercicio 20. * * @author Natalia Partera * @version 1.16.7. i >= 0.0 */ public class InvertirCadena { public void escribeAlReves(String texto) { for(int i = texto.15. } } public static void main(String[] args) { String palindromo = "Dabale arroz a la zorra el abad".out.length()-1. InvertirCadena ic = new InvertirCadena(). nombre += primerApellido. nombre += segundoApellido.length() + " letras").println(nombre + " tiene " + nombre. 41 . /** * Programa en Java que trabaja con cadenas * de la clase String y las invierte. i--) { System. System...print(texto. Ejercicio 19 Esta es una posible soluci´ on para el ejercicio 19.

i < texto. String texto = teclado. ic. System.Scanner.out.out. case ’I’: vocalI++. System.out.out. System. break.print("Introduzca un texto: "). case ’U’: vocalU++. break. } } 7. break.escribeAlReves(quijote). /** * Programa en Java que cuenta el n´ umero de * vocales de un texto dado. System. vocalE. vocalI.println(quijote).println("Al rev´ es:").length(). break. System. vocalO. for(int i = 0.nextLine().util.println().escribeAlReves(palindromo). vocalU.out. vocalA = vocalE = vocalI = vocalO = vocalU = 0.charAt(i))) { case ’A’: vocalA++.println(palindromo). ic.out. Scanner teclado = new Scanner(System.in).0 */ import java. public class CuentaVocales { public static void main(String[] args) { int vocalA. Ejercicio 21 Esta es una posible soluci´ on para el ejercicio 21.17.println(). ++i) { switch(Character.toUpperCase(texto. case ’E’: vocalE++.System. case ’O’: vocalO++. * * @author Natalia Partera * @version 1. 42 .

*.out.out.println(toDegrees(alfa) + " " + sin(alfa) + " " + cos(alfa) + " " + tan(alfa)).println("La System.").funciones(PI / 4). trig. trig.0 */ import static java.funciones(0). trig.").lang. Ejercicio 22 Esta es una posible soluci´ on para el ejercicio 22.Math. default: break.break. } } 43 . trig. /** * Programa en Java que realiza c´ alculos trigonom´ etricos. veces.println("La System. public class Trigonometria { void funciones(double alfa) { System. } } System.out. veces.out."). } } 7.").out.println("La vocal vocal vocal vocal vocal A E I O U aparece aparece aparece aparece aparece " " " " " + + + + + vocalA vocalE vocalI vocalO vocalU + + + + + " " " " " veces."). veces. veces.funciones(PI / 2).println("La System.out.println("La System. * * @author Natalia Partera * @version 1. } public static void main (String[] args) { Trigonometria trig = new Trigonometria().funciones(PI).18.