Electricidad 2eso
Electricidad 2eso
Electricidad 2eso
programación en Java
ISBN 978-84-96285-36-2
Contenido
1. Introducción a Java .................................... 1
Los lenguajes de programación ..........................1
Historia de Java ..................................................2
La plataforma de Java ........................................3
Entornos de desarrollo para Java .......................4
El proceso de edición y compilación....................5
La codificación de programas Java .....................6
El proceso de desarrollo de software ..................6
2. Estructura de un programa Java................. 9
La estructura de un programa Java ....................9
Los elementos de un programa Java.................13
Comentarios......................................................................... 14
Identificadores...................................................................... 14
Variables y valores ................................................................ 15
Tipos primitivos .................................................................... 17
Literales .............................................................................. 18
Operadores .......................................................................... 19
Expresiones.......................................................................... 21
Expresiones aritmético-lógicas ................................................ 22
Conversión de tipos ............................................................... 22
Las palabras reservadas de Java ............................................. 23
3. Clases y objetos........................................ 25
Clases ...............................................................26
Los elementos de una clase ..............................27
Atributos.............................................................................. 27
Métodos y constructores ........................................................ 28
Representación de clases y objetos .......................................... 32
Objetos .............................................................33
La referencia null .................................................................. 35
Referencias compartidas por varios objetos............................... 36
El ciclo de vida de un objeto ................................................... 39
Atributos ..........................................................40
Métodos............................................................41
Declaración de métodos ......................................................... 44
Invocación de métodos .......................................................... 45
El método main() .................................................................. 47
Parámetros y argumentos ...................................................... 48
Paso de parámetros............................................................... 50
El valor de retorno ................................................................ 52
Las variables locales de un método .......................................... 52
Sobrecarga de métodos ......................................................... 53
Constructores ...................................................54
4. Extensión de clases .................................. 59
Composición .....................................................59
Herencia ...........................................................64
Extensión de clases ............................................................... 64
Polimorfismo ........................................................................ 70
Clases predefinidas...........................................85
Las clases asociadas a los tipos primitivos ................................ 85
La clase Math ....................................................................... 86
La clase String ...................................................................... 87
Estructuras de repetición................................102
Estructura while .................................................................. 103
Estructura do-while ............................................................. 107
Estructura for ..................................................................... 109
Uso de las estructuras de repetición....................................... 111
Estructuras de salto........................................115
Sentencia break .................................................................. 115
Sentencia continue .............................................................. 115
Uso de break y continue....................................................... 115
Historia de Java
Java es un lenguaje de programación desarrollado por Sun Microsystems.
Java fue presentado en la segunda mitad del año 1995 y desde entonces se
ha convertido en un lenguaje de programación muy popular. Java es un
lenguaje muy valorado porque los programas Java se pueden ejecutar en
diversas plataformas con sistemas operativos como Windows, Mac OS,
Linux o Solaris. James Gosling, el director del equipo de trabajo encargado
de desarrollar Java, hizo realidad la promesa de un lenguaje independiente
de la plataforma. Se buscaba diseñar un lenguaje que permitiera programar
una aplicación una sola vez que luego pudiera ejecutarse en distintas
máquinas y sistemas operativos. Para conseguir la portabilidad de los
programas Java se utiliza un entorno de ejecución para los programas
compilados. Este entorno se denomina Java Runtime Environment (JRE). Es
gratuito y está disponible para los principales sistemas operativos. Esto
asegura que el mismo programa Java pueda ejecutarse en Windows, Mac
OS, Linux o Solaris.
“Write Once, Run Anyware”, que podría traducirse como “programar una
sola vez y después ejecutar los programas en cualquier sistema operativo”,
era el objetivo del equipo de desarrollo de Java. Esta idea resume el
concepto de portabilidad. Los programas Java son portables, es decir,
independientes de la plataforma, porque pueden ejecutarse en cualquier
ordenador o dispositivo móvil, independientemente del sistema operativo
que tengan instalado: Un programa Java puede ejecutarse en un ordenador
de mesa, un ordenador portátil, una tableta, un teléfono, un reproductor de
Fundamentos de programación en Java
La plataforma de Java
Los programas Java se compilan a un lenguaje intermedio, denominado
Bytecode. Este código es interpretado por la máquina virtual de Java del
entorno de ejecución (JRE) y así se consigue la portabilidad en distintas
plataformas. El JRE es una pieza intermedia entre el código Bytecode y los
distintos sistemas operativos existentes en el mercado. Un programa Java
compilado en Bytecode se puede ejecutar en sistemas operativos como
Windows, Linux, Mac Os, Solaris, BlackBerry OS, iOs o Android utilizando el
entorno de ejecución de Java (JRE) apropiado.
¿Cómo se va a utilizar?
/*
* Este programa escribe el texto "Hola Mundo" en la consola
* utilizando el método System.out.println()
*/
perimetro = 2.0*PI*radio;
System.out.print("El perimetro de la circunferencia de radio ");
System.out.print(radio);
System.out.print(" es ");
System.out.print(perimetro);
}
}
Fundamentos de programación en Java
En este ejemplo se puede ver que dentro del método main() se incluye un
comentario de una sola línea que comienza con //. A continuación se
declaran las variables PI, radio y perimetro, todas ellas de tipo double
porque almacenan números reales. PI representa un valor constante, por lo
que es necesario utilizar el delimitador final y asignarle el valor
3.1415926536 correspondiente al número pi.
System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");
Hola Mundo
Estructura de un programa Java
System.out.print("Hola");
System.out.print("Mundo");
HolaMundo
System.out.println("Hola");
System.out.println("Mundo");
Hola
Mundo
System.out.print("Hola");
System.out.print(" ");
System.out.print("Mundo");
Fundamentos de programación en Java
System.out.print("Hola Mundo");
Para mostrar por la consola un texto seguido del valor almacenado de una
variable se puede ejecutar dos veces el método System.out.print():
El perímetro es 157.08
Comentarios
/*
* El programa HolaMundo se utiliza para aplicar los
* métodos System.out.print() y System.out.println()
*/
/**
* Programa HolaMundo
* @author Fundamentos de Informática
* @version 1.0
* @see Referencias
*/
Identificadores
Todo identificador debe empezar con una letra que puede estar seguida de
más letras o dígitos. Una letra es cualquier símbolo del alfabeto y el
carácter ‘_’. Un dígito es cualquier carácter entre ‘0’ y ‘9’.
Cualquier identificador que empiece con una letra seguida de más letras o
dígitos es válido siempre que no forme parte de las palabras reservadas del
lenguaje Java. El lenguaje Java distingue entre letras mayúsculas y
minúsculas, esto significa que los identificadores numeroPar y numeropar
son distintos.
Existen unas normas básicas para los identificadores que se deben respetar.
Variables y valores
int mesNacimiento;
mesNacimiento = 2;
System.out.print(mesNacimiento);
int dia=20;
int mes=2;
int año=2020;
Tipos primitivos
-922117036854775808 a
long Entero con signo
+922117036854775807
±3.40282347e+38 a
float Real de precisión simple
±1.40239846e-45
±1.7976931348623157e+309 a
double Real de precisión doble
±4.94065645841246544e-324
Literales
Booleanos. Los valores lógicos solo pueden ser true y false. Se escriben
siempre en minúsculas.
Carácter Significado
\b Retroceso
\t Tabulador
\n Salto de línea
\r Cambio de línea
Un texto puede estar vacío o contener uno o más caracteres. Por ejemplo,
“Hola Mundo” es un texto de 10 caracteres, mientras que “” es un texto
vacío y tiene 0 caracteres. El texto “a” es diferente del carácter 'a' de tipo
char.
Operadores
Un operador relacional permiten comparar dos valores: >, <, >= y <=.
El resultado de la comparación es un valor booleano que indica si la
relación es verdadera o falsa.
Números reales. Con los números reales se aplican los mismos operadores
que con los números enteros. Si se realizan operaciones unarias, aditivas o
multiplicativas, el resultado es un número real. También se pueden aplicar
los operadores relacionales para comparar dos números reales.
Expresiones
C = ((F – 32) * 5) / 9
Expresiones aritmético-lógicas
(10 – 2) > (5 – 3)
Conversión de tipos
En realidad, las palabras false, null y true son literales. No son palabras
reservadas del lenguaje, pero no se pueden utilizar como identificadores.
3. Clases y objetos
Clases
En su forma más simple, una clase se define por la palabra reservada
class seguida del nombre de la clase. El nombre de la clase debe empezar
por mayúscula. Si el nombre es compuesto, entonces cada palabra debe
empezar por mayúscula. Circulo, Rectangulo, Triangulo y
FiguraGeometrica son nombres válidos de clases.
Por ejemplo, la clase Circulo se define con tres atributos: el radio y las
coordenadas x, y que definen la posición del centro del círculo.
int x;
int y;
int radio;
}
Fundamentos de programación en Java
Una vez que se ha declarado una clase, se pueden crear objetos a partir de
ella. A la creación de un objeto se le denomina instanciación. Es por esto
que se dice que un objeto es una instancia de una clase y el término
instancia y objeto se utilizan indistintamente.
Para crear objetos, basta con declarar una variable de alguno de los tipos
de figuras geométricas:
Circulo circulo1;
Circulo circulo2;
Atributos
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
Métodos y constructores
Para diferenciar entre los atributos del objeto y los identificadores de los
parámetros del método constructor, se utiliza la palabra this. De esta
forma, los parámetros del método pueden tener el mismo nombre que los
atributos de la clase. Esto permite hacer una asignación como la que se
muestra a continuación, donde this.marca se refiere al atributo del objeto
y marca al parámetro del método.
this.marca = marca;
Fundamentos de programación en Java
Los objetos se representan como cajas que indican el nombre del objeto, la
clase a la que pertenecen y el estado del objeto.
matricula “2345 JVM”, marca “SEAT”, modelo “León”, color “Negro”, tarifa
80.0 y disponible false.
Objetos
Un objeto se compone de atributos y métodos. Para acceder a los
elementos de un objeto se escribe el nombre del objeto, un punto y el
nombre del elemento al que se desea acceder.
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
vehiculo1.setTarifa(90.0);
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
Fundamentos de programación en Java
La referencia null
Vehiculo vehiculo2;
Vehiculo vehiculo2;
Para saber si una referencia está instanciada o no, se puede comparar con
null.
if (vehiculo2 == null) {
System.out.print("vehiculo2 es una referencia null")
}
if (vehiculo2 != null) {
System.out.print("vehiculo2 está instanciado")
}
Vehiculo vehiculo1;
Vehiculo vehiculo3;
vehiculo3 = vehiculo1;
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());
Clases y objetos
La salida por la consola muestra dos veces los valores asignados al objeto
vehiculo1.
vehiculo3.setTarifa(90.0);
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());
Fundamentos de programación en Java
Atributos
Los atributos son los elementos que almacenan el estado de un objeto. Se
definen de la misma forma que las variables, pero dentro del bloque de la
clase.
En esta nueva declaración, todos los atributos tienen acceso private y solo
es posible acceder a ellos desde los métodos de la clase.
Métodos
Los métodos son funciones que determinan el comportamiento de los
objetos. Un objeto se comporta de una u otra forma dependiendo de los
métodos de la clase a la que pertenece. Todos los objetos de una misma
clase tienen los mismos métodos y el mismo comportamiento.
Clases y objetos
Los métodos ‘get’ son métodos de consulta, mientras que los métodos ‘set’
son métodos modificadores.
Los métodos ‘get’ se utilizan para extraer el valor de un atributo del objeto
y los métodos ‘set’ para modificarlo. En la clase Vehiculo es necesario
definir un método ‘get’ para cada uno de sus atributos: getMatricula(),
getMarca(), getModelo(), getColor(), getTarifa() y
getDisponible(). Los métodos ‘set’ solo se definen para los atributos que
pueden ser modificados después de que se ha creado el objeto. En este
caso es necesario definir los métodos setTarifa(double tarifa) y
setDisponible(boolean disponible) para modificar la tarifa del
alquiler del vehículo y su disponibilidad, respectivamente.
Un método ‘get’ utiliza return para devolver el valor del atributo. En este caso el identificador
del atributo es tarifa y se refiere a él como this.tarifa
Fundamentos de programación en Java
Un método ‘set’ modifica el valor de un atributo del objeto. En este caso el identificador del
atributo es tarifa y se refiere a él como this.tarifa para asignarle el valor del parámetro
Clases y objetos
Por ejemplo, la clase Circulo define dos métodos de tipo operación, uno
para calcular el perímetro y otro para calcular el área.
Declaración de métodos
Invocación de métodos
int numero = 4;
El método main()
}
}
Parámetros y argumentos
Paso de parámetros
recibirVehiculoAlquilado (vehiculo1);
}
}
El valor de retorno
Los métodos ‘set’ devuelven void, mientras que los métodos ‘get’
devuelven el tipo correspondiente al atributo al que hacen referencia. Los
métodos ‘set’ devuelven void porque son métodos modificadores, realizan
operaciones y cálculos para modificar el estado de los objetos. Los métodos
‘get’, en cambio, son métodos de consulta y devuelven los valores
almacenados en los atributos de un objeto.
Los dos métodos son equivalentes, pero el primero es más claro porque
evita el uso de una variable local que no es necesaria.
Sobrecarga de métodos
Constructores
Para crear un objeto se utiliza el operador new. Si no se ha definido un
método constructor para la clase, entonces el objeto se instancia indicando
el nombre de la clase y a continuación un paréntesis abierto y otro cerrado.
Si ya se ha definido un método constructor, entonces no es posible
instanciar un objeto utilizando el constructor por defecto. Cuando se invoca
al constructor por defecto se asigna un espacio de memoria para el nuevo
objeto y sus atributos se inicializan a los valores por defecto
correspondientes a su tipo. Los números enteros se inicializan a cero, los
números reales a 0.0, los valores lógicos a false, los caracteres se
inicializan a \u0000 y las referencias a null.
Fundamentos de programación en Java
Composición
La composición consiste en crear una clase nueva agrupando objetos de
clases que ya existen. Una composición agrupa uno o más objetos para
construir una clase, de manera que las instancias de esta nueva clase
contienen uno o más objetos de otras clases. Normalmente los objetos
contenidos se declaran con acceso private y se inicializan en el
constructor de la clase.
}
}
Fundamentos de programación en Java
alquiler1.getCliente().getNIF();
alquiler1.getVehiculo().getMatricula();
System.out.println("Vehículo alquilado");
System.out.println("Cliente : " +
alquiler1.getCliente().getNIF() + " " +
alquiler1.getCliente().getNombre() + " " +
alquiler1.getCliente().getApellidos());
System.out.println("Vehículo: " +
alquiler1.getVehiculo().getMatricula());
Vehículo alquilado
Cliente : 30435624X Juan Pérez
Vehículo: 4050 ABJ
Extensión de clases
Herencia
La herencia es la capacidad que tienen los lenguajes orientados a objetos
para extender clases. Esto produce una nueva clase que hereda el
comportamiento y los atributos de la clase que ha sido extendida. La clase
original se denomina clase base o superclase, la nueva clase se denomina
clase derivada o subclase.
Extensión de clases
Suponga que se desea diseñar una aplicación para gestionar una empresa
de alquiler de vehículos de tipo turismo, deportivo y furgonetas. La clase
Vehiculo define los atributos y los métodos de todos los vehículos de la
empresa de alquiler. Esto no es suficiente porque hay distintos tipos de
vehículos, de manera que es necesario definir subclases para cada tipo de
vehículo: turismo, deportivo y furgoneta. En este ejemplo, la superclase es
Vehiculo y las subclases son Turismo, Deportivo y Furgoneta. Todas
las subclases son vehículos, un turismo, un deportivo y una furgoneta son
vehículos, pero cada uno de ellos tiene características propias que le hacen
diferente del resto. Para un turismo interesa saber el número de puertas y
el tipo de cambio de marcha, para un deportivo interesa saber su cilindrada
y para una furgoneta su capacidad de carga en kilos y el volumen en metros
cúbicos.
}
Fundamentos de programación en Java
}
Extensión de clases
}
Fundamentos de programación en Java
}
Extensión de clases
Polimorfismo
La clase
Deportivo añade el atributo cilindrada y el método
getCilindrada().
System.out.print("Vehículo : " +
miVehiculo.getAtributos());
System.out.print("Deportivo " +
miDeportivo.getAtributos());
System.out.print("Furgoneta " +
miFurgoneta.getAtributos());
System.out.print("Turismo : " +
miTurismo.getMatricula() + " " +
miTurismo.getMarca() + " " +
miTurismo.getModelo());
Compatibilidad de tipos
En una relación de tipo herencia, un objeto de la superclase puede
almacenar un objeto de cualquiera de sus subclases. Por ejemplo, un objeto
de la clase Vehiculo puede almacenar un objeto de la clase Turismo,
Deportivo o Furgoneta. Dicho de otro modo, cualquier referencia de la
clase Vehiculo puede contener una instancia de la clase Vehiculo o bien
una instancia de las subclases Turismo, Deportivo o Furgoneta.
Esto significa que la clase base o superclase es compatible con los tipos que
derivan de ella, pero no al revés. Una referencia de la clase Turismo solo
puede almacenar una instancia de Turismo, nunca una instancia de la
superclase Vehiculo.
Jerarquía de herencia
Cualquier clase Java puede ser utilizada como una clase base para extender
sus atributos y comportamiento. La clase derivada que se obtenga, puede a
su vez, ser extendida de nuevo. La relación de herencia es transitiva y
define una jerarquía.
}
Ampliación de clases
Derechos de acceso
El estado de un objeto está dado por el conjunto de valores de sus
atributos. Una modificación arbitraria, intencionada o no, puede provocar
inconsistencias o comportamientos no deseados de un objeto. Es por este
motivo que se debe controlar el acceso a los atributos de los objetos. Java
proporciona mecanismos de acceso a los elementos de una clase, de forma
que se puede determinar el derecho de acceso de cada elemento según las
necesidades de los objetos.
Con esta declaración, todos los atributos de la clase tienen acceso private
y el diagrama de clases muestra un signo menos delante del identificador
del atributo para indicar que es privado.
Ampliación de clases
Paquetes
Los paquetes son grupos de clases, interfaces y otros paquetes que están
relacionados entre sí. Los paquetes aportan una forma de encapsulación de
un nivel superior al de las clases. Permiten unificar un conjunto de clases e
interfaces que se relacionan funcionalmente. Por ejemplo, el paquete java
engloba un conjunto de paquetes con utilidades de soporte para desarrollo y
ejecución de aplicaciones como util o lang.
package nombre-del-paquete;
package vehiculos;
Uso
import nombre-del-paquete;
import java.math.*;
Ampliación de clases
import java.util.Calendar;
import java.util.Calendar;
diaHoy = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
mesHoy = Calendar.getInstance().get(Calendar.MONTH) + 1;
añoHoy = Calendar.getInstance().get(Calendar.YEAR);
Nombres
package nombre-de-la-empresa.nombre-del-paquete;
Fundamentos de programación en Java
package miEmpresa.vehiculos;
Clases predefinidas
Una característica importante de Java es que aporta gran cantidad de clases
predefinidas. Estas clases están especializadas en comunicaciones, web,
interfaz de usuario, matemáticas y muchas otras aplicaciones.
Los tipos predefinidos boolean, char, int, long, float y double son
tipos simples, no son clases. Para facilitar la programación en Java se han
creado clases asociadas a los tipos predefinidos. Estas clases proporcionan
métodos útiles para convertir cadenas de texto a otros tipos, para imprimir
los números con diversos formatos y para describir los tipos simples.
Boolean boolean
Character char
Integer int
Long long
Float float
Double double
Ampliación de clases
La clase Math
Para más información sobre los métodos de la clase Math, consulte el API
de Java.
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Math.html
Fundamentos de programación en Java
La clase String
Para más información sobre los métodos de la clase String, consulte el API
de Java.
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html
6. Estructuras de control
Estructuras de selección
Las estructuras de selección permiten modificar el flujo de un programa. La
decisión de ejecutar un bloque de sentencias queda condicionada por el
valor de una expresión lógica definida utilizando variables del programa.
Estructura if
if (condicion) {
bloque-de-sentencias
}
if (condicion)
sentencia;
if (calificacion == 10) {
System.out.println("Matrícula de Honor");
}
Estructura if else
if (condicion) {
bloque-de-sentencias-if
}
else {
bloque-de-sentencias-else
}
La sentencia if-else:
if (numero % 2 == 0)
System.out.println("El número es par");
else
System.out.println("El número es impar");
if (numero % 2 != 0)
System.out.println("El número es impar");
else
System.out.println("El número es par");
Calificación Descripción
10 Matrícula de Honor
9 Sobresaliente
7, 8 Notable
6 Bien
5 Aprobado
0,1,2,3,4 Suspenso
Fundamentos de programación en Java
De la tabla anterior, se puede ver que las condiciones son excluyentes entre
sí. Si la calificación es 10 se muestra “Matrícula de Honor”. En caso
contrario la calificación es menor de 10 y es necesario seleccionar entre
“Sobresaliente”, “Notable”, “Bien”, “Aprobado” y “Suspenso”. Si la
calificación es 9 se muestra “Sobresaliente”. En caso contrario, la
calificación es menor de 9 y se debe seleccionar entre “Notable”, “Bien”,
“Aprobado” y “Suspenso”. Si la calificación es mayor o igual a 7 se muestra
“Notable”. En caso contrario la calificación es menor de 7 y se debe
seleccionar entre “Bien”, “Aprobado” y “Suspenso”. Si la calificación es 6 se
muestra “Bien”. En caso contrario la calificación es menor o igual a 6 y se
debe seleccionar entre “Aprobado” y “Suspenso”. Si la calificación es 5 se
muestra “Aprobado”, en caso contrario “Suspenso”.
La sentencia if-else:
int calificacion = 7;
if (calificacion == 10)
System.out.println("Matrícula de Honor");
else
if (calificacion == 9)
System.out.println("Sobresaliente");
else
if (calificacion >= 7)
System.out.println("Notable");
else
if (calificacion == 6)
System.out.println("Bien");
else
if (calificacion == 5)
System.out.println("Aprobado");
else
System.out.println("Suspenso");
Estructuras de control
Estructura if else if
if (condicion-1) {
bloque-de-sentencias-condicion-1
} else if (condicion-2) {
bloque-de-sentencias-condicion-2
} else {
bloque-de-sentencias-else
}
int calificacion = 7;
if (calificacion == 10) {
System.out.println("Matrícula de Honor");
} else if (calificacion == 9) {
System.out.println("Sobresaliente");
} else if (calificacion >= 7) {
System.out.println("Notable");
} else if (calificacion == 6) {
System.out.println("Bien");
} else if (calificacion == 5) {
System.out.println("Aprobado");
} else {
System.out.println("Suspenso");
}
Fundamentos de programación en Java
Estructura switch
switch (expresion) {
case valor-1:
bloque-de-sentencias-1;
break;
case valor-2:
bloque-de-sentencias-2;
break;
case valor-3:
bloque-de-sentencias-3;
break;
case valor-4:
bloque-de-sentencias-4;
break;
case valor-5:
bloque-de-sentencias-5;
break;
default:
bloque-de-sentencias-default;
break;
}
Estructuras de control
Calificación Descripción
switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
case 'B': System.out.print("Senior ");
case 'C': System.out.print("Junior ");
default: System.out.print("¡Indefinida! ");
}
}
}
switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
break;
case 'B': System.out.print("Senior ");
break;
case 'C': System.out.print("Junior ");
break;
default: System.out.print("¡Indefinida! ");
break;
}
switch (categoriaProfesional) {
case 'A': System.out.print("Socio ");
break;
case 'B': System.out.print("Senior ");
break;
case 'C': System.out.print("Junior ");
break;
default: System.out.print("¡Indefinida! ");
break;
}
}
}
El operador condicional
Menor de edad
Estructuras de repetición
Las estructuras de repetición permiten repetir muchas veces un bloque de
sentencias. A estas estructuras también se les conoce como estructuras
iterativas o bucles.
Estructura while
inicialización;
while (condición) {
bloque-de-sentencias;
actualizacion;
}
while (condición) {
bloque-de-sentencias;
}
0! = 1
1! = 1
2! = 1 x 2
3! = 1 x 2 x 3
4! = 1 x 2 x 3 x 4
...
n!= 1 x 2 x 3 x 4 x 5 x ... x (n-2) x (n-1) x (n)
while (i <= n) {
factorial = factorial * i;
i++;
}
}
}
Estructuras de control
i n factorial * i factorial
1 5 1*1 1
2 5 1*2 2
3 5 2*3 6
4 5 6*4 24
5 5 24 * 5 120
Estructura do-while
inicialización;
do {
bloque-de-sentencias;
actualizacion;
} while (condición);
do {
bloque-de-sentencias;
} while (condición);
do {
factorial = factorial * i;
i++;
} while (i <= n);
}
}
Fundamentos de programación en Java
Estructura for
}
}
if (numero == 0)
System.out.println("El número es par");
else
System.out.println("El número es impar");
}
}
Fundamentos de programación en Java
do {
numero = (int) (100 * Math.random());
System.out.println("Número aleatorio: " + numero);
} while (numero != 50);
}
}
Estructuras de control
Ejemplo de uso de for. Utilice una estructura for para calcular la función
potencia de un número entero positivo utilizando productos. La potencia se
calcula como el producto de la base repetido tantas veces como el valor del
exponente.
}
}
Fundamentos de programación en Java
Estructuras de salto
En Java existen dos sentencias que permiten modificar el flujo secuencial de
un programa y provocan un salto en la ejecución. Estas sentencias son
break y continue. Ambas se utilizan con las estructuras de repetición
para interrumpir la ejecución con break o volver al principio con continue.
Además, el break se utiliza para interrumpir la ejecución de un switch.
Sentencia break
Sentencia continue
Utilice un for para comparar cada una de las letras de la frase. Dentro del
for utilice un switch para seleccionar entre vocales, consonantes y
espacios. Las variables vocales, consonantes y espacios se inicializan a cero
y se utilizan para contar el número de veces que aparecen en la frase.
switch (letra) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
case 'A':
case 'E':
case 'I':
case 'O':
case 'U': vocales++;
break;
case ' ': espacios++;
break;
default: consonantes++;
break;
}
}
}
}
Fundamentos de programación en Java
do {
numero = (int) (100 * Math.random());
System.out.println("Número aleatorio: " + numero);
if (numero == 25)
break;
}
}
Estructuras de control
}
}
7. Estructuras de almacenamiento
Arrays
Java proporciona una estructura de almacenamiento denominada array que
permite almacenar muchos objetos de la misma clase e identificarlos con el
mismo nombre.
tipo-o-clase[] identificador-array;
o
tipo-o-clase identificador-array[];
int[] numeros;
o
int numeros[];
Se denomina tipo base del array al tipo que se declara para sus elementos.
Este tipo base puede ser un tipo primitivo de Java, un objeto o una clase
definida. En los ejemplos anteriores se han utilizado tipos primitivos y
clases como tipo base. El array numerosEnteros almacena objetos del
primitivo int. El array nombres almacena objetos de la clase String. El
array objetos almacena referencias a instancias de la clase Object de
Java. El array vehiculos almacena objetos de la clase Vehiculo.
notas[0] es 4
notas[1] es 9
notas[2] es 7
notas[3] es 5
notas[4] es 10
La variable nota del for “para todo” toma los valores nota[0], nota[1],
nota[2], nota[3] y nota[4] en cada iteración. Cuando se utiliza un for
“para todo” no hace falta indicar los límites de la variable de control del
for, basta que esta variable sea del tipo almacenado en el array. En este
ejemplo nota es de tipo int.
4
9
7
5
10
Estructuras de almacenamiento
De nuevo, se utiliza un for “para todo” para mostrar el contenido del array
diasLaborables que almacena objetos de tipo String.
La variable dia del for “para todo” es de tipo String y toma los valores
diasLaborables[0], diasLaborables[1], diasLaborables[2],
diasLaborables[3] y diasLaborables[4] en cada iteración.
Fundamentos de programación en Java
Lunes
Martes
Miércoles
Jueves
Viernes
La variable vehiculo del for “para todo” es de tipo Vehiculo y toma los
valores de vehiculos[0], vehiculos [1] y vehiculos[2] en cada
iteración.
Fundamentos de programación en Java
Arrays multidimensionales
Un array de dos dimensiones es un array que contiene otro array en cada
uno de sus elementos.
Para mostrar los elementos del array notas es necesario utilizar dos for
anidados.
notas[0][0] es 5
notas[0][1] es 7
notas[0][2] es 9
notas[1][0] es 4
notas[1][1] es 6
notas[1][2] es 5
Fundamentos de programación en Java
5
7
9
4
6
5
int numero = 1;
System.out.println("");
}
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 27
Fundamentos de programación en Java
Uso de arrays
Suponga que se desea almacenar en arrays el catálogo de vehículos y la
relación de clientes de una empresa de alquiler de vehículos. Para esto es
necesario definir una nueva clase, EmpresaAlquilerVehiculos, que
almacene la información detallada de la empresa, los clientes y el catálogo
de vehículos.
}
Estructuras de almacenamiento
}
Fundamentos de programación en Java
return null;
}
Estructuras de almacenamiento
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres[this.totalAlquileres]=
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias);
this.totalAlquileres++;
}
}
if (vehiculo != null)
vehiculo.setDisponible(true);
}
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan","González López"));
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
Fundamentos de programación en Java
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
}
}
Fundamentos de programación en Java
La relación de clientes:
El catálogo de vehículos:
int mitad;
int limiteInferior = 0;
int limiteSuperior = numeros.length - 1;
int numeroBusqueda = 68;
boolean encontrado = false;
if (numeros[mitad] == numeroBusqueda) {
encontrado = true; // ¡encontrado!
}
else if (numeros[mitad] > numeroBusqueda) {
limiteSuperior = mitad - 1; // buscar en la primera mitad
} else {
limiteInferior = mitad + 1; // buscar en la segunda mitad
}
}
if (encontrado)
System.out.println("He encontrado el número");
else
System.out.println("No he encontrado el número");
}
}
Ordenación de arrays
Una de las operaciones más comunes con arrays es la ordenación. Un
algoritmo de ordenación clasifica un conjunto de datos de forma ascendente
o descendente.
Fundamentos de programación en Java
int tmp;
Java define la clase Arrays con métodos que permiten realizar operaciones
de ordenación y búsqueda en objetos de tipo array. Estos métodos se
pueden utilizar con todos los tipos primitivos, String y con cualquier otro
tipo de objeto.
Estructuras de almacenamiento
Arrays.sort(numerosOrdenados);
5
4
6
7
5
6
4
8
7
10
4
4
5
5
6
6
7
7
8
10
Fundamentos de programación en Java
Arrays redimensionables
Un ArrayList es un array redimensionable. Puede almacenar un número
indefinido de elementos.
Vehiculo v = (Vehiculo)vehiculos.get(0);
http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html
Fundamentos de programación en Java
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.List;
System.out.println("Vehiculos");
Vehiculos
Matrícula: 4060 TUR Modelo: Skoda Fabia Color: Blanco
Tarifa: 90.0 Disponible: true Puertas: 2 Marcha
automática: false
Matrícula: 4070 DEP Modelo: Ford Mustang Color: Rojo
Tarifa: 150.0 Disponible: true Cilindrada (cm3): 2000
Matrícula: 4080 TUR Modelo: VW GTI Color: Azul
Tarifa: 110.0 Disponible: true Puertas: 2 Marcha
automática: false
Matrícula: 4090 TUR Modelo: SEAT Ibiza Color: Blanco
Tarifa: 90.0 Disponible: true Puertas: 4 Marcha
automática: false
Matrícula: 4100 FUR Modelo: Fiat Ducato Color: Azul
Tarifa: 80.0 Disponible: true Carga (kg): 1200
Volumen (m3): 8
import java.util.ArrayList;
import java.util.List;
return null;
}
Estructuras de almacenamiento
if (vehiculo.getDisponible()) {
vehiculo.setDisponible(false);
this.alquileres.add(
new VehiculoAlquilado(cliente, vehiculo,
diaHoy(), mesHoy(), añoHoy(), dias));
}
}
if (vehiculo != null)
vehiculo.setDisponible(true);
}
Fundamentos de programación en Java
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan","González López"));
Estructuras de almacenamiento
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
Fundamentos de programación en Java
import java.util.ArrayList;
import java.util.List;
easydrive.registrarCliente(new Cliente("X5618927C",
"Juan", "González López"));
easydrive.registrarCliente(new Cliente("Z7568991Y",
"Luis", "Fernández Gómez"));
easydrive.imprimirClientes();
easydrive.imprimirVehiculos();
}
}
8. Entrada y salida
InputStream Reader
ByteArrayInputStream BufferedReader
FileInputStream LineNumberReader
FilterInputStream CharArrayReader
BufferedInputStream FilterReader
DataInputStream PushBackReader
LineNumberInputStream InputStreamReader
PushBackInputStream FileReader
ObjectInputStream PipedReader
PipedInputStream StringReader
SequenceInputStream
StringBufferInputStream
OutputStream Writer
ByteArrayOutputStream BufferedWriter
FileOutputStream CharArrayWriter
FilterOutputStream FilterWriter
BufferedOutputStream OutputStreamWriter
DataOutputStream FileWriter
PrintStream PipedWriter
ObjectOutputStream PrintWriter
PipedOutputStream StringWriter
Existen flujos con bytes y flujos con caracteres que se aplican a la misma
entrada o salida. FileInputStream y FileOutputStream son flujos para
leer y escribir bytes en un fichero, FileReader y FileWriter también son
flujos que se aplican a ficheros, pero en este caso para leer y escribir
caracteres.
Fundamentos de programación en Java
import java.util.Scanner;
Una vez introducidos todos los datos, el programa muestra un mensaje por
la consola con el nombre y fecha de nacimiento.
ficheroSalida.close();
Entrada y salida
El for anidado escribe todos los elementos del array en el fichero de texto.
Al finalizar se invoca al método close() del objeto ficheroSalida para
cerrarlo.
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25,
import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.IOException;
Fundamentos de programación en Java
if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");
while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() +
"\t");
System.out.println("");
}
datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");
Entrada y salida
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.io.PrintWriter;
if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
System.out.println("Números del fichero");
while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");
while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() + "\t");
System.out.println("");
}
datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");
}
}
Fundamentos de programación en Java