0% encontró este documento útil (0 votos)
4 vistas126 páginas

01 Programacion

El documento describe los elementos fundamentales de un programa informático, incluyendo algoritmos, lenguajes de programación y conceptos de programación como variables y constantes. Se detalla el proceso de compilación, el lenguaje Java y sus tecnologías, así como ejemplos de creación de programas y estructuras de control. Además, se abordan operadores y técnicas de representación de algoritmos, como diagramas de flujo y pseudocódigo.

Cargado por

David Falagán
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas126 páginas

01 Programacion

El documento describe los elementos fundamentales de un programa informático, incluyendo algoritmos, lenguajes de programación y conceptos de programación como variables y constantes. Se detalla el proceso de compilación, el lenguaje Java y sus tecnologías, así como ejemplos de creación de programas y estructuras de control. Además, se abordan operadores y técnicas de representación de algoritmos, como diagramas de flujo y pseudocódigo.

Cargado por

David Falagán
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

TEMA 1 IDENTIFICACIÓN DE ELEMENTOS DE UN PROGRAMA INFORMÁTICO

1.-Elementos de un programa informático.


1.1.-Algoritmo: conjunto de pasos necesarios para resolver un problema. Ej. Cruzar la calle.

• Me acerco a la calle.
• Miro si vienen coches.
• Si vienen, espero. Vuelvo al paso 2.
• Si no vienen, cruzo.

1.2.-Programa: codificación del algoritmo en un lenguaje de programación, que es un idioma con el que podemos
dialogar y dar órdenes al ordenador. Tipos de lenguaje:

1.2.1.-Lenguaje máquina: (0,1).

1.2.2.-Lenguaje ensamblador.

1.2.3.-Lenguaje de alto nivel.

1.2.4.-Java, PHP, Java script.

1.2.5.-Fases en el diseño de un programa:

Problema è análisis è diseño è programación è pruebas.

1.3.-Conceptos de programación:

1.3.1.-Variable: posición de memoria que contiene un dato, (caja donde meto cosas). Se escriben en minúsculas.
EJ. Ciudad, teléfono.

1.3.2.-Constante: posición en memoria que contiene un dato fijo (caja donde contenido no cambia). Se escriben
en mayúsculas. Ej. Meses, numero PI.

1.4.-Técnicas de representación de algoritmos:

1.4.1.-Diagrama de flujos: representación gráfica del algoritmo.

EJ. Programa que pide al usuario 2 números por teclado y muestra si son iguales o no.

Ej. Hacer diagrama de flujo que pida al usuario la base y la altura de un triángulo y muestre por pantalla el área.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 1


Ej. Pedir por teclado un numero entre 1 y 10, si este no está entre 1 y 10 mostrar error y volver a pedirlo, cuando sea
correcto mostrarlo por pantalla y multiplicarlo por 3.

1.4.2.-Pseudocódigo: representación textual del algoritmo.

Programa: calculo del área de un triángulo.


Variables: base, altura, área.
Inicio:
introducir base
introducir altura.
Área= (base x altura) / 2
Mostrar área.

Fin.

1.5.-Proceso de compilación de un programa:

1.5.1.-Compilar: traducir un programa escrito en un lenguaje de programación a código máquina (0,1).

programas è compilador è Programa ejecutado

1.6.-JAVA: es un lenguaje de programación orientado a objetos, multiplataforma, desarrollado por SUN en 1995. Es
gratuito, sencillo y seguro. Tecnologías JAVA:

• Java SE: estándar edición, la base de java.


• Java EE: la versión web de java.
• Java ME: diseño de aplicaciones móviles.
• Java FX: versión flash de java.
• Java card: versión para chips de tarjetas.
En su origen java se diseñó para crear aplicaciones en internet en cualquier ordenador del mundo, los
diseñadores se encontraron con un problema, sobre que máquina se iba a ejecutar el programa y sobre que S.O.
(la compilación depende del S.O. y la CPU).

Para solucionar el problema se basaron en el lenguaje de programación OAK, lenguaje para programas
electrodomésticos.

Programa java è Intérprete è Windows, Linux, mac


ê ê
Java platform, java SE (gráficos) Maquina virtual java

1.6.1.-Tecnologías java:

• AWT, swing: diseño de ventanas.


• Java 2d: dibujar.
• Java segurity: seguridad, cifrado.
• JDBC: acceso a bases de datos.
• Networking: trabajo en red.
• XML JAXP: acceso a XML con java.
• Colection: colecciones de objetos.
1.6.2.-Donde se usa JAVA: en los grandes servidores web (portal bancario, de productos, aplicaciones de escritorio,
telefonía móvil, domótica y automoción).

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 2


1.6.3.-Nomenclatura de archivos JAVA:

• Bin: compilador, depurador, invocador MVJ (maquina virtual java).


• Jre: maquina virtual.
• [Link]: clases de java para utilizar.
• Lib: librerías de java.
1.7.-Primer programa de JAVA:

Public class primero {


Public static void main /String[] args) {
[Link](“hola”);
}
}

Se copia en la carpeta java\bin y se compila: terminal --- javac [Link] --- java primero --- hola.
Para el nombre: primera letra en mayúscula, evitar espacios, acentos, símbolos.

Public static void main (inicio)

1.7.1.-Pasos para creación de archivo en JAVA:

• Archivo à proyecto nuevo.


• El nombre del archivo será el nombre de public class
• Escribir código.
• Compilar y probar.
1.7.2.-Tipos nativos o primitivos:

NOMBRE TIPO OCUPA RANGO APROX.


Byte Entero 1 byte -128 a 127
Short Entero 2 byte -32768 a 32767
Int Entero 4 byte 2x109
Long Entero 8 byte Muy grande
Float Decimal simple 4 byte Muy grande
Doublé Decimal simple 8 byte Muy grande
Char Carácter simple 2 byte -
boolean Valor true o false 1 byte -

Para almacenar:
Entero byte Carácter / letra char
short
Int
long

Numero Decimal Float Valor lógico boolean


double
1.7.3.-Creación de variables en JAVA.

Tipo nombre; int a; tipo nombre=valor; int a=0;

TIPO VARIABLE TIPO VARIABLE


byte b=5; short s=7;
int i=500; long l=456;
float f=8; double d=6,78;
char c=’a’; boolean bo=true;

Para sacar por pantalla las variables: [Link](a);

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 3


1 /* 1 /* 1 /*
2 programa que dadas dos variables haga la división. 2 programa que pida por teclado un numero y que diga si es 2 pedir dos numeros. si primero>segundo mostrar resta.
3 */ 3 positivo o negativo, par o impar y si es multiple de 3. 3 mostrar suma siempre.
4 package ejercicio1; 4 */ 4 */
5 5 package ejercicio2; 5 package ejercicio3;
6 public class ejercicio1 { 6 import [Link]; 6 import [Link];
7 7 7
8 public static void main(String[] args) { 8 public class Ejercicio2 { 8 public class Ejercicio3 {
9 // TODO code application logic here 9 9
10 int a=2; 10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 float b=3; 11 Scanner teclado=new Scanner ([Link]); 11 Scanner teclado=new Scanner ([Link]);
12 12 12
13 [Link]("imprime el resultado"); 13 int num1; 13 int num1;
14 [Link](a/b); 14 14 int num2;
15 } 15 [Link] ("introduce un numero:"); 15
16 } 16 num1=[Link] (); 16 [Link] ("introduce un numero:");
17 17 num1=[Link] ();
18 if (num1<0){ 18 [Link] ("introduce un numero:");
19 [Link] ("el numero es negativo"); 19 num2=[Link] ();
20 } 20
21 else{ 21 if (num1>num2){
22 [Link] ("el numero es positivo"); 22 [Link] ("la resta es: " +(num1-num2));
23 } 23 }
24 24 [Link] ("la suma es: " +(num1+num2));
25 if (num1%2==0){ 25 }
26 [Link] ("el numero es par"); 26 }
27 }
28 else{
29 [Link] ("el numero es impar");
30 }
31
32 if (num1%3==0){
33 [Link] ("el numero es multiple de 3");
34 }
35 }
36 }

1.7.4.-Creación de contantes en JAVA.

final tipo NOMBRE=valor;


Final int MESES=12;

[Link].-Comentarios.

// comentario de una línea


/* comentario de varias líneas */

1.8.-Operadores:

1.8.1.-Aritméticos: (suma +) (resta -) (multiplicación *) (división /) en la división si el tipo de variable es entera, la


división es entera, pero si alguno es decimal, la división es con decimales.

1.8.2.-Lógicos: (menor que <) ( mayor que >) (igual ==) (distinto ¡=)

(mayor igual que >=) (menor igual que <=)


1.8.3.-Relacionales: (y &&) (ó ||) (no !)

Tabla de operaciones relacionales:

&& (y) || (ó) ! (no)


Expresión 1 Expresión 2 resultado Expresión 1 Expresión 2 resultado Expresión resultado
verdadero verdadero verdadero verdadero verdadero verdadero verdadero falso
verdadero falso falso verdadero falso verdadero falso verdadero
falso verdadero falso falso verdadero verdadero
falso falso falso falso falso falso

1.8.4.-Mezcla de texto y variables:

Int num1=5;
Int num2=2;
[Link](“el”+num1+”entre”+num2+”es igual a”)

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 4


TEMA 2 USOS DE ESTRUCTURAS DE CONTROL

1.-Programación estructurada.
1.1.-Tipos: secuencial, condicional, repetitiva.

SECUENCIAL CONDICIONAL REPETITIVA


abrir grifo si: hay platos sucios… mientras haya platos sucios……..
coger plato lavar los platos coger plato
lavarlo sino: ver la tele froto
cerrar grifo aclaro
fin

1.2.-Condicional:

IF NORMAL IF NORMAL CON ELSES IF ANIDADOS


Si if (condición) { if (condición) { if (condición) {
Num1==num2 Num1==num2 Num1==num2
[Link](“son iguales”): [Link](“son iguales”): [Link](“son iguales”):
} } }
sino else { else if (condición) { if (condición) {
[Link](“son iguales”): [Link](“”): [Link](“”):
} } }
else if (condición) { if (condición) {
[Link](“”): [Link](“”):
} }

1.3.-Uso del teclado:

1.3.1.-Debajo del nombre: del ejercicio poner: import [Link];

Y debajo del main: Scanner teclado=new Scanner([Link]);

1.3.2.-Quitar buffer del teclado: String tmp=[Link]();

1.4.-Mensajes por pantalla:

1.4.1.-[Link](); //al final da un salto de línea.

1.4.2.-[Link](); //al final no da un salto de línea.

1.4.3.-[Link](“hola”+variable); //anida texto y variable.

1.4.4.-[Link](“el”+num1+”entre”+num2+”es igual a”) //anida texto y variable.

1.4.5.-[Link](); //permite introducir en el texto códigos de escape.

[Link].-\n - salto de línea, \’ – comilla, \” – doble comilla, \\ - contrabarra, \t – tabulación.


[Link](“esto es \n un mensaje”);

[Link].-para visualizar variables: %d (entero), %f (doublé), %f (float), %c (char).


Int num=5.6;
[Link](“variable %d”, num”);
(“la primera vale %d \n y la segunda %f \n, num1,num2);

1.4.6.-Alineación con espacios:


double a=15;
[Link](“% 5d \n”,a); //tabula a la derecha tantos espacios como número se le ponga _ _ _15. Si
es negativo tabula a la izquierda.
1.4.7.-Control de decimales: se muestran 7 por defecto.
double a=4.15;
[Link](“% .3f” ,a); //tantos decimales como se ponga en la f, =4.150.
[Link](“% 4.3f” ,a); //espacios más decimales como se ponga en la f, =_ _ _4.150.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 5


1 /* 1 /*
2 Pedir año por teclado y decir si es bisiesto o no. 2 Pedir por teclado numero de año y un mes.
3 */ 3 Mostrar numero de días de ese mes.
4 package ejercicio4; 4 */
5 import [Link]; 5 package ejercicio5;
6 6 import [Link];
7 public class Ejercicio4 { 7
8 8 public class Ejercicio5 {
9 public static void main(String[] args) { 9
10 Scanner teclado=new Scanner ([Link]); 10 public static void main(String[] args) {
11 11 Scanner teclado=new Scanner ([Link]);
12 int num1=0; 12
13 13 int anyo=0;
14 [Link] ("introduce un año:"); 14 int mes=0;
15 num1=[Link] (); 15
16 16 [Link] ("introduce un año: ");
17 if ((num1%400==0 || num1%4==0) && num1%100!=0){ 17 anyo=[Link] ();
18 // si divisible por 400 0 4, y no div entre 100. 18 [Link] ("introduce un mes: ");
19 [Link] ("el año es bisiesto"); 19 mes=[Link] ();
20 } 20
21 else{ 21 if (mes==4 || mes==6 || mes==9 || mes==11){
22 [Link] ("el año no es bisiesto"); 22 [Link] ("el mes tiene 30 dias");
23 } 23 }
24 } 24 else if (mes==2){
25 } 25
26 if( (anyo%400==0 || anyo%4==0) && anyo%100!=0){
27 [Link] ("el mes tiene 29 dias");
28 }
29 else {
30 [Link] ("el mes tiene 28 dias");
31 }
32 }
33 else {
34 [Link] ("el mes tiene 31 dias");
35 }
36 }
37 }

1.5.-Estructura condicional: SWITCH, es similar al if – else if, hace evaluaciones múltiples.

SINTAXIS EJEMPLO
switch (variable) { Int a=3;
case1 valor:sentencia; break; switch(a);{
default:sentencia; case1:[Link](“1”); break;
} case2:[Link](“3”); break;
case5:[Link](“5”); break;
default: [Link](“otros”);
}

1.6.-Estructura repetitiva. Bucles: WHILE, FOR (mientras).

1.6.1.-WHILE: cuando la condición no se cumpla…salimos.

SINTAXIS EJEMPLO TRAZA


inicio var Int i=1; //inicio de i i pantalla
while (condición) { while(i<5) { //mientras i menor que 5 1 1 print(i)
código [Link](i); 2 (i++) 2 print(i)
incremento i++; //incremento 3 (i++) 3 print(i)
} } 4 (i++) 4 print(i)
5 (i++) No cumple

1.6.2.-FOR: cuando la condición no se cumpla…salimos.

SINTAXIS EJEMPLO TRAZA


for (inicio var; condición; incremento) { for (i=1; i<5; i++) { i pantalla
código [Link](i); 1 1 print(i)
} } 2 (i++) 2 print(i)
3 (i++) 3 print(i)
4 (i++) 4 print(i)
5 (i++) No cumple

Solo se puede usar una variable de una vez en JAVA, pero si se crea en el for, se pueden crear más, pero
después de usarse en el for desaparece. i lo usamos de contador.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 6


1 /* 1 /* 1 /*
2 Programa que muestre por pantalla la 2 Programa que muestra las series, 1 3 5 7 9, 2 Programa que imprime un cuadrado con 3 asteriscos.
3 suma de 1-10. 3 2 3 4 5 6 7 8, 100 90 80 70 60.....0. 3 */
4 */ 4 */ 4 package ejercicio8;
5 package ejercicio6; 5 package ejercicio7; 5
6 6 6 public class Ejercicio8 {
7 public class Ejercicio6 { 7 public class Ejercicio7 { 7
8 8 8 public static void main(String[] args) {
9 public static void main(String[] args) { 9 public static void main(String[] args) { 9
10 10 10 int lado=3;
11 int i=1; 11 int i=1; 11 int filas;
12 int suma=0; 12 int a=2; 12 int columnas;
13 13 int b=100; 13
14 //mientras que 1 sea < 1 le sumas 1 al valor de i. 14 14 filas=1;
15 while (i<=10) { 15 while (i<=9) { //imprime 1 3 5 7 9 15 while (filas<=lado) {
16 16 [Link] (i+" "); 16
17 suma=i+suma; //acumulador 17 i=i+2; //coge valor de i y le suma 2 17 columnas=1;
18 i++; //le suma 1 al valor de i contador 18 } 18 //imprime las columnas, este bucle esta dentro de otro
19 } 19 [Link](); 19 while (columnas<=lado) {
20 [Link] (suma); 20 20
21 } 21 while (a<=9) { //mimprime 2 3 4 5 6 7 8 21 [Link] (" * ");
22 } 22 [Link] (a+" "); 22 columnas++;
23 a=a+1; //coge valor de i y le suma 2 23 }
24 } 24 [Link] (); //imprime las filas
25 [Link](); 25 filas++;
26 26 }
27 while (b>=0) { //imprime 100 90 80... 27 }
28 [Link] (b+" ");
29 b=b-10; //coge valor de i y le suma 2 TRAZA
30 }
31 [Link](); Lado Filas Columnas pantalla
32 } 3 1 1 * * *
33 } 2 2 * * *
3 * * *
4

EJERCICIO TRAZA
1 /* i j ac pantalla
2 Sacar la traza del siguiente bucle.
3 */ 0 1 0 0
4 package ejercicio7; 1 2 0 1
5 2 1 1 1
6 public class Ejercicio7 {
7 3 2 1
8 public static void main(String[] args) { 1
9
10 int i,j,ac; 4 1
11 i=0;
12 ac=0;
13
14 while (i<4) {
15 j=1;
16 while (j<2 && ac%2==0) {
17 ac=ac+i;
18 j++;
19 }
20 [Link](ac);
21 i++;
22 }
23 }
24 }

1.7.-La validación de datos de entrada: uso típico del bucle.

SINTAXIS EJEMPLO
While (num<0) { [Link](“escribe numero positivo”);
[Link](“escribe numero positivo”); num=[Link]();
num=[Link]();
} While (num<1 || num>10) {
[Link](“escribe numero”);
num=[Link]();
}

Pide numero hasta ser positivo Dame número entre 1 y 10

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 7


1 /* 1 /* 1 /*
2 Programa que pide dos numeros por teclado y si es 2 Programa que pida 5 numeros por teclado, dar 2 Programa para introducir 5 notas por teclado,
3 menor el primero que el segundo imprimir los 3 por hecho que son positivos y mostrar el mayor 3 despues mostrar la media y mostrar cuantos
4 numeros entre ellos. y sino, error. 4 */ 4 aprobaron y suspendieron.
5 */ 5 package ejercicio12; 5 */
6 package ejercicio9; 6 import [Link]; 6 package ejercicio13;
7 import [Link]; 7 7 import [Link];
8 8 public class Ejercicio12 { 8
9 public class Ejercicio9 { 9 9 public class Ejercicio13 {
10 10 public static void main(String[] args) { 10
11 public static void main(String[] args) { 11 Scanner teclado=new Scanner ([Link]); 11 public static void main(String[] args) {
12 Scanner teclado=new Scanner ([Link]); 12 12 Scanner teclado=new Scanner ([Link]);
13 13 int num, elmayor, i; 13
14 int num1=1; 14 14 int nota, i, aprobado=0, suspenso=0, suma=0;
15 int num2=1; 15 [Link] ("introduce un numero: "); 15
16 16 num=[Link](); 16 i=1;
17 [Link] ("introduce un numero: "); 17 //minimo valor que metemos para comparar num 17 while (i<=5) {
18 num1=[Link] (); 18 elmayor=Integer.MIN_VALUE; 18 [Link] ("dame una nota: ");//piden las notas
19 [Link] ("introduce un numero: "); 19 i=1; 19 nota=[Link]();
20 num2=[Link] (); 20 while (i<=5) { 20 i++;
21 21 num=[Link](); 21
22 if(num1<num2) { 22 22 if (nota>=5) {
23 for (int i=num1;i<=num2;i++) 23 if(num>elmayor) { 23 //va recordando el numero de notas que superan el 5
24 [Link] (" " +i); 24 elmayor=num; 24 aprobado++;
25 } 25 } 25 }
26 26 i++; 26
27 else { 27 } 27 else {
28 [Link] ("error"); 28 [Link] ("el numero mayor es: "+elmayor); 28 //va recordando el numero de notas que no superan el 5
29 } 29 } 29 suspenso++;
30 } 30 } 30 }
31 } 31 //va acumulando las sumas de las notas
TRAZA EJERCICIO 13 32 suma=suma+nota;
N i Nota Aprov. Susp. Sumas 33 }
3 1 6 0 0 0 34 [Link] ("aprobados: "+aprobado);
2 2 1 1 6 35 [Link] ("suspensos: "+suspenso);
36 [Link] ("media: "+(suma/5));
3 9 2 8 37 }
4 17 38 }

1.8.-Operaciones matemáticas: clase Math.

[Link]. numero PI. [Link]. muestra numero aleatorio


[Link](-3); valor absoluto=3. [Link] (5.68); redondeo clásico= 6
Math ceil. redondeo hacia arriba. [Link] (25); devuelve raíz cuadrada= 5
[Link]. redondeo hacia abajo. [Link]. seno.
Math max (5,9); devuelve 9. [Link]. coseno.
[Link] (5,9); devuelve 5. [Link]. tangente.
[Link] (2,4); devuelve 24.

1.9.-Generación de números aleatorios: son muy importantes porque se usan mucho en juegos, simulaciones,
estadísticas…Es un número que se inventa el ordenador.

1.9.1.-Debajo del nombre: del ejercicio poner: import [Link];

Y debajo del main: Random aleatorio=new random();

int numero = [Link](máx.)+min; Rango de creación

1 /* 21 b=[Link]();
2 Programa para pedir 3 numeros double y 22
3 calcular (a elev 3- raiz cuadrada de a*b) 23 [Link] ("introduce c: ");
4 entre 1 mas 4*c 24 c=[Link]();
5 */ 25
6 package ejercicio20; 26 if(b*b-4*a*c <0) {
7 import [Link]; 27 [Link] ("error, raiz negativa");
8 28 }
9 public class Ejercicio20 { 29 else if(a==0) {
10 30 [Link] ("error, division entre 0");
11 public static void main(String[] args) { 31 }
12 32 else {
13 Scanner teclado=new Scanner ([Link]); 33 resultado1=(-b+[Link](b*b-4*a*c))/(2*a);
14 34 resultado2=(-[Link](b*b-4*a*c))/(2*a);
15 double a, b, c, resultado1, resultado2; 35
16 36 [Link] ("el resultado para +b es: " +resultado1);
17 [Link] ("introduce a: "); 37 [Link] ("el resultado es para -b es: " +resultado2);
18 a=[Link](); 38 }
19 39 }
20 [Link] ("introduce b: "); 40 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 8


1 /* 1 /*
2 Programa que muestre en una linea y separados 2 Programa que muestre en una linea y separados
3 por espacios 20 numeros al azar. entre 1 y 20. 3 por espacios 20 numeros al azar. entre 1 y 20.
4 */ 4 */
5 package ejercicio15; 5 package ejercicio15;
6 import [Link]; 6 import [Link];
7 7
8 public class Ejercicio15 { 8 public class Ejercicio15 {
9 9
10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 Random aleatorio=new Random(); 11 Random aleatorio=new Random();
12 12
13 int i; 13 int i;
14 int dado=[Link](20)+1; //se inventa un numero entre el 20 y el 1. 14 int dado=[Link](20)+1; //se inventa un numero entre el 20 y el 1.
15 15
16 i=1; //para i=1 16 for (i=1; i<=20; i++) { //rango de valores
17 while(i<=20) { //mientras sea menor e igual que 20 17 dado=[Link](20)+1; //inventa un numero entre el 20 y el 1.
18 dado=[Link](20)+1; //inventa un numero entre el 20 y el 1. 18 [Link](" "+dado); //y lo imprimes
19 [Link](" "+dado); //y lo imprimes 19 }
20 i++; 20 }
21 } 21 }
22 }
23 }

EJERCICIO TRAZA
1 /* 1 /* num cifras pantalla
2 Programa para pedir numeros hasta 2 Programa para pedir un numero y decir 5849 1
3 pulsar 0 y despues mostrar la suma. 3 cuantas cifras tiene.
4 */ 4 */ 584 2
5 package ejercicio16; 5 package ejercicio16; 58 3
6 import [Link]; 6 import [Link];
7 7 5 4 4
8 public class Ejercicio16 { 8 public class Ejercicio16 {
9 9
10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 11 Num es mayor que 9,si.
12 Scanner teclado=new Scanner ([Link]); 12 Scanner teclado=new Scanner ([Link]); Divido num entre 10 y
13 13 int num, cifras, i;
14 int num=0, suma=0; 14 Lo almaceno en num,
15 15 [Link] ("introduce un numero: "); //pedimos numero Sumo 1 a cifras
16 [Link] ("introduce un numero: "); //pedir el numero 16 num=[Link](); //guardo el numero Y vuelvo al bucle.
17 num=[Link](); 17
18 18 cifras=1;
19 while (num!=0) { //mientras que el numero sea distinto de 0 19 while (num>9) {
20 suma=suma+num; //acumular..para sumar despues 20 num=num/10;
21 //si no se cumple pedir de nuevo num 21 cifras++;
22 [Link] ("introduce un numero: "); 22 }
23 num=[Link](); 23 [Link] ("el numero tiene: " +cifras+" cifras");
24 } 24 }
25 //finalizar mostrando la suma 25 }
26 [Link] ("la suma de los numeros es: "+suma);
27 }
28 }

1 /* 1 /* 1 /*
2 Programa que se invente una carta 2 Programa de pedir dos numeros, el primero entre 1 y 10 2 Programa de juego de adivinanza que el ordenador
3 de la baraja española. 3 y el segundo entre 50 y 100, validandolos y mostrar 3 se invente un numero entre 1 y 100 el jugador introduce
4 */ 4 los pares entre ambos. 4 numeros y el ordenador da pistas de mayor o menor
5 package ejercicio17; 5 */ 5 hasta acertar el jugador.
6 import [Link]; 6 package ejercicio18; 6 */
7 7 import [Link]; 7 package ejercicio19;
8 public class Ejercicio17 { 8 8 import [Link];
9 9 public class Ejercicio18 { 9 import [Link];
10 public static void main(String[] args) { 10 10
11 Random aleatorio=new Random(); 11 public static void main(String[] args) { 11 public class Ejercicio19 {
12 12 12
13 //se inventa un carta entre el 12 y el 1. 13 Scanner teclado=new Scanner ([Link]); 13 public static void main(String[] args) {
14 int carta=[Link](12)+1; 14 14
15 //se inventa un palo entre el 4 y el 1. 15 int num1=0, num2=0; 15 Scanner teclado=new Scanner ([Link]);
16 int palo=[Link](4)+1; 16 16 Random aleatorio=new Random();
17 17 [Link] ("introduce un numero 1: "); 17
18 switch (carta) { 18 num1=[Link](); 18 //creo el aleatorio
19 case 1://para el caso de ser 1 19 //validamos el numero 1. 19 int secreto=[Link](100)+1;
20 [Link]("As de "); break; 20 while (num1<=1 || num1>=10) { 20 int num;
21 case 10://para el caso de ser 10 21 [Link] ("introduce un numero 1: "); 21
22 [Link]("Sota de "); break; 22 num1=[Link](); 22 //lo muestro...ocultar
23 case 11://para el caso de ser 11 23 } 23 [Link] (secreto);
24 [Link]("caballo de "); break; 24 24
25 case 12://para el caso de ser 12 25 [Link] ("introduce un numero 2: "); 25 [Link] ("introduce un numero del 1 al 100: ");
26 [Link]("Rey de "); break; 26 num2=[Link](); 26 num=[Link]();
27 default: 27 //validamos el numero 2. 27
28 [Link](carta+" de "); //y si no... 28 while (num2<=50 || num2>=100) { 28 while (secreto!=num) { //condiciones....
29 } 29 [Link] ("introduce un numero 2: "); 29
30 switch (palo) { 30 num2=[Link](); 30 if (secreto<num) {
31 case 1://para el caso de ser 1 31 } 31 [Link] ("introduce un numero menor: ");
32 [Link]("oros "); break; 32 32 num=[Link]();
33 case 2://para el caso de ser 2 33 //bucle para sacar los pares entre ambos 33 }
34 [Link]("copas "); break; 34 for (num1=num1; num1<=num2; num1++) { 34
35 case 3://para el caso de ser 3 35 if (num1%2==0) 35 else if (secreto>num) {
36 [Link]("espadas "); break; 36 [Link] (" "+num1); 36 [Link] ("introduce un numero mayor: ");
37 case 4://para el caso de ser 4 37 } 37 num=[Link]();
38 [Link]("bastos "); break; 38 } 38 }
39 } 39 } 39 }
40 } 40 [Link] ("¡acertaste!");
41 } 41 }
42 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 9


1 /* 1 /*
2 diseño de un menu 2 Programa diseño de un menu
3 */ 3 */
4 package ejercicio21; 4 package ejercicio22;
5 import [Link]; 5 import [Link];
6 6
7 public class Ejercicio21 { 7 public class Ejercicio22 {
8 8
9 public static void main(String[] args) { 9 public static void main(String[] args) {
10 10
11 Scanner teclado=new Scanner ([Link]); 11 Scanner teclado=new Scanner ([Link]);
12 12
13 int opcion=-1; //para que empiece el bucle 13 int opcion=-1;
14 14 int num1, num2;
15 while(opcion!=4) { //numero de opciones que va a ver 15
16 [Link]("MENU"); 16 [Link] ("introduce un numero: ");
17 [Link]("----"); 17 num1=[Link]();
18 [Link]("1. Altas"); 18
19 [Link]("2. Bajas"); 19 [Link] ("introduce otro numero: ");
20 [Link]("3. Consultas"); 20 num2=[Link]();
21 [Link]("4. Salir"); 21
22 22 while(opcion!=5) {
23 opcion=[Link](); //pedir opcion por teclado 23 [Link]("1. suma");
24 24 [Link]("2. resta");
25 switch (opcion) { 25 [Link]("3. producto");
26 case 1: //codigo de altas break 26 [Link]("4. division");
27 case 2: //codigo de bajas break 27 [Link]("5. salir");
28 case 3: //codigo de consultas break 28
29 //para salir no hace falta indicarlo 29 opcion=[Link]();
30 } 30
31 } 31 switch (opcion) {
32 } 32 case 1: [Link]("la suma es= " +(num1+num2)); break;
33 } 33 case 2: [Link]("la resta es= " +(num1-num2)); break;
34 case 3: [Link]("el producto es= " +(num1*num2)); break;
35 case 4:
36 if (num2==0) {
37 [Link]("sin solucion");
38 }
39 else
40 [Link]("la division es= " +(num1/num2)); break;
41 }
42 }
43 }
44 }

1.10.-Dibujos de figuras: la forma de cuadrados o figuras implica doble bucle siempre.

1 /* 1 /*
2 Programa que imprime una linea de asteriscos 2 Programa que imprime una figura de asteriscos
3 que marque el usuario por teclado 3 que marque el usuario por teclado
4 */ 4 */
5 package ejercicio23; 5 package ejercicio23;
6 import [Link]; 6 import [Link];
7 7
8 public class Ejercicio23 { 8 public class Ejercicio23 {
9 9
10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 11
12 Scanner teclado=new Scanner ([Link]); 12 Scanner teclado=new Scanner ([Link]);
13 13
14 int longitud, i; 14 int longitud, i, j;
15 15
16 [Link] ("dame una longitud: "); 16 [Link] ("dame una longitud: ");
17 longitud=[Link](); 17 longitud=[Link]();
18 18
19 for (i=0; i<longitud;i++) { //i recorre las filas 19 for (i=0; i<longitud;i++) { //i recorre las filas
20 [Link] (" * "); //imprimo linea 20
21 } 21 for (j=0; j<longitud-i; j++) { //j recorre las columnas
22 } 22 [Link] (" * ");
23 } 23 }
24
25 [Link] (); //hago salto de linea
* * * * * 26 }
27 //otro tipo de dibujo
* * * * 28 for (i=0; i<longitud;i++) { // muestro espacios
29
* * * 30
31
for (j=0; j<longitud; j++) { //muestro *
[Link] (" ");
* * 32
33
}
for (j=longitud-i-1; j<longitud; j++) {
* 34
35 }
[Link] (" * ");

36 [Link] ();
37 }
38 }
39 }

1.11.-Variables alfanuméricas: cadenas de texto, el tipo de texto en Java es una clase, por lo que dispone de tareas ya
programadas. Se usa String-----variable de tipo cadena.

String dirección; Nombre solo


String nombre=” “; Nombre y valor vacio
String ciudad=”Madrid”; Nombre y valor=madrid

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 10


1.11.1.-Comparación de cadenas:

String nombre1=”juan”;
String nombre2=”luis”;
If ([Link](nombre2));

1 /* 16
2 Programa pide dos nombres y 17 [Link] ("dime un nombre: ");
3 dice si son iguales o no 18 nombre1=[Link]();
4 */ 19
5 package ejercicio24; 20 [Link] ("dime otro nombre: ");
6 import [Link]; 21 nombre2=[Link]();
7 22
8 public class Ejercicio24 { 23 if ([Link](nombre2)) {
9 24 [Link] ("son nombres iguales");
10 public static void main(String[] args) { 25 }
11 26 else {
12 Scanner teclado=new Scanner ([Link]); 27 [Link] ("no son nombres iguales");
13 28 }
14 String nombre1=""; 29 }
15 String nombre2=""; 30 }

1.11.2.-Pedir cadena por teclado: nombre=[Link]();

1.11.3.-Operaciones típicas:
Sacar letra por letra Char letra=[Link](); Saca letra de posición que indiquemos en ()
Sumar cadenas String nueva=ciudad+”azul”; Almacena en nueva=ciudad azul.
Saber si empieza por letra If ([Link](“ma”)) {
Saber si acaba por letra If ([Link](“ma”)) {
Si hay letra en posición empezando principio Int pos=[Link](“d”); Madrid, devuelve 2 a la variable pos.
Si hay letra en posición empezando final Int pos=[Link](“m”); Madrid, devuelve 5 a la variable pos.
Saber número caracteres cadena Int longitud=[Link](); Madrid, devuelve 5 a la variable longitud
String animal=”gato”; Busca la o y la cambia por la a,
Cambiar caracteres
Strin c=[Link](‘o’,’a’); Almacena gata en la variable c.
Remplazar varias letras String c=[Link](“to”,”tito”); Remplaza gato por gatito y lo almacena en c.
Pasar a mayúsculas String m=[Link](); Almacena MADRID en m.
Pasar a minúsculas String m=[Link](); Almacena madrid en m.
String d=” poble llueve “ Quita espacios, “ponfe llueve”
Quitar espacios laterales
String c=[Link]();

1 /* 18 [Link] ("introduzca el salario base: ");


2 Pedir un salario base y un complento, tenemos una dedución del 4,9% 19 salario=[Link]();
3 para la ss y una deducción del 16% de IRPF 20
4 calcular salario neto de un empleado. 21 [Link] ("introduzca el complemento: ");
5 */ 22 complemento=[Link]();
6 package ejercicio25; 23
7 import [Link]; 24 ss= ((salario+complemento)*4.9)/100;
8 25 irpf=((salario+complemento)*16)/100;
9 public class Ejercicio25 { 26 neto=salario+complemento-ss-irpf;
10 27
11 public static void main(String[] args) { 28 [Link] ("deduccion a la ss= " +ss);
12 29 [Link] ("IRPF= "+irpf);
13 Scanner teclado=new Scanner ([Link]); 30 [Link] ("el salario neto es= %.3f",neto);
14 31 //redondeo a 3 decimales
15 //mejor utilizar constantes: final double SS=4,9 32 }
16 double salario, complemento, neto, ss, irpf; 33 }
17

1.12.-Uso del depurador: permite ejecutar el programa paso a paso, como hacer la traza pero en el ordenador.

• Primero se pone un punto de partida (breakpoint) y luego se ejecuta. Se puede ver la ejecución del programa
en tiempo real.
• Los errores en tiempo de programación tienen solución porque el compilador nos avisa:falta un ; falta un {.
• Los errores en tiempo de ejecución son más difíciles de controlar, una excepción es un error en tiempo de
ejecución, es decir mientras el programa está funcionando.

Try {
Opción para controlar código //código a controlar
}
Catch (tipo de expresion) { Ponemos los catch que queramos
//código a controlar
}
Finally { Se puede poner al final, se ejecuta haya fallos o no
}

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 11


Try {
[Link] (“numero?”);
Int numero=[Link]();
[Link](numero);
}
catch ([Link] Excepcion e) {
[Link] (“no escribas letras”);
}

Con try y catch el programa no falla y avisa al usuario que está haciendo mal. Errores hay muchos, pero el
general se llama excepción y siempre debemos ponerlo al final.

catch (Excepcion e) {
[Link] (“error desconocido”);
}

1.12.1.-Que controlar con un try: operaciones de entrada y salida (E/S), teclado, (ficheros, BBDD, Net) estas
obligatorias. Operaciones matemáticas.

1 /* 18 [Link] ("introduzca el denominador 1: ");


2 Programa con control de excepciones en el cualse 19 int denominador1=[Link]();
3 pidan por teclado 2 fracciones y muestre su suma. 20
4 */ 21 [Link] ("introduzca el numerador 2: ");
5 package ejercicio27; 22 int numerador2=[Link]();
6 import [Link]; 23
7 24 [Link] ("introduzca el denominador 2: ");
8 public class Ejercicio27 { 25 int denominador2=[Link]();
9 26
10 public static void main(String[] args) { 27 int resultadonume=(numerador1+numerador2);
11 28 [Link] (+resultadonume+ "/" +denominador1);
12 Scanner teclado=new Scanner ([Link]); 29 }
13 30
14 try { 31 catch (Exception e) {
15 [Link] ("introduzca el numerador 1: "); 32 [Link] ("¡error! no es el mismo denominador");
16 int numerador1=[Link](); 33 }
17 34 }
35 }

Ejercicios:

1 /* 22 num2=[Link]();
2 Pedir 3 numeros positiovos y compruebe que son iguales 23
3 si la entrada fuese 5 5 5 la salida será hay 3 numeros iguales a 5 24 [Link] ("introduzca el tercer numero 3: ");
4 si la entrada fuese 4 6 4, hay dos numeros iguales a 4 25 num3=[Link]();
5 si la entrada fuese 0 1 2, no hay numeros iguales. 26
6 */ 27 if (num1!=num2 && num1!=num3 && num2!=num3) {
7 package ejercicio26; 28 [Link] ("no hay numeros iguales");
8 import [Link]; 29 }
9 30 else if (num1==num2 && num2==num3) {
10 public class Ejercicio26 { 31 [Link] ("hay tres numeros iguales a: " +num1);
11 32 }
12 public static void main(String[] args) { 33 else if (num1==num2) {
13 34 [Link] ("hay dos numeros iguales a: " +num1);
14 Scanner teclado=new Scanner ([Link]); 35 }
15 36 else if (num1==num3) {
16 int num1, num2, num3; 37 [Link] ("hay dos numeros iguales a: " +num1);
17 38 }
18 [Link] ("introduzca el primer numero 1: "); 39 else {
19 num1=[Link](); 40 [Link] ("hay dos numeros iguales");
20 41 }
21 [Link] ("introduzca el segundo numero 2: "); 42 }
43 }

1 /* 14 [Link] ("introduce base: "); TRAZA


2 Pedir un numero y dibujar una 15 int numero=[Link]();
3 piramide de base el numero. 16 int i,j; número I j pantalla
4 */ 17 4 0 0 ---
5 package ejercicio14; 18 for (i=0;i<numero;i++) { 1 1 -*-
6 import [Link]; 19 for (j=0;j<numero-i-1;j++) {
7 20 [Link] (" "); 2 2 -***
8 public class Ejercicio14 { 21 } 4 3 *****
9 22 for (j=0;j<(i*2)-1;j++) {
10 public static void main(String[] args) { 23 [Link] ("*"); 0
11 24 } 0
12 Scanner teclado=new Scanner ([Link]); 25 [Link] ();
13 26 } 1
27 } 2 3
28 }
0 0
1 0
0 1
1 2
0 3
1 4
2 5

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 12


1 /* 1 /* 1 /*
2 Pedir dos numeros enteros por teclado, el primero 2 Programa que pida por teclado 3 numeros enteros 2 Pedir a,b,c y calcular (raiz cuadrada
3 entre 100 y 150 y el según. entre 10 y 50. validarlos. 3 correspondientes a los lados de un triangulo. 3 de 4-c * a elev b) entre c-b
4 mostrar los numeros comprenidos entre ambos 4 el programa nos dira si el tipo de triangulo que es: 4 */
5 visualizando 5 numeros por fila. 5 equilatero, isosceles o escaleno. 5 package ejercicio30;
6 */ 6 */ 6 import [Link];
7 package ejercicio28; 7 package ejercicio29; 7
8 import [Link]; 8 import [Link]; 8 public class Ejercicio30 {
9 9 9
10 public class Ejercicio28 { 10 public class Ejercicio29 { 10 public static void main(String[] args) {
11 11 11
12 public static void main(String[] args) { 12 public static void main(String[] args) { 12 Scanner teclado=new Scanner ([Link]);
13 13 13
14 Scanner teclado=new Scanner ([Link]); 14 Scanner teclado=new Scanner ([Link]); 14 double a, b, c, raiz=0, resultado=0;
15 15 15
16 int num1, num2=0, contador=0; 16 int lado1, lado2, lado3; 16 [Link] ("introduce a: ");
17 17 17 a=[Link]();
18 [Link] ("introduzca un numero 1: "); 18 [Link] ("introduce primer lado del triangulo: "); 18
19 num1=[Link](); 19 lado1=[Link](); 19 [Link] ("introduce b: ");
20 20 20 b=[Link]();
21 //validacion de numeros 21 [Link] ("introduce segundo lado del triangulo: "); 21
22 while (num1<=100 || num1>=150) { 22 lado2=[Link](); 22 [Link] ("introduce c: ");
23 [Link] ("introduzca un numero1: "); 23 23 c=[Link]();
24 num1=[Link](); 24 [Link] ("introduce tercer lado del triangulo: "); 24
25 } 25 lado3=[Link](); 25 if(raiz <0) {
26 [Link] ("introduzca otro numero 2: "); 26 26 [Link] ("error, raiz negativa ");
27 num2=[Link](); 27 if (lado1==lado2 && lado1==lado3 && lado2==lado3) { 27 }
28 28 [Link] ("el triangulo es equilatero"); 28 else {
29 //validacion de numeros 29 } 29 raiz=([Link](4-c));
30 while (num2<=10 || num2>=50) { 30 else if (lado1==lado2 || lado1==lado3 || lado2==lado3) { 30 resultado=(raiz*([Link](a,b)))/(c-b);
31 [Link] ("introduzca otro numero 2: "); 31 [Link] ("el triangulo es isosceles"); 31 }
32 num2=[Link](); 32 } 32 [Link] (resultado);
33 } 33 else 33 }
34 //bucle para visualizar los num en columnas 34 [Link] ("el triangulo es escaleno"); 34 }
35 for (num1=num1; num2<=num1; num1--) { 35 }
36 36 }
37 if (contador==5) {
38 contador=0;
39 [Link] ();
40 }
41 contador++;
42 [Link] (" "+num1);
43 }
44 }
45 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 13


TEMA 3 APLICACIÓN DE ESTRUCTURAS DE ALMACENAMIENTO

Hasta ahora teníamos que para poder guardar un dato usábamos una variable. Las estructuras que vamos a ver se
almacenan en la RAM (memoria volátil).
-variable –arrays –listas –pilas –colas –grafos –arboles.

1.-Arrays.
Los arrays son conjuntos homogéneos de datos identificados por un nombre y diferenciados por un índice. Pueden
tener varias dimensiones:

Unidimensionales (vectores) bidimensionales (tablas) tridimensionales (ambos).

Tienen que ser homogéneos, si en un Array se meten números enteros no se pueden meter ni decimales ni letras.

1.1.-Vectores: (unidimensionales).
Nombre ………. nombre [posición]
0 1 2 3 4 5 6 Índice Se almacena la i

Para crearlos: crear un vector de tamaño 3 para números enteros.


Int v[ ]=new int[3]; v= El tamaño del array final int N=3;
v=nombre - [3]=tamaño 0 1 2 será una constante Int v[ ]=new int[N];

v[0]=8;
int v[ ]={8,4,7}; v[1]=4; v= 8 4 7
v[2]=7;
0 1 2

Crear un Array para 4 ciudades.

v[0]=”soria”;
final int N=4; v[1]=”león”;
v= soria león madrid vigo
String v[ ]=new String[ ]; v[2]=”Madrid”;
v[3]=”vigo”;
0 1 2 3

1.1.1.-Bucle de inicialización de recorrido de un vector de principio a fin.

final int N=5; final int N=5;


int v[]=new int [N]; int v[]=new int [N];
int i; int i;

//defino el recorrido del vector //defino el recorrido del vector por toda su longitud
for (i=0;i<N;i++) { for (i=0;i<[Link];i++) {
//i recorre el vector y coge valores //i recorre el vector y coge valores
v[i]=0; v[i]=0;
} }
[Link] (v[i]); //imprime el vector [Link] (v[i]); //imprime el vector

1 /* 17 int i;
2 Crear vector para 5 numeros enteros, pedir 5 18
3 numeros y cargarlos en el vector. mostrar el 19 //mete en v los numeros pedidos por teclado
4 vector, ponerlo a -1 y mostrarlo otra vez. 20 for (i=0;i<N;i++) {
5 */ 21 [Link] ("introduce 5 numeros: ");
6 package ejercicio31; 22 v[i]=[Link]();;
7 import [Link]; 23 }
8 24 //recorre v y lo imprime
9 public class Ejercicio31 { 25 for (i=0;i<N;i++) {
10 26 [Link] (v[i]);
11 public static void main(String[] args) { 27 }
12 28 //pone el valor de v a -1
13 Scanner teclado=new Scanner ([Link]); 29 for (i=0;i<N;i++) {
14 30 v[i]=-1;
15 final int N=5; 31 [Link] (v[i]);
16 int v[]=new int [N]; 32 }
33 }
34 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 14


1 /* 1 /* 1 /*
2 Crear vector para 5 numeros enteros, pedir 5 2 Cargar un array int de tamaño 4 y luego mostrarlo por 2 Pedir una palabra por teclado y decir si
3 numeros y cargarlos en el vector. 3 pantalla de fin a principio y solo los elementos de 3 es palíndroma o no. abba
4 mostrar el mayor. 4 posiciones pares. 4 */
5 */ 5 */ 5 package ejercicio37;
6 package ejercicio32; 6 package ejercicio33; 6
7 import [Link]; 7 import [Link]; 7 import [Link];
8 8 8
9 public class Ejercicio32 { 9 public class Ejercicio33 { 9 public class Ejercicio37 {
10 10 10
11 public static void main(String[] args) { 11 public static void main(String[] args) { 11 public static void main(String[] args) {
12 12 12
13 Scanner teclado=new Scanner ([Link]); 13 Scanner teclado=new Scanner ([Link]); 13 Scanner teclado=new Scanner ([Link]);
14 14 14
15 final int N=5; 15 final int N=4; 15 [Link] ("escribe una palabra: ");
16 int v[]=new int [N]; 16 int v[]=new int [N]; //creacion de valiables y array 16 String palabra=[Link]();
17 int i; 17 int i; 17
18 18 18 int i=0;
19 for (i=0;i<N;i++) { 19 for (i=0;i<N;i++) { //recorrido para el array 19 int j=[Link]()-1; //comienza en la letra
20 [Link] ("introduce 5 numeros: "); 20 [Link] ("introduce 4 numeros: "); 4-1
21 v[i]=[Link](); 21 v[i]=[Link](); //los datos introducidos van al 20
22 } array 21 while ([Link](i)==[Link](j)) {
23 22 } 22 i++; //muevo las posiciones de i y j
24 int mayor=Integer.MIN_VALUE; 23 for (i=N-1;i>=0;i--) { //recorrido de busqueda en el array 23 j--;
25 for (i=1;i<N;i++) { //el bucle recorre el array 24 if (i%2==0) //mira si el contenido de la posicion de i 24 }
26 es par 25 if (i>=j) {
27 if (v[i]>mayor) { //si el valor de v es mayor que 25 [Link] (" "+v[i]); //salida de datos 26 [Link] ("palíndroma");
mayor 26 } 27 }
28 mayor=v[i]; //lo mete en mayor 27 } 28 else {
29 } 28 } 29 [Link] ("no palíndroma");
30 } 30 }
31 [Link] (mayor); 31 }
32 } 32 }
33 }

1 /* 1 /* 1 /*
2 crear array int tamaño 10 y cargarlo de: 2 Pedir las notas de 5 alumnos por teclado, despues 2 Cargar dos vectores de 3 numeros cada
3 los numeros del 1 al 10, todo 5 3 mostrarlar y ademas indicar la mayor, menor 3 uno de ellos. despues calcular el vector
4 los pares del 10 al 30 4 y media. Mostrar el resultado con formato. 4 suma. Despues comparar los vectores.
5 aleatorios entre 1 y 6, y entre 100 y 150 5 */ 5 */
6 */ 6 package ejercicio36; 6 package ejercicio38;
7 package ejercicio35; 7 7 import [Link];
8 import [Link]; 8 import [Link]; 8
9 import [Link]; 9 9 public class Ejercicio38 {
10 10 public class Ejercicio36 { 10
11 public class Ejercicio35 { 11 11 public static void main(String[] args) {
12 12 public static void main(String[] args) { 12
13 public static void main(String[] args) { 13 13 Scanner teclado=new Scanner ([Link]);
14 14 Scanner teclado=new Scanner ([Link]); 14
15 Scanner teclado=new Scanner ([Link]); 15 15 final int N=3;
16 Random aleatorio=new Random(); 16 final int N=5; 16 int v1[]=new int [N];
17 17 double v[]=new double [N]; 17 int v2[]=new int [N];
18 final int N=10; 18 int i; 18 int suma[]=new int [N];
19 final int M=30; 19 double suma=0, mayor, menor; 19 int i;
20 int i=0; 20 20
21 int num=10; 21 //para calcular el valor mayor de un array 21 for (i=0;i<N;i++) { //recorrido para vector
22 22 mayor=Double.MIN_VALUE; 22 [Link] ("introduce 3 num para vector 1: ");
23 int t[]=new int [N]; //cargo del 1 al 10 23 //para calcular el valor menor de un array 23 v1[i]=[Link](); //datos van al vector
24 for (i=0;i<N;i++) { 24 menor=Double.MAX_VALUE; 24 }
25 t[i]=i+1; 25 25 for (i=0;i<N;i++) { //recorrido para vector
26 } 26 for (i=0;i<N;i++) { //defino el recorrido 26 [Link] ("introduce 3 num para vector 2: ");
27 for (i=0;i<N;i++) { 27 [Link] ("introduce 5 notas: "); 27 v2[i]=[Link](); //datos van al vector
28 [Link](t[i]+" "); 28 v[i]=[Link](); //mete el num. en v[i] 28 }
29 } 29 } 29 for (i=0;i<N;i++) {
30 [Link](); 30 30 suma[i]=v1[i]+v2[i];
31 31 for (i=0;i<N;i++) { 31 }
32 for (i=0;i<N;i++) { //todo a 5 32 [Link] (" "+v[i]); 32 for (i=0;i<N;i++) {
33 t[i]=5; 33 } 33 [Link] ("la suma es: "+suma[i]);
34 [Link](t[i]+" "); 34 [Link] (); 34 }
35 } 35 35 //bucle que recorre pero no hace nada.
36 [Link](); 36 for (i=0;i<N;i++){ //para la media de notas 36 //va comparando el contenido de los vectores
37 37 suma=suma+v[i]; 37 for (i=0;i<N && v1[i]==v2[i];i++) {
38 int u[]=new int [M]; //pares del 10 al 30 38 38 }
39 for (i=10;i<M;i++) { 39 for (i=0;i<N;i++) { //el bucle recorre el array 39 if (i==N){ //si la i llega a N, al final...todo coincide...
40 u[i]=i+1; 40 suma=suma+v[i]; 40 [Link] ("los vectores son iguales");
41 if (u[i]%2==0) { 41 if (v[i]>mayor) { //si el valor de v es mayor 41 }
42 [Link](u[i]+" "); 42 mayor=v[i]; //lo mete en mayor 42 else {
43 } 43 } 43 [Link] ("los vectores no son iguales");
44 } 44 if (v[i]<menor) { //si el valor de v es menor 44 }
45 [Link](); 45 menor=v[i]; //lo mete en menor 45 }
46 46 } 46 }
47 int v[]=new int [N]; //aleatorio del 1 al 6 47 }
48 for (i=0;i<N;i++) { 48 [Link] ();
49 v[i]=[Link](6)+1; 49 [Link] ("la nota mayor es= "+mayor);
50 [Link](v[i]+" "); 50 [Link] ("la menor es= "+menor);
51 } 51 [Link] ("la media es= "+(suma/N));
52 [Link](); 52 }
53 53 }
54 int x[]=new int [N]; //aleatorio del 100 al 150 54 }
55 for (i=0;i<N;i++) {
56 x[i]=[Link](150-100+1)+100;
57 [Link](x[i]+" ");
58 }
59 }
60 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 15


EJERCICIO TRAZA
1 /* N i suma pares
2 Dado un array, calcula la suma de los 3 0 0 0
3 elementos y cuantos son pares.
4 */ 1 4 1
5 package ejercicio34; 2 12 2
6 import [Link];
7 3 15
8 public class Ejercicio34 { vector
9
v= 4 8 3
10 public static void main(String[] args) {
11 índice 0 1 2
12 Scanner teclado=new Scanner ([Link]); V[i] V[i] V[i]
13
14 final int N=3; //para poner limite al recorrido en el for
15 int v[]={4,8,3}; //valores creados para el vector
16 int i, suma=0, pares=0;
17
18 for (i=0;i<N;i++) { //recorrido de busqueda en el vector
19 suma=suma+v[i]; //acumulador
20 //mira si el contenido de la posicion de i es par
21 if (v[i]%2==0) {
22 pares++;
23 }
24 }
25 [Link] ("pares: "+pares);
26 [Link] ("suma de numeros: "+suma);
27 [Link] ("tamaño del vector: "+i);
28 }
29 }

1.1.2.-Algoritmos de búsqueda en un vector.

NO REPETIDO NO REPETIDO REPETIDO EN VECTOR


EN VECTOR DESORDENADO EN VECTOR ORDENADO
public static void main(String[] args) { public static void main(String[] args) { public static void main(String[] args) {

int v[]={5,8,1,3,9}; int v[]={5,8,10,13,19}; int v[]={5,3,1,3,2};


int dato=3; int dato=10; int dato=3;
int i; int i; int i;
boolean encontrado=false;
//recorr. hasta el final y que v[i] distinto de dato //recorr. hasta el final y que v[i] menor de dato
for (i=0;i<[Link] && v[i]!=dato; i++); for (i=0;i<[Link] && v[i]<dato; i++); //recorr. hasta el final y que v[i] menor de dato
//el bucle llega al final y no lo encuentra //el bucle llega al final y no lo encuentra for (i=0;i<[Link]; i++) {
if (i==[Link]) { if (i==[Link]) { //el bucle llega al final y no lo encuentra
[Link] ("no encontrado"); [Link] ("no encontrado"); if (v[i]==dato) {
} } [Link] ("encontrado");
else { else if (v[i]==dato) { encontrado=true;
[Link] ("encontrado"); [Link] ("encontrado"); }
} } }
} else { //cuando i no llega al final y v[i]>dato if (encontrado==false) {
[Link] ("no encontrado"); [Link] ("no encontrado");
} }
} }
v= 5 8 1 3 9 v= 5 8 1 3 9 v= 5 8 1 3 9
índice 0 1 2 3 4 índice 0 1 2 3 4 índice 0 1 2 3 4

1 /* 28 for (i=0;i<N;i++){
2 Programa quiniela de futbol el programa pide 29 int n=[Link](3)+1; //se inventa numeros entre el 3 y el 1.
3 15 resultados que almacenaremos en un vector. 30 switch(n) {
4 después el ordenador se inventa una quiniela 31 case 1: resultado[i]="1"; break; //para el caso de ser 1 dibuja una 1
5 de resultados (en otro vector) y muestra los aciertos. 32 case 2: resultado[i]="2"; break; //para el caso de ser 2 dibuja una 2
6 */ 33 case 3: resultado[i]="x"; break; //para el caso de ser 3 dibuja una x
7 package ejercicio39; 34 }
8 import [Link]; 35 }
9 import [Link]; 36 [Link]("quiniela: ");// imprime la quiniela
10 37 for (i=0;i<N;i++) {
11 public class Ejercicio39 { 38 [Link] (quiniela[i]+" ");
12 39 }
13 public static void main(String[] args) { 40 [Link](); //salto de linea
14 41 [Link]("resultado: "); //imprime el resultado
15 Scanner teclado=new Scanner ([Link]); 42
16 Random aleatorio=new Random(); 43 for (i=0;i<N;i++) { //defino el recorrido
17 44 [Link](resultado[i]+" "); //mensaje pantalla
18 final int N=15; 45 }
19 String quiniela[]=new String [15]; //creo el vector de quiniela que meto 46 for (i=0;i<N;i++) { //defino el recorrido
20 String resultado[]=new String [15]; //creo vector que se inventa 47 if (resultado[i].equals(quiniela[i])){ //comparo los dos vectores
21 int contador=0; 48 contador++; //uso contador para que vaya contando aciertos
22 int i; 49 }
23 50 }
24 for (i=0;i<N;i++) { //defino el recorrido 51 [Link](); //salto de linea
25 [Link] ("resultado partido: "); //mensaje pantalla 52 [Link] ("los aciertos son " +contador);
26 quiniela[i]=[Link]();//mete el numero en quiniela[i] 53 }
27 } 54 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 16


1.1.3.-Algoritmos de ordenación.

Existen varias técnicas: burbuja, burbuja mejorado, selección, inserción, montones, QuickSort.

METODO BURBUJA TRAZA


public static void main(String[] args) { i j Aux. pantalla
0 0 5 5,9,1,3,8
int v[]={9,5,1,3,8}; 1 1 5,1,9,3,8
int i,j,aux;
2 3 5,1,3,9,8
//defino el recorrido, todo el vector 3 8 5,1,3,8,9
for (i=0;i<[Link]-1;i++) { 4
for(j=0;j<[Link]-i-1;j++) { 1 0 1 1,5,3,8,9
if (v[j+1]<v[j]) { //5 es menos que 9? 1 3 1,3,5,8,9
aux=v[j+1];
2
v[j+1]=v[j]; //intercambia las posiciones
v[j]=aux; 3
} vector
} v= 9 5 1 3 8
} índice 0 1 2 3 4
for (i=0;i<[Link];i++) //imprimo vector ordenado
V[i] V[i] V[i] V[i] V[i]
[Link] (v[i]+" ");
}
}

METODO BURBUJA MEJORADO TRAZA


public static void main(String[] args) { i j Aux. pantalla
0 0 5 5,9,1,3,8
int v[]={9,5,1,3,8}; //metodo burbuja mejorado 1 1 5,1,9,3,8
int i,j,aux;
2 3 5,1,3,9,8
boolean haycambio=true;
3 8 5,1,3,8,9
//defino el recorrido, todo el vector 4
for (i=0;i<[Link]-1 && haycambio==true;i++) { 1 0 1 1,5,3,8,9
haycambio=false; 1 3 1,3,5,8,9
for(j=0;j<[Link]-i-1;j++) {
2
if (v[j+1]<v[j]) { //5 es menos que 9?
aux=v[j+1]; 3
v[j+1]=v[j]; //intercambia las posiciones vector
v[j]=aux; v= 9 5 1 3 8
haycambio=true; índice 0 1 2 3 4
}
V[i] V[i] V[i] V[i] V[i]
}
}
for (i=0;i<[Link];i++) //imprimo vector ordenado
[Link] (v[i]+" ");
}
}

METODO SELECCIÓN TRAZA


public static void main(String[] args) { i j men pos tmp pantalla
0 1 9 0 9 1,5,9,3,8
int v[]={9,5,1,3,8};
2 5 1
int i,j,menor,pos,tmp;
3 1 2
//va cargando el menor y colocandolo 4
//defino el recorrido, todo el vector 5
//tomamos como menor el 1 de los elem por ordenar 1 2 5 1 5 1,3,9,5,8
for (i=0;i<[Link]-1;i++) {
3 3 3
menor=v[i];
pos=i; 4
5
//buscamos en el resto del array elem < que el actual 2 3 9 2 9 1,3,5,9,8
for (j=i+1;j<[Link];j++) { 4 5 3
if (v[j]<menor) {
5
menor=v[j];
pos=j; 3 4 9 3 9 1,3,5,8,9
} 8 4
} vector
//si hay alguno < se intercambia v= 9 5 1 3 8
if (pos!=i) {
índice 0 1 2 3 4
tmp=v[i];
v[i]=v[pos]; V[i] V[i] V[i] V[i] V[i]
v[pos]=tmp;
}
}
for (i=0;i<[Link];i++) //imprimo vector ordenado
[Link] (v[i]+" ");
}
}

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 17


1 /* 24 final int N=7;
2 Dado un vector, ordenarlo de forma que los 25 int ordenado[]=new int[N]; //creo un vector nuevo para meter los numeros ordenados
3 impares queden ordenados al principio y los 26 j=0; //uso j para el recorrido en el vector ordenado
4 pares al final. 27
5 */ 28 for (i=0;i<[Link];i++) //recorro el vector v
6 package ejercicio44; 29 if (v[i]%2!=0) { //y busco los numeros impares
7 30 ordenado[j]=v[i]; //voy poniendo los impares encontrados en el vector nuevo
8 public class Ejercicio44 { 31 j++; //avanzo casilla
9 32 }
10 public static void main(String[] args) { 33 for (i=0;i<[Link];i++) //recorro el vector v
11 34 if (v[i]%2==0) { //y busco los numeros pares
12 int v[]={5,8,9,4,3,1,2}; 35 ordenado[j]=v[i]; //voy poniendo los impares encontrados en el vector nuevo
13 int i=0,j,aux; 36 j++; //avanzo casilla
14 37 }
15 for (i=0;i<[Link]-1;i++) { //metodo burbuja 38 for (i=0;i<[Link];i++) //saco por pantalla el vector ordenado
16 for(j=0;j<[Link]-i-1;j++) { 39 [Link] (ordenado[i]+" "); //mensaje pantalla
17 if (v[j+1]<v[j]){ 40 }
18 aux=v[j+1]; 41 }
19 v[j+1]=v[j];
20 v[j]=aux;
21 }
22 }
23 }

1.1.4.-Creación de menus.

1 /* 28 for (i=0;i<N;i++){
2 Crear una agenda con arrays. 44 case 2: //consulta
3 */ 45 [Link] ("introduce un nombre: ");
4 package ejercicio42; 46 String nombre=[Link](); //creo variable para pedir nombre
5 import [Link]; 47 for (i=0;i<pos && !agenda[i].equals(nombre);i++); //si no agenda de i = nombre
6 48 if (i==pos) { //tambien vale agenda[i].equals(nombre)==false;
7 public class Ejercicio42 { 49 [Link] ("no existe");
8 50 }
9 public static void main(String[] args) { 51 else {
10 52 [Link] ("existe en la posicion: "+i);
11 Scanner teclado=new Scanner ([Link]); 53 }
12 54 break;
13 int opcion=-1; 55
14 int pos=0; 56 case 3: //listado
15 int i; 57 [Link] ("LISTADO DE LA AGENDA");
16 final int N=10; 58 for (i=0;i<pos;i++) //creo pos para que recorra hasta donde hay datos
17 String agenda[]=new String[N]; 59 [Link] (agenda[i]+" ");
18 60 [Link] (); //hace recorrido por bucle y saca lo que hay en el
19 while(opcion!=5) { 61 break;
20 [Link]("==MENU=="); 62
21 [Link]("1. alta"); 63 case 4: //modificar
22 [Link]("2. consulta"); 64 [Link] ("introduce un nombre: ");
23 [Link]("3. listado"); 65 nombre=[Link](); //pedir nombre
24 [Link]("4. modificar"); 66 for (i=0;i<pos && !agenda[i].equals(nombre);i++); //si no agenda de i = nombre
25 [Link]("5. salir"); 67 if (i==pos) { //tambien vale agenda[i].equals(nombre)==false;
26 [Link](); 68 [Link] ("no existe");
27 69 }
28 [Link] ("elige una opcion: "); 70 else {
29 opcion=[Link](); 71 [Link] ("dame nuevo nombre: ");
30 String tmp=[Link](); 72 String nom=[Link](); //creo variable para poner en v. nuevo nombre
31 73 agenda[i]=nom; //mete en vector variable nom
32 switch (opcion) { 74 }
33 case 1: //alta 75 } //cierro el for
34 if (pos==N){ //control de capacidad de la agenda 76 } //cierro el while
35 [Link] ("agenda llena!!"); 77 }
36 } 78 }
37 else {
38 [Link] ("dame un nombre: ");
39 agenda[pos]=[Link](); //pide nombre a meter en agenda
40 pos++;
41 }
42 break;
43

1.1.5.-Conversión de datos:

Conversión--casting
int n=5; doublé a=(double)n; Pasa n a double y lo guarda en a.
doublé c=4.7; int p=(double)n; Pasa c a entero y lo guarda en p.
CONVERTIR DE CADENA A NUMERO
String num=”483”; Int n=[Link](num); Pasa el “483” texto a n como número.
String num=”15.84”; double n=[Link](num); Pasa “15.84” texto a n como número.
CONVERTIR DE NUMERO A CADENA
Int num=84; String num=[Link](n); Pasa el numero 84 a num como texto “84”.
double n=5.3; String num=[Link](n); Pasa el numero 5.3 a num como texto “5.3”.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 18


1.1.6.-Encriptación: consiste en encriptar algo. Algorítmo del Cesar, onsiste en desplazarse por la tabla ASCII las
posiciones de las letras que le digamos.
1 /* 15 String palabra=[Link](); //creo caja y pido palabra
2 Programa que encripta una palabra o frase. 16
3 */ 17 final int N=3;
4 package ejercicio43; 18
5 19 String encriptada=""; //creo la caja para la palabra encriptada
6 import [Link]; 20
7 21 for (int i=0;i<[Link]();i++) { //recorrido por el vector
8 public class Ejercicio43 { 22 int c=[Link](i); //convierto letra a numero ascii y guardo en c
9 23 c=c+N; //a c le sumo 3 posiciones en la tabla ascii (c=c-N, desencripta)
10 public static void main(String[] args) { 24 encriptada=encriptada+(char) c; //convierte el numero ascii a letra
11 25 }
12 Scanner teclado=new Scanner ([Link]); 26 [Link]("la palabra encriptada es: "+encriptada);
13 27 }
14 [Link] ("dame una palabra: "); 28 }

1.1.7.-Busqueda binaria: búsqueda en vectores. Es necesario que el vector esté ordenado, parte el vector en
mitades y va buscando hasta encontrar el dato.

El objetivo es no recorrer datos ineserarios en el vector que consumen tiempo.

BUSQUEDA BINARIA TRAZA


1 /* dato n centro inf sup encontrado
2 Dado el siguiente vector encontrar el dato. 5 7 3 0 6 false
3 */
4 package ejercicio45; 1 2 true
5 vector
6 public class Ejercicio45 {
7 v= 1 5 9 15 34 67 90
8 public static void main(String[] args) { índice 0 1 2 3 4 5 6
9 V[i] V[i] V[i] V[i] V[i] V[i] V[i]
10 int v[]={1,5,9,15,34,67,90};
11 int dato=5;
12
13 int n=[Link];
14 int centro,inf=0, sup=n-1;
15 boolean encontrado=false;
16
17 while (inf<=sup && encontrado==false) { //si no lo encuentras
18 centro=(sup+inf)/2; //divides el vector en 2
19 if (v[centro]==dato) { //y sigues buscando
20 encontrado=true; //hasta que lo encuentres
21 }
22 else if (dato< v[centro]) {
23 sup=centro-1;
24 }
25 else {
26 inf=centro+1;
27 }
28 }
29 if (encontrado==false) {
30 [Link] ("no encontrado");
31 }
32 else {
33 [Link] ("encontrado");
34 }
35 }
36 }

1.1.8.-Operaciones con vectores: (ya programados) . Solo para arrays de una dimensión.

Debajo del nombre del ejercicio poner: [Link];

RELLENAR VECTORES COMPARAR VECTORES


[Link](v,0); Carga un vector con ceros. Boolean iguales=[Link](v1,v2; Mete en iguales si es true o false.

HACER COPIA DE VECTORES ORDENA VECTORES


int v[ ]={5,8,4,3}; Copia el vector v y lo mete en n. [Link](v); Ordena vector con
int n[ ]=new int[4]; V=vector. [Link]=tamaño Método Quicksort.
n=[Link](v,[Link]);

BUSQUEDA BINARIA
Saca -1 si no lo encuentra o
Int pos=[Link](v,5); La posición del dato si lo encuentra.
V=vector. 5=dato a buscar

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 19


1.1.9.-Algoritmo para introducir dato en medio de un vector o eliminar dato.

INTRODUCIR DATO EN MEDIO DE UN VECTOR ELIMINAR DATO DE UN VECTOR


public static void main(String[] args) { public static void main(String[] args) {

int v[]={5,4,6,9,0,0,0}; //vector inicial int v[]={5,4,6,9,0,0,0}; //vector inicial


int i; int i;

for (i=0;i<[Link]; i++) { for (i=0;i<[Link]; i++) {


[Link] (v[i]+" "); [Link] (v[i]+" ");
} }
[Link] (); [Link] ();

int dato=56; //dato a sustituir int posicion=2; //posicion a borrar


int posicion=2; //posicion a sustituir
//la casilla 5 vale la 4, la 3 vale la 2...
//la casilla 5 vale la 6, la 4 vale la 5... for (i=posicion;i<[Link]-1; i++) {
for (i=[Link]-2;i>=posicion; i--) { v[i]=v[i+1];
v[i+1]=v[i]; }
} //meto un 0 en el espacio final
v[posicion]=dato; v[[Link]-1]=0;

for (i=0;i<[Link]; i++) { //imprimo vector resultante //imprimo vector resultante


[Link] (v[i]+" "); for (i=0;i<[Link]; i++) {
} [Link] (v[i]+" ");
} }
}
v= 5 4 6 9 0 0 0 v= 5 4 6 9 0 0 0
índice 0 1 2 3 4 5 6 índice 0 1 2 3 4 5 6
v[i+1] v[i] v[i] v[i+1]

Introducimos el 56 donde el 6 Movemos el 9 hasta el 6.


Hacemos hueco desplazando dato a la derecha. Desplazamos datos a la izquierda para sobreescribir dato a borrar.
Después insertamos el numero. Después insertamos 0 al final.

1 /* 113 haycambio=true; //metodo burbuja mejorado


2 Creamos 3 vectores, los cargamos de aleatorios. 114 //defino el recorrido, todo el vector
3 Creo 3 vectores para las pruebas de cada tamaño. 115 for (i=0;i<[Link]-1 && haycambio==true;i++) {
4 Copio v1 en prueba 1, ordeno por burbuja. 116 haycambio=false;
5 Copio v2 en prueba 2, ordeno por seleccion. 117 for(j=0;j<[Link]-i-1;j++) {
6 Copio v3 en prueba 3, ordeno por QuickSort. 118 if (prueba2[j+1]<prueba2[j]){
7 */ 119 aux=prueba2[j+1];
8 package ejercicio46; 120 prueba2[j+1]=prueba2[j];
9 import [Link]; 121 prueba2[j]=aux;
10 import [Link]; 122 haycambio=true;
11 123 }
12 public class Ejercicio46 { 124 }
13 125 }
14 public static void main(String[] args) { 126
15 127 fin4=[Link](); //para cronometro
16 Random aleatorio=new Random(); 128 [Link]("Tiempo: " +(fin4-inicio4)+" ms");
17 129
18 final int tam1=10000; //tamaño del vector v1 130 prueba2=[Link](v2,[Link]); //copio vector en prueba2
19 final int tam2=100000; //tamaño del vector v2 131
20 final int tam3=1000000; //tamaño del vector v3 132 long inicio5,fin5; //arranca cronometro
21 133 inicio5=[Link]();
22 int v1[]=new int [tam1]; 134
23 int v2[]=new int [tam2]; 135 for (i=0;i<[Link]-1;i++) { //metodo seleccion
24 int v3[]=new int [tam3]; 136 menor=prueba2[i];
25 137 pos=i;
26 int prueba1[]=new int[tam1]; 138
27 int prueba2[]=new int[tam2]; 139 for (j=i+1;j<[Link];j++) {
28 int prueba3[]=new int[tam3]; 140 if (prueba2[j]<menor) {
29 int i,j,aux,menor, pos,tmp; 141 menor=prueba2[j];
30 142 pos=j;
31 for (i=0;i<tam1;i++) { //creo aleatorios en vector 1 143 }
32 v1[i]=[Link](10000)+1; 144 }
33 // [Link](v1[i]+" "); //muestra desactivada 145 if (pos!=i) {
34 } 146 tmp=prueba2[i];
35 for (i=0;i<tam2;i++) { //creo aleatorios en vector 2 147 prueba2[i]=prueba2[pos];
36 v2[i]=[Link](100000)+1; 148 prueba2[pos]=tmp;
37 // [Link](v2[i]+" "); //muestra desactivada 149 }
38 } 150 }
39 for (i=0;i<tam3;i++) { //creo aleatorios en vector 3 151
40 v3[i]=[Link](1000000)+1; 152 fin5=[Link](); //para cronometro
41 // [Link](v3[i]+" "); //muestra desactivada 153 [Link]("Tiempo: " +(fin5-inicio5)+" ms");
42 } 154
43 155 prueba2=[Link](v2,[Link]); //copio vector en prueba2
44 //prueba para array de 10.000 156
45 157 long inicio6,fin6; //arranca cronometro
46 prueba1=[Link](v1,[Link]); //copio vector en prueba1 158 inicio6=[Link]();
47 [Link]("el tiempo para array de 10.000 es: "); 159
48 160 [Link](prueba2); //metodo quicksort
49 long inicio1,fin1; //arranca cronometro 161
50 inicio1=[Link](); 162 fin6=[Link](); //para cronometro
51 163 [Link]("Tiempo: " +(fin6-inicio6)+" ms");
52 boolean haycambio=true; //metodo burbuja mejorado 164
53 //defino el recorrido, todo el vector 165 //prueba para array de 1.000.000
54 for (i=0;i<[Link]-1 && haycambio==true;i++) { 166
55 haycambio=false; 167 prueba3=[Link](v3,[Link]); //copio vector en prueba3
56 for(j=0;j<[Link]-i-1;j++) { 168 [Link]();
57 if (prueba1[j+1]<prueba1[j]){ 169 [Link]("el tiempo para array de 1.000.000 es: ");

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 20


58 aux=prueba1[j+1]; 170
59 prueba1[j+1]=prueba1[j]; 171 long inicio7,fin7; //arranca cronometro
60 prueba1[j]=aux; 172 inicio7=[Link]();
61 haycambio=true; 173
62 } 174 haycambio=true; //metodo burbuja mejorado
63 } 175 //defino el recorrido, todo el vector
64 } 176 for (i=0;i<[Link]-1 && haycambio==true;i++) {
65 177 haycambio=false;
66 fin1=[Link](); //para cronometro 178 for(j=0;j<[Link]-i-1;j++) {
67 [Link]("Tiempo: " +(fin1-inicio1)+" ms"); 179 if (prueba3[j+1]<prueba3[j]){
68 180 aux=prueba3[j+1];
69 prueba1=[Link](v1,[Link]); //copio vector en prueba1 181 prueba3[j+1]=prueba3[j];
70 182 prueba3[j]=aux;
71 long inicio2,fin2; //arranca cronometro 183 haycambio=true;
72 inicio2=[Link](); 184 }
73 185 }
74 for (i=0;i<[Link]-1;i++) { //metodo seleccion 186 }
75 menor=prueba1[i]; 187
76 pos=i; 188 fin7=[Link](); //para cronometro
77 189 [Link]("Tiempo: " +(fin7-inicio7)+" ms");
78 for (j=i+1;j<[Link];j++) { 190
79 if (prueba1[j]<menor) { 191 prueba3=[Link](v3,[Link]); //copio vector en prueba3
80 menor=prueba1[j]; 192
81 pos=j; 193 long inicio8,fin8; //arranca cronometro
82 } 194 inicio8=[Link]();
83 } 195
84 if (pos!=i) { 196 for (i=0;i<[Link]-1;i++) { //metodo seleccion
85 tmp=prueba1[i]; 197 menor=prueba3[i];
86 prueba1[i]=prueba1[pos]; 198 pos=i;
87 prueba1[pos]=tmp; 199
88 } 200 for (j=i+1;j<[Link];j++) {
89 } 201 if (prueba3[j]<menor) {
90 202 menor=prueba3[j];
91 fin2=[Link](); //para cronometro 203 pos=j;
92 [Link]("Tiempo: " +(fin2-inicio2)+" ms"); 204 }
93 205 }
94 prueba1=[Link](v1,[Link]); //copio vector en prueba1 206 if (pos!=i) {
95 207 tmp=prueba3[i];
96 long inicio3,fin3; //arranca cronometro 208 prueba3[i]=prueba3[pos];
97 inicio3=[Link](); 209 prueba3[pos]=tmp;
98 210 }
99 [Link](prueba1); //metodo quicksort 211 }
100 212
101 fin3=[Link](); //para cronometro 213 fin8=[Link](); //para cronometro
102 [Link]("Tiempo: " +(fin3-inicio3)+" ms"); 214 [Link]("Tiempo: " +(fin8-inicio8)+" ms");
103 215
104 //prueba para array de 100.000 216 prueba3=[Link](v3,[Link]); //copio vector en prueba3
105 217
106 prueba2=[Link](v2,[Link]); //copio vector en prueba2 218 long inicio9,fin9; //arranca cronometro
107 [Link](); 219 inicio9=[Link]();
108 [Link]("el tiempo para array de 100.000 es: "); 220
109 221 [Link](prueba3); //metodo quicksort
110 long inicio4,fin4; //arranca cronometro 222
111 inicio4=[Link](); 223 fin9=[Link](); //para cronometro
112 224 [Link]("Tiempo: " +(fin9-inicio9)+" ms");
225 }
226 }

1 /*
2 Crear vector de tamaño 10. pedir numeros entre
3 0 y 9 (validarlos) hasta que el usuario meta -1. mostrar
4 cuantas veces ha introucido cada numero.
5 */
6 package ejercicio48;
7 import [Link];
8 import [Link];
9
10 public class Ejercicio48 {
11
12 public static void main(String[] args) {
13
14 Scanner teclado=new Scanner ([Link]);
15
16 final int N=10;
17 int v1[]=new int [N];
18 [Link](v1,0); //cargo el vector de 0
19 int num=0,i;
20
21 [Link]("introduzca numero entre 0 y 9: "); //validacion
22 num=[Link]();
23 while(num<-1 || num>9) { //validacion
24 [Link]("introduzca numero entre 0 y 9: ");
25 num=[Link]();
26 }
27
28 while (num!=-1) { //mientras que no sea -1
29 v1[num]++; ////mete el numero en la casilla que le corresponde
30
31 [Link]("introduzca numero entre 0 y 9: "); //validacion
32 num=[Link]();
33 while(num<-1 || num>9) { //validacion
34 [Link]("introduzca numero entre 0 y 9: ");
35 num=[Link]();
36 }
37 }
38 for (i=0;i<[Link];i++) { //resultados en pantalla
39 [Link]("numero "+i+" se escribió: "+v1[i]+"");
40 }
41 }
42 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 21


1.2.-Tablas: (bidimensionales).
0 1
0 1 4 final int FIL=3; Carga de datos
1 3 8 final int COL=2; en tabla.
2 9 5 int tabla [ ] [ ]=new int [FIL] [COL];
tabla [0][0]=1;
tabla [0][1]=4; i= recorre filas.
tabla [1][0]=3; j=recorre columnas.
tabla [1][1]=8;
tabla [2][0]=9;
tabla [2][1]=5;

TABLA 3X2 TABLA 2X3


public static void main(String[] args) { public static void main(String[] args) {

final int FIL=3; final int FIL=3;


final int COL=2; final int COL=2;
int tabla[][]={{1,4},{3,8},{9,5},}; int tabla[][]={{1,4},{3,8},{9,5},};
int i,j; int i,j;
//buble para recorrido de tabla //buble para recorrido de tabla
for (i=0;i<FIL;i++){ //hago recorrido por las filas for (j=0;j<COL;j++){
for (j=0;j<COL;j++){ //recorrido por las columnas for (i=0;i<FIL;i++){
[Link](tabla[i][j]+" "); [Link](tabla[i][j]+" ");
} }
[Link](); [Link]();
} }
} }
} }
1 4 1 3 9
3 8 4 8 5
9 5

1 /* 1 /*
2 Crear una tabla 3x2, cargarla por teclado, 2 Dada una tabla, cargarla a mano, de 3x4,
3 mostrarla. Mostrar valores de las filas pares. 3 mostrar la suma de cada fila, cuantos
4 */ 4 numeros pares tiene y cual el mayor.
5 package ejercicio50; 5 */
6 import [Link]; 6 package ejercicio51;
7 7
8 public class Ejercicio50 { 8 public class Ejercicio51 {
9 9
10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 11
12 Scanner teclado=new Scanner ([Link]); 12 final int FIL=3;
13 13 final int COL=4;
14 final int FIL=3; 14 int tabla[][]={{1,4,5,2},{3,8,7,7},{9,5,2,1},};
15 final int COL=2; 15 int i,j,sumafila=0;
16 int tabla[][]=new int [FIL] [COL]; 16 int mayor=Integer.MIN_VALUE;
17 int i,j; 17 int pares=0;
18 18
19 //buble para pedir datos de tabla 19 //buble para recorrido de tabla
20 for (i=0;i<FIL;i++) { //hago recorrido por las filas 20 for (i=0;i<FIL;i++){ //hago recorrido por las filas
21 for (j=0;j<COL;j++) { //recorrido por las columnas 21 sumafila=0;
22 [Link]("introduce num de fila: "); 22 for (j=0;j<COL;j++){ //recorrido por las columnas
23 tabla[i][j]=[Link](); 23 [Link](tabla[i][j]+" ");
24 } 24 }
25 [Link](); 25 [Link]();
26 } 26 for (j=0;j<COL;j++){ //hago recorrido por las columnas
27 //buble para visualizar datos de tabla 27 if (tabla[i][j]>mayor){ //para el numero mayor
28 for (i=0;i<FIL;i++) { //hago recorrido por las filas 28 mayor=(tabla[i][j]);
29 for (j=0;j<COL;j++) { //recorrido por las columnas 29 }
30 [Link](tabla[i][j]+" "); 30 if (tabla[i][j]%2==0){ //para los numertos pares
31 } 31 pares++; //contador de pares
32 [Link](); 32 }
33 } 33 sumafila=sumafila+tabla[i][j]; //suma de los numeros de la fila
34 [Link](); 34 }
35 //bucle para visualizar las filas pares 35 [Link] ("la suma de la fila es: "+sumafila); //salida de datos de las sumas
36 for (i=0;i<FIL;i++) { //hago recorrido por las filas 36 }
37 for (j=0;j<COL;j++) { //recorrido por las columnas 37 [Link] ("el numero mayor: "+mayor); //salida de numero mayor
38 if (i%2==0) { 38 [Link] ("los numeros pares son: "+pares); //salida de numero pares
39 [Link](tabla[i][j]+" "); 39 }
40 } 40 }
41 }
42 [Link]();
43 }
44 }
45 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 22


1 /* 1 /*
2 Cargar una tabla de 2x3 de numeros aleatorios 2 Dada una tabla pedir un numero y decir si existe o no.
3 entre 1 y 10. Mostrarla. Mostrar la suma de las 3 */
4 columnas pares y la suma por cada columna par. 4 package ejercicio53;
5 */ 5
6 package ejercicio52; 6 import [Link];
7 7
8 import [Link]; 8 public class Ejercicio53 {
9 9
10 public class Ejercicio52 { 10 public static void main(String[] args) {
11 11
12 public static void main(String[] args) { 12 Scanner teclado=new Scanner ([Link]);
13 13
14 Random aleatorio=new Random(); 14 final int FIL=3;
15 15 final int COL=3;
16 final int FIL=2; 16 int tabla[][]={{3,5,0},{4,1,2},{8,7,6},};
17 final int COL=3; 17 int num=0;
18 int tabla[][]=new int [FIL] [COL]; 18 int i,j;
19 int i,j; 19
20 int pares=0; 20 for (i=0;i<FIL;i++){ //hago recorrido por las filas
21 int sumacolumna=0; 21 for (j=0;j<COL;j++){ //recorrido por las columnas
22 22 [Link](tabla[i][j]+" "); //saco por pantalla la tabla
23 for (i=0;i<FIL;i++){ //hago recorrido por las filas 23 }
24 for (j=0;j<COL;j++){ //recorrido por las columnas 24 [Link]();
25 tabla[i][j]=[Link](10)+1; //cargo la tabla con numeros 25 }
26 } 26 [Link]("introduzca numero: ");
27 } 27 num=[Link]();
28 for (i=0;i<FIL;i++){ //hago recorrido por las filas 28
29 for (j=0;j<COL;j++){ //recorrido por las columnas 29 //busqueda de numero en tabla de elementos no repetidos
30 [Link](tabla[i][j]+" "); //saco por pantalla la tabla 30 boolean encontrado=false; //utilizamos la variable encontrado
31 } 31
32 [Link](); 32 for (i=0;i<FIL && encontrado==false;i++){ //hago recorrido por las filas
33 } 33 for (j=0;j<COL && encontrado==false;j++){ //recorrido por las columnas
34 for (j=0;j<COL;j++){ //hago recorrido por las columnas 34 if (tabla[i][j]==num) { //si encuentra el num
35 sumacolumna=0; 35 encontrado=true; //es verdadreo
36 for (i=0;i<FIL;i++){ //recorrido por las filas 36 }
37 if (j%2==0){ //para los numertos pares 37 }
38 //suma de los numeros de las columnas 38 }
39 sumacolumna=sumacolumna+tabla[i][j]; 39 if (encontrado==false) { //sino lo encuentra....
40 } 40 [Link]("no encontrado");
41 } 41 }
42 if (j%2==0){ //para los numertos pares 42 else { //si lo encuentra....
43 //suma de los numeros de las columnas pares 43 [Link]("encontrado");
44 [Link]("la suma de las columnas pares es: "+sumacolumna); 44 }
45 } 45 }
46 } 46 }
47 }
48 }

1 /* 1 /*
2 Dadas dos tablas hacer la suma. 2 Dado este array [6,7,8,9,10] cargarlo de forma
3 */ 3 repetida por filas en una tabla de 4x5.
4 package ejercicio54; 4 */
5 5 package ejercicio55;
6 public class Ejercicio54 { 6
7 7 public class Ejercicio55 {
8 public static void main(String[] args) { 8
9 9 public static void main(String[] args) {
10 final int FIL=2; 10
11 final int COL=3; 11 int v[]={6,7,8,9,10};
12 int tabla[][]={{1,0,3},{5,8,4},}; 12 final int FIL=4;
13 int tabla1[][]={{9,1,1},{3,8,7},}; 13 final int COL=5;
14 int resultado[][]=new int[FIL] [COL]; 14 int tabla[][]=new int [FIL] [COL];
15 int i,j; 15 int i,j;
16 16
17 for (i=0;i<FIL;i++){ //hago recorrido por las filas 17 //buble para pedir datos de tabla
18 for (j=0;j<COL;j++){ //recorrido por las columnas 18 for (i=0;i<FIL;i++){ //hago recorrido por las filas
19 [Link](tabla[i][j]+" "); //saco por pantalla la tabla 19 for (j=0;j<COL;j++){ //recorrido por las columnas
20 } 20 tabla[i][j]=v[j]; //rellena la fila de la tabla con los valores de v
21 [Link](); 21 [Link]( tabla[i][j]+" "); //saco por pantalla la tabla
22 } 22 }
23 [Link](); 23 [Link]();
24 24 }
25 for (i=0;i<FIL;i++){ //hago recorrido por las filas 25 }
26 for (j=0;j<COL;j++){ //recorrido por las columnas 26 }
27 [Link](tabla1[i][j]+" "); //saco por pantalla la tabla
28 }
29 [Link]();
30 }
31 [Link]();
32
33 for (i=0;i<FIL;i++){ //hago recorrido por las filas
34 for (j=0;j<COL;j++){ //recorrido por las columnas
35 resultado[i][j]=tabla[i][j]+tabla1[i][j];//suma de las tablas
36 [Link]( resultado[i][j]+" "); //saco por pantalla la suma
37 }
38 [Link]();
39 }
40 }
41 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 23


1.2.1.-Arrays paralelos: cuando tengo que almacenar datos de diferentes tipos en un Array. [Link]. almacenar 10
personas con su salario.
public static void main(String[] args) { 1 /*
Scanner teclado=new Scanner ([Link]); 2 Cargar array con 5 nombres por teclado. despues
3 para cada uno de los nombres decir cuantas "a"
final int N=3; 4 tiene.
String nombres[]=new String[N]; //vector nombres 5 */
double salarios[]=new double[N]; //vector salarios 6 package ejercicio56;
int i; 7 import [Link];
8
for (i=0;i<N; i++) { 9 public class Ejercicio56 {
[Link] ("Nombre: "); // 10
nombres[i]=[Link](); //meto nombre en vector 11 public static void main(String[] args) {
[Link] ("Salario: "); 12
salarios[i]=[Link](); //meto salario en vector 13 Scanner teclado=new Scanner([Link]);
String tmp=[Link](); //limpia buffer teclado 14
} 15 final int N=5;
//imprimo el vector con datos de nombre-salario 16 String nombres[]=new String[ N];
for (i=0;i<N; i++) { 17 int i,j, contador=0;
[Link] (nombres[i]+" "+salarios[i]); 18
} 19 for (i=0;i<N;i++){
} 20 [Link]("Nombre: ");
} 21 nombres[i]=[Link](); //pedimos nombre, guardamos en nombre[i]
22 }
23 for (i=0;i<N;i++){
nombres= Ana Luis Marta Pedro 24 String nombre=nombres[i]; //nombre de i lo meto en nombre
25 contador=0; //contador a 0 para cada recorrido en el bucle
salario= 900 300 1200 780 26
índice 0 1 2 3 27 for (j=0;j<[Link]();j++){
28 if ([Link](j)=='a'){ //si encuentra la "a" en el nombre
29 contador++; //va sumando en el contador
30 }
31 }
32 [Link]( nombres[i]+" tiene "+contador);
33 }
34 }
35 }

1.3.-Cubos: (tridimensionales).
public static void main(String[] args) {

final int FIL=3;


final int COL=4;
final int FONDO=2;
int i,j,k;
int cubo[][][]=new int [FIL][COL][FONDO];

//bucle para recorrido del cubo


for (i=0;i<FIL; i++) {
for (j=0;j<COL;j++) {
for (k=0;k<FONDO;k++) {
cubo [i][j][k]=0; //cubo con ceros
}
}
}
}

1 /* 31 //inventar los barcos 62 //compruebo el disparo


2 Programa de juego hundir la flota 32 Random aleatorios=new Random(); 63 if (tableroOrdenador[fila][columna]=='A') {
3 */ 33 int barcos=0; 64 [Link]("agua!!");
4 package ejercicio60; 34 65 mitablero[fila][columna]='A';
5 35 while (barcos<BARCOS) { 66 }
6 import [Link]; 36 fila=[Link](FIL); 67 else{
7 import [Link]; 37 columna=[Link](COL); 68 [Link]("hundido!!");
8 38 69 mitablero[fila][columna]='B';
9 public class Ejercicio60 { 39 if (tableroOrdenador [fila][columna]=='A') { //agua 70 tableroOrdenador[fila][columna]='A';
10 40 tableroOrdenador [fila][columna]='B'; //barco 71 aciertos++;
11 public static void main(String[] args) { 41 barcos++; 72 }
12 42 } 73 [Link]("mi tablero");
13 Random aleatorio=new Random(); 43 } 74 for(i=0;i<FIL;i++) {
14 Scanner teclado=new Scanner([Link]); 44 //muestro el tablero del ordenador, luego se quita 75 for(j=0;j<COL;j++) {
15 45 for(i=0;i<FIL;i++) { 76 [Link](mitablero[i][j]+" ");
16 final int FIL=8; 46 for(j=0;j<COL;j++) { 77 }
17 final int COL=8; 47 [Link](tableroOrdenador[i][j]+" "); 78 [Link]();
18 final int BARCOS=10; 48 } 79 }
19 49 [Link](); 80 [Link]("aciertos: "+aciertos);
20 char tableroOrdenador[][]=new char[FIL][COL]; 50 } 81 }
21 char mitablero[][]=new char[FIL][COL]; 51 //empieza el juego 82 [Link]("FIN DEL JUEGO");
22 int i,j,fila,columna; 52 [Link]("comienza el juego"); 83 }
23 53 int aciertos=0; 84 }
24 //cargo el tablero de agua del ordenador y el mio 54
25 for(i=0;i<FIL;i++) { 55 //pido por teclado el disparo bucle hasta acertar.
26 for(j=0;j<COL;j++) { 56 while (aciertos!=BARCOS){
27 tableroOrdenador[i][j]='A'; 57 [Link]("fila?[0-8]");
28 mitablero[i][j]=' '; 58 fila=[Link]();
29 } 59 [Link]("columna?[0-8]");
30 } 60 columna=[Link]();
61

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 24


1 /* 46 //aqui hay que comprobar quien ganaria
2 Juego de las 3 en raya. 47 if(tablero[0][0]==tablero[0][1] && tablero[0][1]==tablero[0][2] && tablero[0][2]!=' '){
3 */ 48 ganador=turno; // primera fila
4 package ejercicio57; 49 }
5 import [Link]; 50 else if(tablero[1][0]==tablero[1][1] && tablero[1][1]==tablero[1][2] && tablero[1][2]!=' '){
6 51 ganador=turno; // segunda fila
7 public class Ejercicio57 { 52 }
8 53 else if(tablero[2][0]==tablero[2][1] && tablero[2][1]==tablero[2][2] && tablero[2][2]!=' '){
9 public static void main(String[] args) { 54 ganador=turno; // tercera fila
10 55 }
11 Scanner teclado=new Scanner([Link]); 56 else if(tablero[0][0]==tablero[1][0] && tablero[1][0]==tablero[2][0] && tablero[2][0]!=' '){
12 57 ganador=turno; // primera columna
13 final int FIL=3; 58 }
14 final int COL=3; 59 else if(tablero[0][1]==tablero[1][1] && tablero[1][1]==tablero[2][1] && tablero[2][1]!=' '){
15 char tablero[][]={{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}}; //tablero vacio 60 ganador=turno; // segunda columna
16 int i,j; 61 }
17 int fila, columna; //lo que escriba el usuario 62 else if(tablero[0][2]==tablero[1][2] && tablero[1][2]==tablero[2][2] && tablero[2][2]!=' '){
18 char turno='x'; 63 ganador=turno; // tercera columna
19 char ganador=' '; 64 }
20 int contador=0; //fichas en el tablero 65 else if(tablero[0][0]==tablero[1][1] && tablero[1][1]==tablero[2][2] && tablero[2][2]!=' '){
21 66 ganador=turno; // diagonal 1
22 //el juego acaba cuando haya ganador o no queden fichas 67 }
23 while (ganador==' ' && contador<9) { 68 else if(tablero[0][2]==tablero[1][1] && tablero[1][1]==tablero[0][2] && tablero[0][2]!=' '){
24 [Link]("- tablero -"); 69 ganador=turno; // diagonal 2
25 for (i=0;i<FIL;i++){ 70 }
26 for (j=0;j<COL;j++){ 71 if (turno=='x'){ //cambio de turno
27 [Link](tablero[i][j]+" "); 72 turno='0';
28 } 73 }
29 [Link](); 74 else {
30 } 75 turno='x';
31 [Link]("turno jugador"+turno); 76 }
32 77 }
33 [Link]("fila [0-2] ?: "); 78 }
34 fila=[Link](); 79 if (ganador==' '){ //si ganador esta vacio hay empate
35 80 [Link]("¡empate!");
36 [Link]("columna [0-2] ?: "); 81 }
37 columna=[Link](); 82 else {
38 83 [Link]("ganador: "+ganador);
39 if (tablero[fila][columna]!=' '){ //si la posicion esta llena 84 }
40 [Link]("casilla ocupada"); 85 }
41 } 86 }
42 else {
43 tablero[fila][columna]=turno; //y si esta vacia = turno.
44 contador++; //incrementa cada ficha metida
45

1 /* 1 /*
2 Cargar un array con palabras, mostrarlas por pantalla, 2 Dada una tabla, pedir por teclado continuamente
3 indicando cuantas letras tiene cada palabra y 3 referencias de articulos hasta que el susuario
4 cuantas hay en total. 4 introduzca -1, al final mostar la suma toral de precios.
5 */ 5 */
6 package ejercicio58; 6 package ejercicio59;
7 7
8 public class Ejercicio58 { 8 import [Link];
9 9
10 public static void main(String[] args) { 10 public class Ejercicio59 {
11 11
12 final int N=4; 12 public static void main(String[] args) {
13 String palabras[]={"perro","gato","pajaro","avion"}; 13
14 int i; 14 Scanner teclado=new Scanner([Link]);
15 int contador=0; 15
16 int suma=0; 16 final int FIL=2;
17 17 final int COL=6;
18 for (i=0;i<[Link];i++) { 18 int articulos[][]={{1015,1028,1037,1053,1002,1097},{10,15,8,3,5,7},};
19 contador=0; 19 int ref=0;
20 int longitud=palabras[i].length(); 20 int sumaref=0;
21 contador++; 21 int i;
22 [Link]("el numero de letras de "+palabras[i]+" es: "+longitud); 22
23 } 23 while (ref!=-1) { //validacion
24 [Link](); 24 [Link]("introduzca numero de referencia (-1 para salir): ");
25 25 ref=[Link]();
26 for (i=0;i<[Link];i++) { 26
27 27 //bucle busqueda de la referencia en fila 0 y valor i
28 int longitud=palabras[i].length(); 28 for (i=0;i<COL && articulos[0][i]!=ref;i++);
29 suma=suma+longitud; 29
30 } 30 //si valor de i llega al final de la tabla...no encuentra el valor..
31 [Link]("el numero de letras "+suma); 31 if (i==COL) {
32 [Link](); 32 [Link]("la referencia no existe");
33 } 33 }
34 } 34 else { //si lo encuentra....
35 //suma de los numeros de fila 1 y valor de i
36 sumaref=sumaref+articulos[1][i];
37 }
38 }
39 [Link]("la suma de los articulos es: "+sumaref);
40 }
41 }

2.-Procedimientos y funciones.
El objetivo es dividir el programa en partes más pequeñas. No hay que plantear el problema en bloque. Se
descompone y posteriormente se une todo.

Se usa para programar más fácil, programar en equipo, reutilizar el código para otros proyectos y evitar errores.

2.1.-Procedimientos: fragmento de código que realiza una tarea muy concreta, aproximadamente 20-30 lineas de
código. Puede recibir parámetros.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 25


Public static void nombre (parámetros) { Public static void nombre (parámetros) {
//código
} PROTOTIPO

public class Ejercicio61 { public static void main(String[] args) { public static void main(String[] args) {
dibuja('*'); dibuja('*',10);
public static void main(String[] args) { }//cierro el main dibuja('@',10);
saluda(); }//cierro el main
}//cierro el main public static void dibuja(char simbolo) {
int i; public static void dibuja(char simbolo, int longitud) {
public static void saluda() { for (i=0;i<longitud;i++) { int i;
[Link]("hola"); [Link](simbolo); for (i=0;i<longitud;i++) {
}//cierro el saluda } [Link](simbolo);
} }//cierro el dibuja }
} [Link]();
}//cierro el dibuja
}

Dibuja línea de 10 ********** Dibuja línea de 10 **********


Sale por pantalla “hola”
Dibuja línea de 10 @@@@@@@@@@
('*'); = (char simbolo) ('*',10); = (char simbolo, int longitud)

1 /* 1 /*
2 Crear un procedimiento que recibe dos numeros 2 Programa que diseña un procedimiento llamado dibuja_linea
3 entereos y que haga la suma, resta 3 que recibe un numero entero y un caracter.
4 y multiplicación. 4 Dibujará una linea de longitud indicada en el caracter pasado.
5 */ 5 Crear otro procedimiento dibuja_cuadrado que utilize el
6 package ejercicio62; 6 procedimiento anterior para dibujar un cuadrado de 10 arrobas.
7 7 */
8 public class Ejercicio62 { 8 package ejercicio63;
9 9
10 public static void main(String[] args) { 10 public class Ejercicio63 {
11 11
12 opera(5,8,'+'); //nombre, valores, operacion 12 public static void main(String[] args) {
13 opera(5,8,'-'); //nombre, valores, operacion 13
14 opera(5,8,'*'); //nombre, valores, operacion 14 dibuja_linea(10,'@'); //parametros longitud y simbolo
15 }//cierro el main 15 [Link]();
16 16 dibuja_cuadrado(10,'@'); //parametros longitud y simbolo
17 //hago el opera para llamarlo en el void de arriba 17 }
18 public static void opera(int n1, int n2, char operacion) { 18 public static void dibuja_linea(int longitud,char simbolo) {
19 if (operacion=='+') { 19 int i;
20 [Link](n1+n2); 20 for (i=0;i<longitud;i++) {
21 } 21 [Link](simbolo);
22 else if (operacion=='-') { 22 }
23 [Link](n1-n2); 23 [Link]();
24 } 24 }
25 else if (operacion=='*') { 25 public static void dibuja_cuadrado(int longitud, char simbolo) {
26 [Link](n1*n2); 26 int i;
27 }//cierro el dibuja 27 for (i=0;i<longitud;i++) {
28 } 28 dibuja_linea(longitud, simbolo); //dibuja linea con parametros
29 } 29 }
30 }
31 }

2.1.1.-Variables locales y globales:

[Link].-Locales: variables que se crean dentro de un procedimiento y solo son accesibles en ese
procedimiento.

[Link].-Globales: variables que se crean fuera del procedimiento y son accesibles por cualquier
procedimiento.
public class Ejercicio { public class Ejercicio {
static int c=4;
public static void main(String[] args) { public static void main(String[] args) {
int i; int a=5;
[Link](a); [Link](a);
procedimiento1(); procedimiento1();
[Link](a); [Link](c);
} }
public static void procedimiento1() { public static void procedimiento1() {
int i; int a=7;
[Link](a); [Link](a);
a++; a++; //vale 7+1=8
[Link](a); c--; //vale 4-1=3
} [Link](a);
} }
}
Sale por pantalla 5,7,8,5 Sale por pantalla 5,7,8,3,7,5

Un procedimiento busca la variable en sus variables locales, si no existe busca en las globales, y si no
existe, falla. Los parámetros son variables locales.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 26


La llamada a un procedimiento y el encaje de parámetros se llama acoplamiento, buscaremos crear
procedimientos con acoplamiento sencillo. (pocos parámetros).
1 /* 1 /*
2 Procedimiento muestra_dia que reciba 2 Procedimiento que recibe dos numeros enteros y
3 un numero entero que es el dia de la semana y 3 nos dice si son iguales o cual es el mayor.
4 muestre en letra el dia que es. error si el dia es incorrecto. 4 Procedimiento que recibe dos enteros, a y b.
5 Programa procedimiento muestra_mes que reciba 5 Calcule y muestre a elevado a b.
6 un numero entero que es el mes del año y 6 */
7 muestre en letra el mes que es. error si el mes es incorrecto. 7 package ejercicio65;
8 */ 8
9 package ejercicio64; 9 public class Ejercicio65 {
10 10
11 public class Ejercicio64 { 11 public static void main(String[] args) {
12 12 //procedimiento y parametros
13 public static void main(String[] args) { 13 muestra_num(3,3);
14 14 muestra_num(5,3);
15 muestra_dia(5); //valor que se coloca en parametro int dia 15 muestra_num(3,5);
16 muestra_mes(3); //valor que se coloca en parametro int mes 16 calculo(2,3);
17 } 17 }
18 public static void muestra_dia(int dia) { //parametro que se pide 18 public static void muestra_num(int num1, int num2) { //parametro que se pide
19 switch (dia) { 19
20 case 1: [Link] ("lunes");break; 20 if (num1==num2) {
21 case 2: [Link] ("martes");break; 21 [Link](num1+"="+num2+" los numeros son iguales ");
22 case 3: [Link] ("miercoles");break; 22 }
23 case 4: [Link] ("jueves");break; 23 else if (num1<num2) {
24 case 5: [Link] ("viernes");break; 24 [Link](num1+" es menor que "+num2);
25 case 6: [Link] ("sabado");break; 25 }
26 case 7: [Link] ("domingo");break; 26 else {
27 default:[Link] ("error, el dia no es correcto");break; 27 [Link](num1+" es mayor que "+num2);
28 } 28 }
29 } 29 }
30 public static void muestra_mes(int mes) { //parametro que se pide 30 public static void calculo(int num1, int num2) { //parametro que se pide
31 31
32 switch (mes) { 32 int i;
33 case 1: [Link] ("enero");break; 33 int resultado=1;
34 case 2: [Link] ("febrero");break; 34
35 case 3: [Link] ("marzo");break; 35 for (i=0;i<num2;i++) {
36 case 4: [Link] ("abril");break; 36 resultado=resultado*num1; //num1 elevado a num2
37 case 5: [Link] ("mayo");break; 37 }
38 case 6: [Link] ("junio");break; 38 [Link](resultado);
39 case 7: [Link] ("julio");break; 39 }
40 case 8: [Link] ("agosto");break; 40 }
41 case 9: [Link] ("septiembre");break;
42 case 10: [Link] ("octubre");break;
43 case 11:[Link] ("noviembre");break;
44 case 12: [Link] ("diciembre");break;
45 default:[Link] ("error, el mes no es correcto");break;
46 }
47 }
48 }

2.1.2.-Parametros por valor o referencia:

[Link].-Valor: se pasa el contenido de la variable, SOLO el contenido.

[Link].-Referencia: se pasa la variable entera.

En otros lenguajes existe el concepto de puntero, en Java no.


public class Ejercicio { public class Ejercicio { public class Ejercicio {

static int a=9; public static void main(String[] args) { public static void main(String[] args) {

public static void main(String[] args) { int v[]={5,6}; int v[]={5,6};


[Link](v[0]); //indice 0 de v=5 [Link](v[0]); //indice 0 de v
int c=4; p1(v); //referencia de p1=7 [Link](v[1]); //indice 1 de v
[Link](a); //v0 de p1 pq cambia el v de arriba por {7,3} p1(v); //referencia de p1=7
p1(c); //paso valor a p1 [Link](v[1]); //v1 del p1=3 p2(v); //referencia de p1=8
[Link](c); } [Link](v[1]); //v1 de p2
} public static void p1(int v[]) { }
public static void p1(int c) { v[0]=7; public static void p1(int v[]) {
c++; v[1]=3; v[0]=7;
//devuelve 5 al main //v0 de v =7 va al p1(v) del main v[1]=3;
[Link](c); [Link](v[0]); //v 0 de v =7 va al p1(v) del main
} } [Link](v[0]);
} } }
public static void p2(int v[]) {
v[0]=8;
v[1]=6;
//v0 de v =8 va al p2(v) del main
[Link](v[0]);
}
}
Sale por pantalla 9,5,4 Sale por pantalla 5,7,3 Sale por pantalla 5,6,7,8,6

En Java todo se pasa por valor, salvo los arrays y los objetos que se pasan por referencia. Crear un duplicado
de un Array en memoria consume mucho espacio.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 27


2.1.3.-Diagrama de módulos:

public class Ejercicio1Pruebas {

public static void main(String[] args) {

int v[]={5,6};
int c=4;
p1(c);
p2(v,c);
}
public static void p1(int c) {
//codigo
}
public static void p2(int v[], int c) {
//codigo
}
}

2.1.4.-¿Que es una librería?: un conjunto de procedimientos y funciones agrupadas en un fichero para utilizarlos
cuando sea necesario. Existen multiples librerías ya programadas y disponibles.

1 /* 1 /*
2 Procedimiento que recibe un vector de numeros 2 Programa que cargue un array con 10
3 y muestra el mayor y la media. 3 numeros aleatorios entre 1 y 20.
4 */ 4 Lo muestre en pantalla. lo ordene.
5 package ejercicio66; 5 Lo muestre por pantalla. lo rellene de 0.
6 6 Lo muestre por pantalla.
7 public class Ejercicio66 { 7 Hacer diagrama de modulos.
8 8 */
9 public static void main(String[] args) { 9 package ejercicio67;
10 10
11 int w[]={1,2,3,4,5,6,7}; 11 import [Link];
12 elmayor(w); 12 import [Link];
13 lamedia(w); 13
14 } 14 public class Ejercicio67 {
15 public static void elmayor( int v[]) { //el mayor del vector 15
16 16 public static void main(String[] args) {
17 int mayor=Integer.MIN_VALUE; 17 //creacion del vector
18 int i; 18 final int N=10;
19 19 int v[]=new int[N];
20 for (i=0;i<[Link];i++) { //recorre el vector y muestra el mayor 20
21 if (v[i]>mayor){ 21 cargar(v);
22 mayor=v[i]; 22 mostrar(v);
23 } 23 ordenar(v);
24 } 24 mostrar(v);
25 [Link]("el mayor es: "+mayor); 25 rellenar(v);
26 } 26 [Link]();
27 public static void lamedia( int v[]) { //la media del vector 27 mostrar(v);
28 28 }
29 int suma=0; 29 public static void cargar(int v[]) {
30 int i; 30
31 31 Random aleatorio=new Random();
32 for (i=0;i<[Link];i++) { 32 int i;
33 suma=suma+v[i]; //suma = suma mas numeros del vector 33 //creo los aleatorios
34 } 34 for (i=0;i<[Link];i++) {
35 //suma entre la longitud del vector 35 v[i]=[Link](10)+1;
36 [Link]("la media es: "+suma/[Link]); 36 }
37 } 37 }
38 } 38 public static void mostrar(int v[]) {
39
40 int i;
41 //muestro los aleatorios
42 for (i=0;i<[Link];i++) {
43 [Link](v[i]+" ");
44 }
45 }
46 public static void ordenar(int v[]) {
47
48 [Link](v);
49 [Link]();
50 }
51 public static void rellenar(int v[]) {
52
53 int i;
54 for (i=0;i<[Link];i++) {
55 v[i]=0;
56 }
57 }
58 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 28


2.2.-Funciones: se computa igual que un procedimiento, pero a diferencia de estos devuelven un valor. Evitar el
[Link](); en funciones. Cuando se ejecuta el return la función termina en ese momento.

Public static TIPO nombre (parámetros) {


//código TIPO: float, int, String….
return valor; //sentencia de retorno
}

public class Ejercicio { public class Ejercicio {

public static void main(String[] args) { public static void main(String[] args) {

int c; int p;
c=damecero(); p=suma(3,5);

} }
public static int damecero () { public static int suma (int a, int b) {
return 0; return a+b;
} }
} }
(3,5) del main los mete en (int a, int b) de suma,
Devuelve resultado (return) y lo guarda en c.
después retorna (return) el resultado y lo mete en p.

1 /* 1 /* 1 /*
2 Diseñar funcion "compara" que recibe 2 numeros 2 Diseñar una funcion longitud que recibe 2 Funcion que reciba un mes y año y nos
3 enteros, devuelve 0 si son iguales, 1 si el 3 una cadena y devuelve el nº de caracteres. 3 devuelva el nº de dias del mes.
4 primero es mayor y -1 si el segundo es mayor. 4 */ 4 -1 si el mes es incorrecto.
5 */ 5 package ejercicio69; 5 */
6 package ejercicio68; 6 6 package ejercicio70;
7 7 public class Ejercicio69 { 7
8 public class Ejercicio68 { 8 8 public class Ejercicio70 {
9 9 public static void main(String[] args) { 9
10 public static void main(String[] args) { 10 String palabra="gato"; //defino la palabra 10 public static void main(String[] args) {
11 11 int n; //creo variable 11
12 int resultado; 12 n=longitud(palabra); 12 int resultado;
13 resultado=compara(1,2); 13 [Link](n); 13 resultado=diasdelmes(2,2015);
14 [Link](resultado); 14 } 14 [Link](resultado);
15 } 15 //procedimiento int pq depvuelve numero 15 }
16 public static int compara(int num1, int num2) { 16 //y string pq meto palabra 16 public static int diasdelmes (int mes, int anyo) {
17 if (num1>num2) { 17 public static int longitud (String palabra) { 17
18 return 1; 18 int n=[Link](); 18 int resultado;
19 } 19 return n; 19
20 else if (num1<num2) { 20 } 20 if (mes==4 || mes==6 || mes==9 || mes==11) {
21 return -1; 21 } 21 resultado= 30;
22 } 22 }
23 else { 23 else if (mes==1 || mes==3 || mes==5 || mes==7
24 return 0; 24 || mes==8|| mes==10 || mes==12) {
25 } 25 resultado= 31;
26 } 26 }
27 } 27 else if (mes==2) {
28
29 if( (anyo%400==0 || anyo%4==0) && anyo%100!=0) {
30 resultado= 29;
31 }
32 else {
33 resultado= 28;
34 }
35 }
36 else {
37 resultado=-1;
38 }
39 return resultado;
40 }
41 }

1 /* 15 }
2 Diseñar funcion que reciba un vector y un 16 public static int busca(int v[], int num) {
3 numero y nos devuelva la posicion donde se 17 int i, resultado;
4 encuentra el numero dentro del vector. -1 si no existe. 18 //recorre buble hasta el final y si no encuentra en numero..
5 */ 19 for (i=0; i<[Link] && v[i]!=num; i++);
6 package ejercicio71; 20 if (i==[Link]) { //si la busqueda llega al final
7 21 resultado=-1;
8 public class Ejercicio71 { 22 }
9 23 else { //entonces imrime posicion de i
10 public static void main(String[] args) { 24 resultado=i;
11 25 }
12 int v[]={2,3,4,5,6}; 26 return resultado;
13 int resultado=busca(v,4); 27 }
14 [Link]("posicion del numero en vector: "+resultado); 28 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 29


2.3.-El main como procedimiento: podemos usar un programa Java en:

S.O. gráfico.èpagina web(applet).èS.O. modo texto(linea comando).èteléfono móvil.èservidor web.


Public static void main (String args[ ]
parametros

Para probar el programa hay que tener en cuenta el nombre del package(pruebas) y el nombre del programa
public [Link].
Java Pruebas. prueba
Package programa

2.4.-Recursividad: no todos los lenguajes lo admiten, es la capacidad de un procedimiento de llamarse a si mismo.


--------------Main--------------
Saluda();
------------Saluda-------------
[Link](“hola”);
Saluda(); -> recursividad (es como un bucle.

Un proceso puede llamarse a si mismo un número ilimitado de veces (sin acabar), llegado a ese limite el
programa falla. Se usa en:

• Manipulaciones de estructuras de datos. Arboles y grafos.


• Técnicas avanzadas de programación (divide y venceras, backfraking (gps)).
• QuickSort.

1 /* 1 /* 1 /*
2 Funcion que recibe un numero romano (string) 2 Calcular el factorial de un numero. 2 Diseñar programa que cargue vector con 10
3 y nos devuelve el decimal correspondiente. 3 */ 3 numeros aleatorios entre 10 y 50. Mostrarlo.
4 Despues sumarlos. 4 package ejercicio73; 4 Calcular la media. Plantearlo con 2
5 */ 5 5 procedimientos y una funcion. diagrama de modulos.
6 package ejercicio72; 6 import [Link]; 6 */
7 7 7 package ejercicio74;
8 public class Ejercicio72 { 8 public class Ejercicio73 { 8
9 9 9 import [Link];
10 public static void main(String[] args) { 10 public static void main(String[] args) { 10
11 11 Scanner teclado=new Scanner ([Link]); 11 public class Ejercicio74 {
12 int resultado=romano("XVXXII"); 12 int num; 12
13 [Link]("la suma es: "+resultado); 13 int fact=1; 13 public static void main(String[] args) {
14 } 14 int i; 14
15 public static int romano(String romano) { 15 15 final int N=10;
16 16 [Link] ("introduce un numero: "); 16 int v[]=new int [N];
17 int acum=0; 17 num=[Link] (); 17 cargar(v);
18 int i; 18 18 mostrar(v);
19 19 for (i=num;i>1;i--) { 19 double m=media(v);
20 for(i=0;i<[Link]();i++) { 20 fact=fact*i; 20 [Link]("la media es: "+m);
21 switch ([Link](i)) { 21 } 21
22 case 'I' : acum=acum+1; break; 22 [Link]("el factorial de " +num+" es: " +fact); 22 }
23 case 'V' : acum=acum+5; break; 23 } 23 public static void cargar(int v[]) {
24 case 'X' : acum=acum+10; break; 24 } 24 Random aleatorio=new Random();
25 case 'L' : acum=acum+50; break; 25 int i;
26 case 'C' : acum=acum+100; break; 26 for (i=0;i<[Link];i++) {
27 case 'D' : acum=acum+500; break; 27 v[i]=[Link](41)+10;
28 case 'M' : acum=acum+1000; break; 28 }
29 } 29 }
30 } 30 public static void mostrar(int v[]) {
31 return acum; 31 int i;
32 } 32 for (i=0;i<[Link];i++) {
33 } 33 [Link](v[i]+" ");
34 }
35 }
36 public static double media(int v[]) {
37 int i;
38 double suma=0;
39 for (i=0;i<[Link];i++) {
40 suma=suma+v[i];
41 }
42 return suma/[Link];
43 }
44 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 30


1 /* 17 public static int Suma(int v[], int pos){//parametros vector y posicion
2 Suma de vectores con recursividad. 18 if(pos==N-1){
3 */ 19 return v[pos];
4 package ejercicio1.pruebas6; 20 }
5 import [Link]; 21 else{
6 22 return v[pos]+Suma(v,pos+1);
7 public class Ejercicio1Pruebas6 { 23 }
8 24 }
9 static int N=4; 25 }
10
11 public static void main(String[] args) {
12
13 int v[]={3,6,1,2};
14 int suma=Suma(v,0);//paso parametros
15 [Link](suma);
16 }

1 /* 1 /*
2 Diseñar una funcion que recibe un vector 2 Cargar un vector con 3 numeros por teclado.
3 con 5 frases y nos devuelva cuantas letras 3 Los numeros comprendidos entre 5 y 15.
4 (mayus y minus) hay en total. 4 Mostrarlos por pantalla.
5 */ 5 */
6 package ejercicio75; 6 package ejercicio78;
7 7
8 public class Ejercicio75 { 8 import [Link];
9 9
10 public static void main(String[] args) { 10 public class Ejercicio78 {
11 String v[]= {"hola","que tal","estas","hoy","de mañana"}; 11
12 [Link]("las letras totales: "+busca(v)); 12 public static void main(String[] args) {
13 } 13
14 public static int busca(String v[]) { 14 Scanner teclado=new Scanner ([Link]);
15 int i,suma=0,j; 15
16 for (i=0;i<[Link];i++) { 16 int v[]=new int [3];
17 String frase=v[i]; 17 int i,num;
18 for (j=0;j<[Link]();j++) { 18
19 char letra=[Link](j); 19 for (i=0;i<[Link];i++) {
20 //si encuentra letras may y min las va sumando 20 [Link]("introduzca numero entre 5 y 15: ");
21 if((letra>='a' && letra<='z') || (letra>='A' && letra<='Z')){ 21 num=[Link]();
22 suma++; 22 while(num<5 || num>15) { //validacion
23 } 23 num=[Link]();
24 } 24 [Link]("introduzca numero entre 5 y 15: ");
25 } 25 }
26 return suma; 26 v[i]=num;
27 } 27 }
28 } 28 for (i=0;i<[Link];i++) //mostrar
29 [Link](v[i]+" ");
30 }
31 }

1 /* 22 if (v[i]>elmayor) { 43
2 Dado un vector, mostrarlo, nº elementos, mayor, 23 elmayor=v[i]; 44 int pares=0;
3 menor, suma, media, >50, pares e impares. 24 } 45 for (i=0;i<[Link];i++) //pares
4 */ 25 [Link]("el numero mayor es: "+elmayor); 46 if (v[i]%2==0){
5 package ejercicio77; 26 47 pares++;
6 27 int elmenor=Integer.MAX_VALUE; //menor 48 }
7 public class Ejercicio77 { 28 for (i=0;i<[Link];i++) 49 [Link]("los pares son: "+pares);
8 29 if (v[i]<elmenor) { 50
9 public static void main(String[] args) { 30 elmenor=v[i]; 51 int impares=0;
10 // TODO code application logic here 31 } 52 for (i=0;i<[Link];i++) //impares
11 int v[]={45,87,100,34,75}; 32 [Link]("el numero menor es: "+elmenor); 53 if (v[i]%2!=0){
12 33 54 impares++;
13 int i; 34 int suma=0; 55 }
14 for (i=0;i<[Link];i++) //mostrar 35 for (i=0;i<[Link];i++) 56 [Link]("los impares son: "+impares);
15 [Link](v[i]+" "); 36 suma=suma+v[i]; 57
16 [Link](); 37 [Link]("la suma es: "+suma); 58 for (i=0;i<[Link];i++) //mayores que 50
17 38 59 if (v[i]>50){
18 [Link]([Link]); //nº elementos 39 int media=0; 60 [Link](v[i]+" ");
19 40 for (i=0;i<[Link];i++) 61 }
20 int elmayor=Integer.MIN_VALUE; //mayor 41 media=suma/[Link]; 62 }
21 for (i=0;i<[Link];i++) 42 [Link]("la media es: "+media); 63 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 31


TEMA 4 LECTURA Y ESCRITURA DE INFORMACIÓN

Hasta ahora hemos visto la excritura en pantalla y la lectura por teclado, ahora nos centraremos en la escritura en ficheros y
la lectura de ficheros.
Definición de fichero: información almacenada en un soporte de almacenamiento permanente (HDD, USB, DVD).
Existen varios tipos de ficheros:

1.-Ficheros secuenciales de texto.


Los datos se almacenan uno a continuación de otro (secuencia).

Pedro Luis Beatriz …

1.1.-Creación:

1.1.1.-A mano: (block de notas, notepad++…)

1.1.2.-Programa diseñado por nosotros.

Dentro del fichero hay líneas separadas por saltos de línea, da igual la extensión que tenga, importa el contenido del
archivo.
1.2.-Creación del fichero en java:

• Import [Link].*;
• Capturar excepción con el try y el catch.

Try{ FileWriter fichero=new FileWriter (“[Link]”); Las dos líneas crean un fichero en
//código que a lo mejor falla PrintWriter pw=new PrintWriter (fichero); blanco
//Si va bien continua el [Link] (“esto es una línea”); Cada vez que se escribe se crea una
programa [Link] (“esto es otra línea”); linea
} [Link](); El terminar de escribir se cierra el fichero
catch (Exception e){
[Link](e);
}

FileWriter fichero=new FileWriter (“[Link]”); Abre el fichero en modo de escritura. Si no existe, lo crea.
FileWriter fichero=new FileWriter (“[Link]”,true); Abre el fichero en modo de añadir. Añade contenido al final.

1.3.-Creación del fichero:

• el fichero debe existir si no fallará.


• lo abriremos para leerlo.
• leemos en un bucle línea por línea y al final se cierra.
• no se puede retroceder y no se puede leer ni escribir.
• todo lo que se lee es texto, si es un numero debemos de convertirlo a texto.

1.4.-Lectura del fichero:


File archivo=new File ("[Link]"); Fichero a leer
if(![Link]()){ Si no existe muestro error
[Link]("error no existe");
}
Try{ else{ Si existe
//código que a lo mejor falla FileReader fr=new FileReader (archivo); Lo leo
//Si va bien continua el BufferedReader br=new BufferedReader(fr); Coloco puntero en linea
programa String linea; Creo variable línea
} while((linea=[Link]())!=null){ Leemos líneas y guardamos en variable
[Link](linea); Mostramos las líneas
} //int num=[Link](linea); si se quiere
leer numeros hay que convertir
[Link](); El terminar de leer se cierra el fichero
catch (Exception e){
[Link](e);
}

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 32


1 /* 1 /* 1 /*
2 Escribir una frase en un fichero. 2 Escribir en un fichero los numeros del 1 al 100. 2 Escribir en fichero los numeros del
3 */ 3 */ 3 1 al 100 con los numeros pares.
4 package fichero01; 4 package fichero2; 4 */
5 5 5 package fichero3;
6 import [Link].*; 6 import [Link].*; 6 import [Link].*;
7 public class Fichero01 { 7 7
8 8 public class Fichero2 { 8 public class Fichero3 {
9 public static void main(String[] args) { 9 9
10 try { 10 public static void main(String[] args) { 10 public static void main(String[] args) {
11 //estas dos lineas crean un fichero en blanco 11 11
12 //pw es el puntero y nos indica donde empieza. 12 try{ 12 try{
13 //sin el true borra todo y lo crea no lo sobreescribe 13 //estas dos lineas crean un fichero en blanco 13 //estas dos lineas crean un fichero en blanco
14 FileWriter fichero=new FileWriter("[Link]",true); 14 //pw es el puntero y nos indica donde empieza. 14 //pw es el puntero y nos indica donde empieza.
15 PrintWriter pw=new PrintWriter(fichero); 15 //sin el true borra todo y lo crea 15 //sin el true borra todo y lo crea
16 [Link]("esto es una linea"); 16 FileWriter fichero = new FileWriter ("[Link]"); 16 FileWriter fichero = new FileWriter ("[Link]");
17 [Link]("esto es otra linea"); 17 PrintWriter pw = new PrintWriter (fichero); 17 PrintWriter pw = new PrintWriter (fichero);
18 18 18
19 [Link](); 19 int i; 19 int i;
20 } 20 for (i=1;i<=100;i++){ 20 for (i=1;i<=100;i++){
21 catch (Exception e) { 21 [Link](i); 21 if(i%2==0)
22 [Link](e); 22 } 22 [Link](i);
23 } 23 [Link](); //cerrar fichero 23 }
24 } 24 } 24 [Link](); //cerrar fichero
25 } 25 catch (Exception e){ 25 }
26 [Link](e); 26 catch (Exception e){
27 } 27 [Link](e);
28 } 28 }
29 } 29 }
30 }

1 /* 1 /*
2 Escribir 30 numeros aleatorios entre el 30 y el 40. 2 Pedir 5 nombres y edades por teclado y
3 */ 3 guardarlos en [Link] con el formato
4 package fichero4; 4 nombre:edad.
5 import [Link].*; 5 */
6 import [Link]; 6 package fichero5;
7 7 import [Link].*;
8 public class Fichero4 { 8 import [Link];
9 9
10 public static void main(String[] args) { 10 public class Fichero5 {
11 11
12 try{ 12 public static void main(String[] args) {
13 //estas dos lineas crean un fichero en blanco 13
14 //pw es el puntero y nos indica donde empieza. 14 try{
15 //sin el true borra todo y lo crea no lo sobreescribe 15 //estas dos lineas crean un fichero en blanco
16 FileWriter fichero = new FileWriter ("[Link]"); 16 //pw es el puntero y nos indica donde empieza.
17 PrintWriter pw = new PrintWriter (fichero); 17 //sin el true borra todo y lo crea no lo sobreescribe
18 18 FileWriter fichero = new FileWriter ("[Link]");
19 Random aleatorio= new Random(); 19 PrintWriter pw = new PrintWriter (fichero);
20 20
21 int i,num; 21 Scanner teclado=new Scanner ([Link]);
22 for (i=0;i<30;i++){ 22 int i,edad;
23 num=[Link](40-20+1)+20; 23 String nombre="";
24 [Link](num); 24 for(i=0;i<5;i++){
25 } 25
26 [Link](); //cerrar fichero 26 [Link]("Introducir nombre: ");
27 } 27 nombre=[Link]();
28 catch (Exception e){ 28
29 [Link](e); 29 [Link]("Introducir edad: ");
30 } 30 edad=[Link]();
31 } 31
32 } 32 String tmp=[Link](); //limpiar el teclado
33
34 [Link](nombre+":"+edad);
35 }
36 [Link](); //cerrar fichero
37 }
38 catch (Exception e){
39 [Link](e);
40 }
41 }
42 }

1 /* 16 else{
2 Lectura de un fichero. 17 FileReader fr=new FileReader (archivo);//leo el archivo
3 */ 18 BufferedReader br=new BufferedReader(fr); //es el puntero
4 package fichero6; 19
5 import [Link].*; 20 String linea;
6 21 while((linea=[Link]())!=null){ //leemos linea de fichero y la guardo en linea.
7 public class Fichero6 { 22 //int num=[Link](linea); si se quiere leer numeros hay que convertir
8 23 [Link](linea); //cambiar linea por num para que se vean los numeros
9 public static void main(String[] args) { 24 }
10 25 [Link]();
11 try{ 26 }
12 File archivo=new File ("[Link]"); //fichero a leer 27 }
13 if(![Link]()){//si el archivo no existe... 28 catch (Exception e){
14 [Link]("error el fichero no existe"); 29 [Link](e);
15 } 30 }
31 }
32 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 33


1 /* 1 /*
2 Mostrar la suma de los numeros del fichero [Link]. 2 Pedir 5 numeros por teclado entre 1 y 10.
3 */ 3 Calcular la suma total y mostrarla por
4 package fichero07; 4 pantalla. Almacenar el resultado en el
5 5 fichero [Link].
6 import [Link].*; 6 */
7 import [Link]; 7 package fichero08;
8 8
9 public class Fichero07 { 9 import [Link].*;
10 10 import [Link];
11 public static void main(String[] args) { 11
12 12 public class Fichero08 {
13 try{ 13
14 File archivo=new File ("[Link]");//fichero a leer 14 public static void main(String[] args) {
15 if(![Link]()){ 15
16 [Link]("error no existe"); 16 Scanner teclado=new Scanner ([Link]);
17 } 17 int i,num,suma=0;
18 else{ 18
19 FileReader fr=new FileReader (archivo);//leo el archivo 19 for(i=0;i<5;i++){
20 BufferedReader br=new BufferedReader(fr);//es el puntero 20 [Link]("Introducir numero: ");
21 21 num=[Link]();
22 int mayor=Integer.MIN_VALUE; 22
23 int suma=0; 23 while(num<1 || num>10){ //valida
24 String linea; 24 [Link]("Introducir numero: ");
25 25 num=[Link]();
26 while ((linea=[Link]())!=null){ //lee la linea y lo guardo en linea 26 }
27 int num=[Link](linea);//convierto texto a numero 27 suma=suma+num; //suma los numeros
28 if (num>mayor) { 28 }
29 mayor=num; 29 try{
30 } 30 FileWriter fichero = new FileWriter("[Link]");//crea archivo
31 suma=suma+num; 31 PrintWriter pw = new PrintWriter (fichero);
32 } 32
33 [Link]();//cierro fichero 33 [Link](suma+" ");//imprime en archivo
34 [Link](mayor); 34 [Link]();//cierro archivo
35 [Link](suma); 35 }
36 } 36 catch (Exception e){
37 } 37 [Link](e);
38 catch (Exception e){ 38 }
39 [Link](e); 39 }
40 } 40 }
41 }
42 }

1.5.-Operación split: separar los nombres.

String frase=”Luis:David:Beatriz”; v= Luis David Beatriz


String v[ ]=[Link](“:”); índice 0 1 2

1 /* 1 /*
2 Abrir el fichero [Link] y extraer la informacion 2 Dada una tabla, cargarla en fichero del
3 nombre y edad en formato nombre edad 3 modo dato:dato.
4 */ 4 */
5 package fichero09; 5 package fichero10;
6 6
7 import [Link].*; 7 import [Link].*;
8 8
9 public class Fichero09 { 9 public class Fichero10 {
10 10
11 public static void main(String[] args) { 11 public static void main(String[] args) {
12 12 final int FIL=3;
13 try{ 13 final int COL=2;
14 File archivo= new File ("[Link]");//fichero a leer 14 int tabla[][]={{5,9},{8,4},{0,3}};
15 if(![Link]()){ 15 int i,j=0;
16 [Link]("error el fichero no existe"); 16
17 } 17 for(i=0;i<FIL;i++){
18 else{ 18 for (j=0;j<COL;j++){
19 FileReader fr= new FileReader (archivo);//leo el archivo 19 [Link](tabla[i][j]+" ");
20 BufferedReader br = new BufferedReader(fr);//es el puntero 20 }
21 21 [Link]();
22 String linea,nombre,edad; 22 }
23 23 try{
24 while((linea=[Link]())!=null){ //leemos linea de fichero y la guardo en linea. 24 FileWriter fichero = new FileWriter ("[Link]");//crea archivo
25 String v[]=[Link](":"); //saca los valores y los mete en vector 25 PrintWriter pw = new PrintWriter (fichero);
26 [Link](v[0]+" "+v[1]); //imrime el vector resultante 26
27 } 27 for(i=0;i<FIL;i++){
28 [Link](); 28 [Link](tabla[i][0]+":"+tabla[i][1]);
29 } 29 }
30 } 30 [Link]();
31 catch (Exception e){ 31 }
32 [Link](e); 32 catch (Exception e){
33 } 33 [Link](e);
34 } 34 }
35 } 35 }
36 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 34


1 /* 1 /* 1 /*
2 Buscar en un fichero, pedir el nombre por 2 Dado un fichero [Link] y [Link]. Diseñar un programa 2 Dado el fichero [Link]. Diseñar un programa
3 teclado, buscarlo y mostrar su dni:edad. 3 que lea ambos ficheros y cree el fichero [Link] 3 que cree el fichero [Link] con los numeros
4 Si encuentra el dato, paro. 4 con el contenido: 1:xxxxx:xxxxxx. 4 pares del fichero [Link].
5 */ 5 */ 5 */
6 package fichero11; 6 package Fichero14; 6 package fichero13;
7 7 import [Link].*; 7
8 import [Link].*; 8 8 import [Link].*;
9 import [Link]; 9 public class Fichero14 { 9
10 10 10 public class Fichero13 {
11 public class Fichero11 { 11 public static void main(String[] args) { 11
12 12 12 public static void main(String[] args) {
13 public static void main(String[] args) { 13 try{ 13
14 14 File archivoUno =new File ("[Link]"); 14 try{
15 Scanner teclado=new Scanner ([Link]); 15 File archivoDos =new File ("[Link]"); 15 File archivo= new File ("[Link]");
16 [Link]("nombre a buscar: "); 16 if(![Link]()||![Link]()){ 16 if(![Link]()){
17 String nombre=[Link]();//metemos nombre en variable 17 [Link]("Error, el fichero no existe"); 17 [Link]("error no existe");
18 18 } 18 }
19 try{ 19 else{ 19 else{
20 File archivo= new File ("[Link]");//fichero a leer 20 FileReader fr1 = new FileReader 20 FileReader fr= new FileReader (archivo);//leo
21 if(![Link]()){ (archivoUno);//leo fichero 21 BufferedReader br = new BufferedReader(fr);
22 [Link]("error, el fichero no existe"); 21 BufferedReader br1 =new BufferedReader(fr1); 22
23 } 22 23 FileWriter fichero = new FileWriter ("[Link]");
24 else{ 23 FileReader fr2 = new FileReader 24 PrintWriter pw = new PrintWriter (fichero);
25 FileReader fr= new FileReader (archivo);//abre fichero (archivoDos);//leo fichero 25
26 BufferedReader br = new BufferedReader(fr); 24 BufferedReader br2 =new BufferedReader(fr2); 26 String linea;
27 25 27 while((linea=[Link]())!=null){
28 boolean encontrado=false; 26 FileWriter fichero = new 28 int num=[Link](linea);
29 String linea; FileWriter("[Link]");//abro fichero 29 if(num%2==0){
30 27 PrintWriter pw = new PrintWriter (fichero); 30 [Link](num);
31 //leemos linea de fichero y la guardo en linea. 28 31 }
32 while((linea=[Link]())!=null && encontrado==false){ 29 String linea1, linea2; 32 }
33 String v[]=[Link](":"); //saca valores mete en vector 30 int i=1; 33 [Link]();
34 if([Link](v[1])){//comparo nombres 31 while((linea1=[Link]())!=null 34 [Link](); //cerrar fichero
35 encontrado=true;//si lo encuentras para 32 && (linea2=[Link]())!=null){ 35 }
36 } 33 [Link](i+":"+linea1+":"+linea2); 36 }
37 [Link](v[0]+" "+v[2]); //imrime los datos 34 i++; 37 catch (Exception e){
38 } 35 } 38 [Link](e);
39 [Link](); 36 [Link](); 39 }
40 37 [Link](); 40 }
41 if(encontrado==false){ 38 [Link](); 41 }
42 [Link]("no encontrado"); 39 }
43 } 40 }
44 } 41 catch (Exception e){
45 } 42 [Link](e);
46 catch (Exception e){ 43 }
47 [Link](e); 44 }
48 } 45 }
49 }
50 }

1 /* 34
2 Diseñar programa que cree el fichero [Link] 35 try {//lectura de archivo
3 con los 1000 primeros numeros pares con el 36 File archivo= new File ("[Link]"); //fichero a leer
4 formato 1:0 2:2 3:4 4:6... 37 if(![Link]()){
5 Despues mostrar por pantalla el fichero 38 [Link]("error, el fichero no existe");
6 visualizando de 10 en 10 a la espera del enter. 39 }
7 */ 40 else {
8 package fichero12; 41 FileReader fr= new FileReader (archivo);//abre fichero a leer
9 42 BufferedReader br = new BufferedReader(fr);//es el puntero
10 import [Link].*; 43
11 import [Link]; 44 String linea;
12 45 int contador=0;
13 public class Fichero12 { 46 while((linea=[Link]())!=null){
14 47 String v[]=[Link](":");
15 public static void main(String[] args) { 48 [Link](v[1]);
16 49 contador++;
17 Scanner teclado=new Scanner ([Link]); 50
18 51 if (contador==10){//para que saque de 10 en 10
19 try{//escritura en el fichero 52 contador=0;
20 FileWriter fichero = new FileWriter ("[Link]"); 53 String temp=[Link]();
21 PrintWriter pw = new PrintWriter (fichero); 54 }
22 55 }
23 int i; 56 [Link]();
24 for (i=1;i<1000;i++){ 57 [Link]();
25 if (i%2==0){ 58 }
26 [Link]((i/2)+":"+i); 59 }
27 } 60 catch (Exception e){
28 } 61 [Link](e);
29 [Link](); 62 }
30 } 63 }
31 catch (Exception e){ 64 }
32 [Link](e);
33 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 35


1 /* 1 /*
2 Diseñar programa que lea un txt, comprobar el 2 Diseñar programa que lea archivo [Link] y muestre
3 contenido, que lo lea y muestre: 3 si el numero introducido ha sido premiado y con que
4 -numero de lineas. 4 cantidad.
5 -numero de lineas minusculas. 5 */
6 -numero de lineas mayusculas. 6 package fichero16;
7 -% de letras (min y may) respecto al total de caracteres. 7
8 -cuantas veces aparece la palabra driver. 8 import [Link].*;
9 */ 9 import [Link];
10 package fichero15; 10
11 import [Link].*; 11 public class Fichero16 {
12 12
13 public class Fichero15 { 13 public static void main(String[] args) {
14 14
15 public static void main(String[] args) { 15 Scanner teclado=new Scanner ([Link]);
16 16
17 try{ 17 try{
18 File archivo=new File ("[Link]");//fichero a leer 18 File archivo=new File ("[Link]"); //fichero a leer
19 if(![Link]()){ 19 if(![Link]()){
20 [Link]("error no existe"); 20 [Link]("error no existe");
21 } 21 }
22 else{ 22 else{
23 FileReader fr=new FileReader (archivo);//leo fichero 23 int numero=0,cantidad=0;
24 BufferedReader br=new BufferedReader(fr);//es el puntero 24 [Link]("introducir un numero: ");
25 25 numero=[Link]();
26 String linea; 26
27 int lineas=0, minusc=0,mayusc=0,total=0,driver=0,i; 27 while(numero!=-1){
28 28 [Link]("introducir un numero: ");
29 //leo la linea y la almaceno en linea para trabajar 29 numero=[Link]();
30 while((linea=[Link]())!=null){ 30
31 total=total+[Link]();//suma todos los caracteres 31 FileReader fr=new FileReader (archivo);//leo fichero
32 lineas++;//total de lineas del fichero 32 BufferedReader br=new BufferedReader(fr); //es el puntero
33 33
34 if([Link]("driver")!=-1){//busca driver dentro de la linea 34 boolean encontrado=false;
35 driver++; 35 String linea;
36 } 36
37 for(i=0;i<[Link]();i++){//recorrido lineas 37 //leemos linea de fichero y la guardo en linea.
38 char letra=[Link](i);//busqueda de caracteres 38 while((linea=[Link]())!=null && encontrado==false){
39 if((letra>='a' && letra>='z')){ //minusculas 39 String v[]=[Link](":"); //saca los valores y los mete en vector
40 minusc++; //acumula minusculas 40 int num=[Link](v[0]);//convierto a entero
41 } 41 int premio=[Link](v[1]);//convierto a entero
42 if((letra>='A' && letra>='Z')){ //mayusculas 42 if(num==numero){//comparo nombre escrito con nombre archivo
43 mayusc++;//acumula mayusculas 43 encontrado=true;//si lo encuentras para
44 } 44 [Link](num+" premiado!!"+(premio*cantidad));
45 } 45 }
46 } 46 }
47 [Link](); 47 [Link]();
48 [Link]("lineas "+lineas); 48
49 [Link]("mayusculas "+mayusc); 49 if(encontrado==false){
50 [Link]("minusculas "+minusc); 50 [Link](numero+"no premiado");
51 double p=(minusc+mayusc)/(double)total; 51 }
52 [Link](p*100+" % "); 52 [Link]("introducir un numero: ");
53 [Link]("driver aparece "+driver); 53 numero=[Link]();
54 } 54 }
55 } 55 }
56 catch (Exception e){ 56 }
57 [Link](e); 57 catch (Exception e){
58 } 58 [Link](e);
59 } 59 }
60 } 60 }
61 }

1 /* 40 public static void alta() {


2 Hacer una agenda con funciones y procedimientos. 41
3 menu, alta, consulta, listado y borrar. 42 Scanner teclado=new Scanner([Link]);
4 */ 43 [Link]("alta");
5 package fichero17; 44 [Link]("dame un nombre");
6 45 String nombre=[Link]();
7 import [Link].*; 46 [Link]("dame un telefono");
8 import [Link].*; 47 String telefono=[Link]();
9 48
10 public class Fichero17 { 49 try{//con el true va añadiendo nombres y telefonos al archivo
11 50 FileWriter fichero=new FileWriter("[Link]",true);//abro fichero
12 public static void main(String[] args) { 51 PrintWriter pw=new PrintWriter(fichero);
13 int opc=0; 52 [Link](nombre+":"+telefono);
14 while(opc!=6){ 53 [Link]();
15 opc=menu();//funcion menu devuelve opcion seleccionada 54 [Link]("alta realizada!!");
16 switch(opc){ 55 }
17 case 1: alta();break; 56 catch(Exception e){
18 case 2: consulta_nombre();break; 57 [Link](e);
19 case 3: consulta_telefono();break; 58 }
20 case 4: listado();break; 59 }
21 case 5: borrar();break; 60 public static void consulta_nombre() {
22 } 61
23 } 62 Scanner teclado=new Scanner([Link]);
24 } 63 [Link]("consulta nombre");
25 public static int menu() { 64 [Link]("dame un nombre");
26 65 String nombre=[Link]();
27 [Link]("---------MENU--------"); 66
28 [Link]("1.-alta"); 67 try{
29 [Link]("2.-consultar nombre"); 68 File archivo=new File("[Link]");//compruebo que exista
30 [Link]("3.-consultar telefono"); 69 if(![Link]()){
31 [Link]("4.-listado"); 70 [Link]("error, el fichero no existe");
32 [Link]("5.-borrar agenda"); 71 }
33 [Link]("6.-salir"); 72 else{
34 73 boolean encontrado=false;//si lo encuentra, para
35 Scanner teclado=new Scanner([Link]); 74 String linea;
36 int opcion=[Link](); 75 FileReader fr=new FileReader(archivo);//leo archivo
37 76 BufferedReader br=new BufferedReader(fr);//leo archivo
38 return opcion; 77
39 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 36


78 while((linea=[Link]())!=null && encontrado==false){ 127 [Link]();
79 String v[]=[Link](":");//los datos los guarda en d 128 }
80 if(v[0].equals(nombre)){//compara los datos 129 }
81 encontrado=true; 130 catch(Exception e){
82 } 131 [Link](e);
83 } 132 }
84 if(encontrado==true){ 133 }
85 [Link]("existe!!"); 134 public static void listado() {
86 } 135
87 else{ 136 [Link]("listado");
88 [Link]("no existe!!"); 137 try{
89 } 138 File archivo=new File("[Link]");//compruebo que exista
90 [Link](); 139 if(![Link]()){
91 } 140 [Link]("error, el fichero no existe");
92 } 141 }
93 catch(Exception e){ 142 else{
94 [Link](e); 143 String linea;
95 } 144 FileReader fr=new FileReader(archivo);//leo archivo
96 } 145 BufferedReader br=new BufferedReader(fr);//leo archivo
97 public static void consulta_telefono() { 146
98 147 [Link]("nombre telefono");
99 Scanner teclado=new Scanner([Link]); 148 [Link]("---------------");
100 [Link]("consulta telefono"); 149
101 [Link]("dame un telefono"); 150 while((linea=[Link]())!=null){
102 String telefono=[Link](); 151 String d[]=[Link](":");//los datos los guarda en d
103 152 [Link](d[0]+" "+d[1]);
104 try{ 153 }
105 File archivo=new File("[Link]");//compruebo que exista 154 [Link]();
106 if(![Link]()){ 155 }
107 [Link]("error, el fichero no existe"); 156 }
108 } 157 catch(Exception e){
109 else{ 158 [Link](e);
110 boolean encontrado=false;//si lo encuentra, para 159 }
111 String linea; 160 }
112 FileReader fr=new FileReader(archivo);//leo archivo 161 public static void borrar() {
113 BufferedReader br=new BufferedReader(fr);//leo archivo 162
114 163 try{//creo nuevo fichero que pisa el antiguo y borra
115 while((linea=[Link]())!=null && encontrado==false){ 164 FileWriter fichero=new FileWriter("[Link]");//abro fichero
116 String v[]=[Link](":");//los datos los guarda en d 165 PrintWriter pw=new PrintWriter(fichero);
117 if(v[1].equals(telefono)){//compara los datos 166 [Link]();
118 encontrado=true; 167 [Link]("agenda borrada!!");
119 } 168 }
120 } 169 catch(Exception e){
121 if(encontrado==true){ 170 [Link](e);
122 [Link]("existe!!"); 171 }
123 } 172 }
124 else{ 173 }
125 [Link]("no existe!!");
126 }

1 /* 48 try{//con el true va añadiendo datos al archivo


2 Hacer una programa con funciones y procedimientos. 49 FileWriter fichero=new FileWriter("[Link]",true);//abro fichero
3 menu, alta, listado, consulta en formato 50 PrintWriter pw=new PrintWriter(fichero);
4 numero:fecha:importe 51 [Link](numero+":"+fecha+":"+importe);
5 */ 52 [Link]();
6 package fichero18; 53 [Link]("alta realizada!!");
7 54 }
8 import [Link].*; 55 catch(Exception e){
9 import [Link].*; 56 [Link](e);
10 57 }
11 public class Fichero18 { 58 }
12 59 public static void listado() {
13 public static void main(String[] args) { 60
14 int opc=0; 61 [Link]("listado");
15 while(opc!=4){ 62 try{
16 opc=menu();//funcion menu devuelve opcion seleccionada 63 File archivo=new File("[Link]");//abro fichero
17 switch(opc){ 64 if(![Link]()){//compruebo que exista
18 case 1: alta();break; 65 [Link]("error, el fichero no existe");
19 case 2: listado();break; 66 }
20 case 3: consulta_nº_factura();break; 67 else{
21 } 68 String linea;
22 } 69 FileReader fr=new FileReader(archivo);//leo archivo
23 } 70 BufferedReader br=new BufferedReader(fr);//leo archivo
24 public static int menu() { 71
25 72 [Link]("listado de facturas");
26 [Link]("-------------MENU------------"); 73 [Link]("-------------------");
27 [Link]("1.-alta"); 74
28 [Link]("2.-listado"); 75 while((linea=[Link]())!=null){
29 [Link]("3.-consultar nº factura"); 76 String d[]=[Link](":");//los datos los guarda en d
30 [Link]("4.-salir"); 77 [Link](d[0]+":"+d[1]+":"+d[2]);
31 78 }
32 Scanner teclado=new Scanner([Link]); 79 [Link]();
33 int opcion=[Link](); 80 }
34 81 }
35 return opcion; 82 catch(Exception e){
36 } 83 [Link](e);
37 public static void alta() { 84 }
38 85 }
39 Scanner teclado=new Scanner([Link]); 86 public static void consulta_nº_factura() {
40 [Link]("alta"); 87
41 [Link]("dame un nº de factura"); 88 Scanner teclado=new Scanner([Link]);
42 String numero=[Link](); 89 [Link]("consulta factura");
43 [Link]("dame una fecha"); 90 [Link]("nº de factura ?");
44 String fecha=[Link](); 91 String factura=[Link]();
45 [Link]("dame un importe"); 92
46 String importe=[Link](); 93 try{
47 94 File archivo=new File("[Link]");//abro fichero

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 37


95 if(![Link]()){//compruebo que exista
96 [Link]("error, el fichero no existe");
97 }
98 else{
99 boolean encontrado=false;//si lo encuentra, para
100 String linea;
101 FileReader fr=new FileReader(archivo);//leo archivo
102 BufferedReader br=new BufferedReader(fr);//leo archivo
103
104 while((linea=[Link]())!=null && encontrado==false){
105 String v[]=[Link](":");//los datos los guarda en d
106 if(v[0].equals(factura)){//compara los datos
107 encontrado=true;
108 }
109 }
110 if(encontrado==true){
111 [Link]("existe!!");
112 }
113 else{
114 [Link]("no existe!!");
115 }
116 [Link]();
117 }
118 }
119 catch(Exception e){
120 [Link](e);
121 }
122 }
123 }

1.6.-Borrado de línea en fichero de texto: los ficheros solo se pueden leer y escribir. Para ello creamos un fichero auxiliar
y pasamos los datos del fichero original al auxiliar, luego borro el fichero original y renombro el auxiliar.
[Link] [Link]
luis Luis
David David
Marta beatriz
beatriz

1.7.-Manipular ficheros: siempre se hace con ficheros cerrados.


Primero importar Import [Link].*;
Import [Link].*;

Path fichero1=[Link] (“[Link]”);


Ficheros a utilizar
Path fichero2=[Link] (“c:\[Link]”);

Boolean existe=[Link] (fichero1); //comprobamos que el fichero existe


Boolean puede leer=[Link] (fichero1); //comprobamos que el fichero se puede leer
Boolean puedo escribir=[Link] (fichero1); //comprobamos si se puede escribir en el
Boolean carpeta=[Link] (fichero1); //comprobamos si es una carpeta o un fichero

1 /* 27 BufferedReader br=new BufferedReader(fr);//leo archivo


2 Programa que elimina una linea de un fichero. 28
3 */ 29 FileWriter fichero=new FileWriter("[Link]");//abro archivo
4 package fichero19; 30 PrintWriter pw=new PrintWriter(fichero);//abro archivo
5 31
6 import [Link].*; 32 while((linea=[Link]())!=null){//leemos las lineas
7 import [Link].*; 33 if(![Link](nombre)){//si coinciden...
8 import [Link].*; 34 [Link](linea);//copio linea en nuevo fichero
9 import [Link]; 35 }
10 36 }
11 public class Fichero19 { 37 [Link]();
12 38 [Link]();
13 public static void main(String[] args) { 39
14 40 Path original=[Link]("[Link]");
15 Scanner teclado=new Scanner([Link]); 41 Path copia=[Link]("[Link]");
16 [Link]("introduce nombre a eliminar"); 42 [Link](original);//eliminamos fichero original
17 String nombre=[Link](); 43 [Link](copia,original);//cambiamos nombre
18 44
19 try{ 45 [Link]("eliminacion realizada");
20 File archivo=new File("[Link]");//abrimos el fichero 46 }
21 if(![Link]()){//compruebo que exista 47 }
22 [Link]("error, el fichero no existe"); 48 catch(Exception e){
23 } 49 [Link](e);
24 else{ 50 }
25 String linea; 51 }
26 FileReader fr=new FileReader(archivo);//leo archivo 52 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 38


1 /* 1 /*
2 Solicitar al usuario la ruta de una carpeta, 2 Programa que lea el fichero anterior (desde
3 comprobar si existe, si es asi, crear dentro 3 la carpeta donde se encuentra) y muestre los
4 de ella el fichero [Link] con los numeros 4 numeros en pantalla en dos columnas.
5 del 1 al 20 y despues renombrar el fichero 5 */
6 por [Link]. 6 package fichero21;
7 */ 7
8 package fichero20; 8 import [Link].*;
9 9
10 import [Link].*; 10 public class Fichero21 {
11 import [Link].*; 11
12 import [Link].*; 12 public static void main(String[] args) {
13 import [Link]; 13
14 14 try{
15 public class Fichero20 { 15 File archivo=new File("[Link]");//abrimos el fichero
16 16 if(![Link]()){//compruebo que exista
17 public static void main(String[] args) { 17 [Link]("error, el fichero no existe");
18 18 }
19 Scanner teclado=new Scanner([Link]); 19 else{
20 [Link]("introduce ruta carpeta: "); 20 String linea1,linea2;
21 String carpeta=[Link](); 21 FileReader fr=new FileReader(archivo);//leo archivo
22 22 BufferedReader br=new BufferedReader(fr);
23 try{ 23
24 Path carp=[Link](carpeta); 24 int i=0;
25 if([Link](carp)){//es directorio la carpeta? 25 while((linea1=[Link]())!=null && (linea2=[Link]())!=null){//leo el numero
26 //creo fichero en carpeta que introducí por teclado 26 [Link](linea1+"- "+linea2);
27 FileWriter fichero=new FileWriter(carpeta+"\\"+"[Link]");//abro archivo 27 }
28 PrintWriter pw=new PrintWriter(fichero); 28 [Link]();
29 29 }
30 int i; 30 }
31 for(i=1;i<=20;i++){ 31 catch(Exception e){
32 [Link](i+" "); 32 [Link](e);
33 } 33 }
34 [Link](); 34 }
35 35 }
36 //para renombrar el archivo
37 File archivo=new File(carpeta+"\\"+"[Link]");
38 [Link](new File(carpeta+"\\"+"[Link]"));
39 [Link]("creacion finalizada");
40 }
41 else{
42 [Link]("la carpeta no existe");
43 }
44 }
45 catch(Exception e){
46 [Link](e);
47 }
48 }
49 }

1 /* 1 /*
2 Diseñar un programa que cree el fichero 2 Diseñar programa con fichero [Link]
3 [Link] con las letras minusculas 3 que almacene palabras hasta que se le
4 de la a a la z. 4 diga que no.
5 */ 5 */
6 package fichero22; 6 package fichero23;
7 7
8 import [Link].*; 8 import [Link].*;
9 import [Link].*; 9 import [Link].*;
10 10 import [Link];
11 public class Fichero22 { 11
12 12 public class Fichero23 {
13 public static void main(String[] args) { 13
14 14 public static void main(String[] args) {
15 try{ 15
16 FileWriter fichero=new FileWriter("[Link]");//abro archivo 16 Scanner teclado=new Scanner([Link]);
17 PrintWriter pw=new PrintWriter(fichero); 17 [Link]("fichero [Link] nuevo SI/NO?: ");
18 18 String nuevo=[Link]();
19 char letra; 19 boolean respuesta;
20 for(letra='a';letra<='z';letra++){ 20
21 [Link](letra); 21 if([Link]("si")){//si el usuario mete si crea uno nuevo
22 } 22 respuesta=false;
23 [Link](); 23 }
24 } 24 else{
25 catch(Exception e){ 25 respuesta=true;//si el usuario mete no, se añade al fichero
26 [Link](e); 26 }
27 } 27 try{
28 } 28 //abre el fichero y coje valor de la boolean
29 } 29 FileWriter fichero=new FileWriter("[Link]",respuesta);//abro archivo
30 PrintWriter pw=new PrintWriter(fichero);
31
32 nuevo="si";//bucle que escribe en el fichero
33 while([Link]("si")){
34 [Link]("escriba palabra: ");
35 String palabra=[Link]();
36 [Link](palabra);
37 [Link]("continuar si/no?: ");
38 nuevo=[Link]();
39 }
40 [Link]();
41 }
42 catch(Exception e){
43 [Link](e);
44 }
45 }
46 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 39


RESUMEN Ficheros de texto secuenciales
Escribir nuevo FileWriter
Escribir archivo FileWriter (true)
Leer por líneas FileReader

En java todo lo referente a entrada/salida de datos se denomina stream y se programa igual.

Un streams es un canal por el que entran o salen datos. Las clases que manipulan los streams se dividen en dos:

• Los que trabajan con bytes. ImputStream OutputStreams.


• Los que trabajan con caracteres. Reader Writer.

2.-Ficheros secuenciales binarios.


Almacenan información binaria (1,0), cualquier cosa (imagen, video, texto…)
1 /* 23 //para leer
2 --- 24 try{
3 */ 25 DataInputStream fb=new DataInputStream(new FileInputStream("[Link]"));
4 package fichero24; 26 char c1=[Link]();
5 27 int c2=[Link]();
6 import [Link].*; 28 double c3=[Link]();
7 29
8 public class Fichero24 { 30 [Link]();
9 31 [Link](c1+" "+c2+" "+c3);
10 public static void main(String[] args) { 32 }
11 //para escribir 33 catch(Exception e){
12 try{ 34 [Link](e);
13 DataOutputStream fb=new DataOutputStream(new FileOutputStream("[Link]")); 35 }
14 [Link]('c'); 36 }
15 [Link](23); 37 }
16 [Link](45.2);
17
18 [Link]();
19 }
20 catch(Exception e){
21 [Link](e);
22 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 40


3.-Ficheros aleatorios de texto.
Los datos se almacenan en base a un índice único. ReadLine lee hasta que encuentra un \n. (salto).

fichero fichero
1 luis 1 l
2 2 u
3 david 3 i
4 4 s
5 5 \n
6 beatriz 6
7 7 u
8 8 n

El problema es donde escribir los registros ¿en que me baso?, por que se machacan los nombres. Una solución es usas un
dato del registro (código, matricula, dni) como posicionador, debe ser un dato no repetitivo.
1 /* 1 /*
2 -- 2 Programa mete codigos y nombre y almacena
3 */ 3 en fichero, luego se buscan por codigo.
4 package fichero26; 4 */
5 5 package fichero26a;
6 import [Link].*; 6
7 import [Link]; 7 import [Link].*;
8 8 import [Link];
9 public class Fichero26 { 9
10 10 public class Fichero26a {
11 public static void main(String[] args) { 11
12 12 public static void main(String[] args) {
13 Scanner teclado=new Scanner ([Link]); 13 Scanner teclado=new Scanner ([Link]);
14 14
15 String nombre; 15 int codigo;
16 16 String nombre;
17 try{//abro fichero para leer y escribir 17
18 RandomAccessFile fichero=new RandomAccessFile("[Link]","rw"); 18 try{//abro fichero para leer y escribir
19 19 RandomAccessFile fichero=new RandomAccessFile("[Link]","rw");
20 [Link]("nombre: ");//para escribir en el archivo 20
21 nombre=[Link](); 21 int i;
22 [Link](1);//me situo en el byte 10 22 for(i=0;i<3;i++){
23 [Link](nombre+"\n"); 23 [Link]("codigo [1-100]: ");
24 24 codigo=[Link]();
25 [Link]("nombre: ");//para escribir en el archivo 25 [Link]();
26 nombre=[Link](); 26 [Link]("nombre [máx 10 caracteres]: ");
27 [Link](3);//me situo en el byte 10 27 nombre=[Link]();
28 [Link](nombre+"\n"); 28
29 29 [Link](codigo*10);
30 [Link](1);//para leer en el archivo 30 [Link](nombre+"\n");
31 String n=[Link](); 31 }
32 [Link](n); 32
33 33 [Link]("codigo [1-100] a buscar: ");
34 [Link](3);//para leer en el archivo 34 codigo=[Link]();
35 String m=[Link](); 35
36 [Link](m); 36 while(codigo!=-1){
37 [Link](); 37 [Link](codigo*10);
38 38
39 } 39 String nom=[Link]();
40 catch(Exception e){ 40 [Link](nom);
41 [Link](e); 41
42 } 42 [Link]("codigo [1-100] a buscar: ");
43 } 43 codigo=[Link]();
44 } 44 }
45 [Link]();
46
47 }
48 catch(Exception e){
49 [Link](e);
50 }
51 }
52 }

1 /* 22 for (i=0;i<N;i++) {
2 Diseñar un programa que cargue un array 23 [Link]("introduce 5 numeros: ");
3 por teclado con 5 numeros. Ordenar el 24 v[i]=[Link]();
4 array y mostrarlo en pantalla, cargar el 25 }
5 array en el fichero [Link] 26 [Link](v);
6 */ 27
7 package fichero25; 28 for (i=0;i<N;i++) {
8 29 [Link] (v[i]+" "); //imprime el vector
9 import [Link].*; 30 }
10 import [Link]; 31 try{
11 import [Link]; 32 FileWriter fichero=new FileWriter("[Link]");//abro archivo
12 33 PrintWriter pw=new PrintWriter(fichero);//abro archivo
13 public class Fichero25 { 34
14 35 for (i=0;i<N;i++) {
15 public static void main(String[] args) { 36 [Link] (v[i]+" "); //imprime el vector
16 Scanner teclado=new Scanner ([Link]); 37 }
17 38 [Link]();
18 final int N=5; 39 }
19 int v[]=new int [N]; 40 catch(Exception e){
20 int i; 41 [Link](e);
21 42 }
43 }
44 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 41


1 /* 1 /*
2 Menu, alta desempleado, consulta por puesto, salir. 2 Programa en el que se escribe continuamente frases
3 1.- pedira nombre, fecha nacimiento, tfno, 3 por teclado. Cuando escriba la palabra salir, el
4 catagoria, experiencia y los guarda en [Link]. 4 programa no pedira mas frases.
5 2.- pedira una categoria y mostrara por pantalla 5 */
6 los candidatos disponibles y su experiencia. 6 package fichero31;
7 */ 7
8 package fichero28; 8 import [Link];
9 9 import [Link];
10 import [Link].*; 10 import [Link];
11 import [Link].*; 11 import [Link];
12 12 import [Link];
13 public class Fichero28 { 13 import [Link];
14 14
15 public static void main(String[] args) { 15 public class Fichero31 {
16 16
17 int opc=0; 17 public static void main(String[] args) {
18 while(opc!=3){ 18
19 opc=menu();//funcion menu devuelve opcion seleccionada 19 Scanner teclado=new Scanner ([Link]);
20 switch(opc){ 20
21 case 1: alta_desempleado();break; 21 try{
22 case 2: consulta_desempleado();break; 22 FileWriter fichero = new FileWriter("[Link]");//abro archivo
23 } 23 PrintWriter pw = new PrintWriter(fichero);
24 } 24
25 } 25 String linea=[Link]();
26 public static int menu() { 26 while (![Link]("SALIR")){
27 27 [Link](linea);
28 [Link]("-------------MENU------------"); 28 linea=[Link]();
29 [Link]("1.-alta desempleado"); 29 }
30 [Link]("2.-consulta por puesto"); 30 [Link](); //cierro el fichero
31 [Link]("3.-salir"); 31 }
32 32 catch(Exception e){
33 Scanner teclado=new Scanner([Link]); 33 [Link](e);
34 int opcion=[Link](); 34 }
35 35
36 return opcion; 36 try{
37 } 37 File archivo= new File ("[Link]"); //leo archivo
38 public static void alta_desempleado() { 38 if(![Link]()){
39 39 [Link]("error no existe");
40 Scanner teclado=new Scanner([Link]); 40 }
41 [Link]("dar de alta desempleado"); 41 else{
42 [Link]("nombre: "); 42 FileReader fr= new FileReader (archivo);
43 String nombre=[Link](); 43 BufferedReader br = new BufferedReader(fr); //es el puntero
44 [Link]("fecha nacimiento: "); 44
45 String fecha=[Link](); 45 String linea;
46 [Link]("telefono: "); 46 while((linea=[Link]())!=null){ //miestras linea sea diferente de nulo
47 String telefono=[Link](); 47 //int num=[Link](linea); si se quiere leer numeros hay que convertir
48 [Link]("categoria: "); 48 [Link](linea); //cambiar linea por num para que se vean los numeros
49 String categoria=[Link](); 49 }
50 [Link]("experiencia: "); 50 [Link]();
51 String experiencia=[Link](); 51 }
52 52 }
53 try{//con el true va añadiendo datos al archivo 53 catch (Exception e){
54 FileWriter fichero=new FileWriter("[Link]",true); 54 [Link](e);
55 PrintWriter pw=new PrintWriter(fichero); 55 }
56 [Link](nombre+":"+fecha+":"+telefono+":"+categoria+":"+experiencia); 56 }
57 [Link](); 57 }
58 [Link]("alta realizada!!");
59 }
60 catch(Exception e){
61 [Link](e);
62 }
63 }
64 public static void consulta_desempleado() {
65
66 Scanner teclado=new Scanner([Link]);
67 [Link]("consulta desempleado");
68 [Link]("introduzca categoria: ");
69 String categoria=[Link]();
70
71 try{
72 File archivo=new File("[Link]");//abrimos el fichero
73 if(![Link]()){//compruebo que exista
74 [Link]("error, el fichero no existe");
75 }
76 else{
77 boolean encontrado=false;//si lo encuentra, para
78 String linea;
79 FileReader fr=new FileReader(archivo);//leo archivo
80 BufferedReader br=new BufferedReader(fr);//leo archivo
81
82 while((linea=[Link]())!=null){
83 String v[]=[Link](":");//los datos los guarda en d
84 if(v[3].equals(categoria)){//compara los datos2
85 [Link]("nombre: "+v[0]+" experiencia: "+v[4]);
86 }
87 }
88 [Link]();
89 }
90 }
91 catch(Exception e){
92 [Link](e);
93 }
94 }
95 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 42


1 /* 39 while((linea=[Link]())!=null){
2 Programa de juego de preguntas, crear fichero 40 String v[]=[Link](":");//separa en vector respuesta y pregunta
3 [Link] con formato pregunta:respuesta, 41 preguntas[fila][0]=v[0];//carga pregunta a array
4 con un total de 20 preguntas. 42 preguntas[fila][1]=v[1];//carga respuesta a array
5 el programa cargara el fichero en un vector. 43 fila++;
6 despues realizara 5 preguntas al azar y nos 44 }
7 dira cuantas hemos acertado. 45 }
8 */ 46 }
9 package fichero27; 47 catch(Exception e){
10 48 [Link](e);
11 import [Link].*; 49 }
12 import [Link]; 50 }
13 import [Link]; 51 public static int aleatorios(){
14 52 Random aleatorio=new Random();
15 public class Fichero27 { 53
16 54 int numpregunta=[Link](20)+0;//genera aleatorio
17 public static void main(String[] args) { 55 return numpregunta;
18 final int FIL=20; 56 }
19 final int COL=2; 57 public static int preguntar(String preguntas[][]){
20 int aciertos; 58 Scanner teclado=new Scanner([Link]);
21 String preguntas[][]=new String[FIL][COL]; 59 final int CP=5;
22 60 int contador=0, numale=0, aciertos=0;
23 cargar(preguntas); 61 String respuesta;
24 aciertos=preguntar(preguntas); 62 while(contador<CP){
25 [Link]("fin del juego has tenido "+aciertos+" aciertos"); 63 numale=aleatorios();//llama a aleatorios
26 } 64 [Link](preguntas[numale][0]+"?:");//hace la pregunta
27 public static void cargar(String preguntas[][]) { 65 respuesta=[Link]();//introducir respuesta
28 66 respuesta=[Link]();//la pasa a mayusculas para comprobar
29 try{ 67 if([Link](preguntas[numale][1])){//comprueba si se acerto
30 File archivo=new File ("[Link]"); 68 aciertos++;
31 if( ![Link]()){ 69 [Link]("acertada");
32 [Link]("Error, el fichero no existe"); 70 }
33 } 71 else{
34 else{ 72 [Link]("fallada");
35 String linea; 73 }
36 FileReader fr=new FileReader (archivo); 74 contador++;
37 BufferedReader br=new BufferedReader(fr); 75 }
38 int fila=0; 76 return aciertos;
77 }
78 }

1 /* 49 String linea;
2 Programa que pida dni y muestre el nombre 50 boolean encontrado=false;
3 de la persona y el resultado de restar 51 while((linea=[Link]())!=null){
4 ingresos-deducciones. 52 String v[]=[Link](":");
5 */ 53 String conv=v[0];
6 package fichero29; 54 int num=[Link](conv);
7 55 if(dni==num && encontrado==false){
8 import [Link].*; 56 //if que devuelve resultado segun se busque obtener
9 import [Link].*; 57 //nombre o ingreso o deduccion
10 58 if([Link]("[Link]")){
11 public class Fichero29 { 59 vector[0]=v[1];
12 60 encontrado=true;
13 public static void main(String[] args) { 61 }
14 int dni; 62 else if([Link]("[Link]")){
15 final int N=3; 63 vector[1]=v[1];
16 String vector[]=new String[N]; 64 encontrado=true;
17 String busca; 65 }
18 66 else{
19 dni=dni(); 67 vector[2]=v[1];
20 //se puede controlar el fallo si el dni no esta presente 68 encontrado=true;
21 69 }
22 busca="[Link]"; 70 }
23 buscar(dni, vector, busca); 71 }
24 busca="[Link]"; 72 if(encontrado==false){
25 buscar(dni, vector, busca); 73 vector[2]="0";//cuando no hay deducciones
26 busca="[Link]"; 74 }
27 buscar(dni, vector, busca); 75 [Link]();
28 76 }
29 resultado(vector); 77 }
30 } 78 catch(Exception e){
31 public static int dni(){ 79 [Link](e);
32 Scanner teclado=new Scanner([Link]); 80 }
33 int dni; 81 }
34 [Link]("Introduce dni: "); 82 public static void resultado(String vector[]){
35 dni=[Link](); 83 String ingresos=vector[1];
36 84 String deducciones=vector[2];
37 return dni; 85 int ing=[Link](ingresos);
38 } 86 int ded=[Link](deducciones);
39 public static void buscar(int dni, String vector[], String busca){ 87 [Link](vector[0]+" total: "+(ing-ded));
40 try{ 88 }
41 File archivo = new File (busca); 89 }
42 if(![Link]()){
43 [Link]("Error, el fichero no existe");
44 }
45 else{
46 FileReader fr = new FileReader (archivo);
47 BufferedReader br = new BufferedReader (fr);
48

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 43


TEMA 5 UTILIZACIÓN DE OBJETOS (APLICACIONES BASADAS EN OBJETOS)

Programación orientada a objetos (POO) fue una evolución de la programación estructurada.


Programación estructurada Lenguajes estructurados Lenguajes POO
Encapsulación c C++
Herencia pascal turboPascal
polimorfismo

1.-Objetivos.
Incrementa la eficiencia del software, decrementan los costes de producción, decrementan errores de
programación y permite reutilizar el código.

Supone realizar un análisis más detallado del programa y el tiempo de diseño aumenta.
ANALISIS DISEÑO IMPLEMENTACION PRUEBAS
¿Que tiene que hacer? Diagrama UML, MER Programación

Aumenta mucho el tiempo porque se plantea un programa en partes pequeñas con el objetivo de reutilizar esas
partes en el futuro. Exige conocer la teoría de objetos para programar.

2.-Clase.
Es la base de la programación orientada a objetos, podemos verla como una plantilla.
Clase (características comunes)
S.O. Samsumg galaxy
Ram Nokia Lumia
Cámara Huawei

Una clase va a definir las variables y métodos comunes a todos los objetos de esa clase. A las variables las
llamaremos atributos y a las operaciones métodos.

Public class Persona {


String Nombre; àatributos
Public void saluda() { àmétodos
[Link],print(“hola”);
}
}

La primera letra de la clase será en Mayúscula. Después se ponen los atributos y después los métodos. Para usar
una clase debemos crear el objeto correspondiente (instanciar).

Clase nombre=new Clase();


Persona p=new Persona();

3.-Objeto.
Es la instancia de una clase en tiempo de ejecución, no es lo mismo una clase que un objeto.
clase objeto
Persona a =new Persona();
[Link]=”luis”;
clase objeto
Persona b =new Persona();
[Link]=”david”;

Al ejecutar el programa los objetos se crean en la RAM.


objeto RAM CLASE UML
a luis Persona àNombre
b david Nombre:String àTipo
Saluda(); àOperación

4.-Principio de encapsulación.
Es un mecanismo que permite que las clases sean como cajas negras. Buscan ocultar código para el usuario de la
clase, conseguiremos simplificar su uso y evitar errores.

En Java la encapsulación se consigue con 3 modificadores:

• public + (el atributo o método es accesible desde fuera de la clase.)

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 44


• private – (el atributo o método no es accesible desde fuera de la clase y no pasa a los descendientes en la
herencia.)

• protected # (el atributo o método no es accesible desde fuera de la clase pero si pasa a los descendientes en
la herencia.)

4.1.-Cuando algo es publico o privado?:


• todos los atributos de una clase serán privados siempre.
• Los métodos que quiero que se usen desde fuera serán public.
• Los métodos internos serán private.

Toda clase tiene métodos especiales que se llaman set y get para trabajar con los atributos. Para manipular los
atributos:

• Todo atributo debe estar escrito en minúsculas.


• Cada atributo tiene un método set y get.
• Se crean siempre de la misma manera.
• Mas adelante veremos como evitar escribirlos.
• Set se utiliza para dar valor a un atributo.
• Get se utiliza para obtener el valor del atributo.
• El método toString() devuelve los valores de todos los atributos.

Las clases las utilizamos para almacenar clases. Por convenio si una operación devuelve algo va precedido por get
(no es obligatorio).

MAIN CLASE Persona UML Persona


1 /* 1 /* -nombre:String
2 -- 2 --
3 */ 3 */ -edad:int
4 package objeto01; 4 package objeto01; +setNombre(String)
5 5
6 public class Objeto01 { 6 public class Persona { +setedad(int)
7 7 +getNombre():String
8 public static void main(String[] args) { 8 //atributos
9 Persona p=new Persona(); 9 private String nombre; +getEdad():String
10 10 private int edad; 22 public int getEdad(){
11 [Link]("luis");//accedo al atributo 11 //set 23 return [Link];
12 [Link](15);//accedo al atributo 12 public void setNombre(String nombre){ //luis 24 }
13 13 [Link]=nombre; //luis 25 //metodos
14 String n=[Link](); 14 } 26 public void saluda(){
15 [Link](n); 15 public void setEdad(int edad){ //15 27 [Link]("hola");
16 [Link]();//llamo a la operacion 16 [Link]=edad; //15 28 }
17 } 17 } 29 }
18 } 18 //get
19 public String getNombre(){
20 return [Link];
21 }

MAIN CLASE Coche UML Coche


1 /* 1 /* -matricula:String
2 Diseñar una clase coche (matricula, marca, 2 --
3 modelo) con sus get y set. 3 */ -marca:String
4 */ 4 package objeto02; -modelo:String
5 package objeto02; 5
6 6 public class Coche { +setMatricula(String)
7 public class Objeto02 { 7 private String matricula;//atributo
8 8 private String marca;//atributo
+setMarca(String)
9 public static void main(String[] args) { 9 private String modelo;//atributo +setModelo(String)
10 10
11 Coche c=new Coche();//instancio el objeto, lo creo 11 public void setMatricula(String matricula){
+getMatricula():String
12 12 [Link]=matricula; +getMarca():String
13 [Link]("333abc");//doy valores al atributo 13 }
14 [Link]("audi");//doy valores al atributo 14 public void setMarca(String marca){ +getModelo():String
15 [Link]("a4");//doy valores al atributo 15 [Link]=marca; +toString():String
16 16 }
26 public String getModelo(){
17 String datos=[Link]();//invoco a toString 17 public void setModelo(String modelo){
27 return [Link];
18 [Link](c);//si no se pone nada, java llama a toString 18 [Link]=modelo;
28 }
19 } 19 }
29 public String toString(){
20 } 20 public String getMatricula(){
30 return "coche{"+"matricula="+matricula+
21 return [Link];
31 ",marca="+marca+
22 }
32 ",modelo="+modelo+
23 public String getMarca(){
33 "}";
24 return [Link];
34 }
25 }
35 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 45


MAIN CLASE Ordenador UML Ordenador
1 /* 1 /* -cpu:String
2 Diseñar una clase ordenador 2 --
3 (cpu,hd,ram,precio) con set get. 3 */ -hd:double
4 */ 4 package objeto03; -ram:double
5 package objeto03; 5
6 6 public class Ordenador { -precio:double
7 public class Objeto03 { 7 private String cpu;
8 8 private double hd;
+setCpu(String)
9 public static void main(String[] args) { 9 private double ram; +setHd(double)
10 Ordenador o=new Ordenador();//instancio el objteto, lo creo 10 private double precio;
11 11
+setRam(double)
12 [Link]("Pentium");//doy valores al atributo 12 public void setCpu(String cpu){ +setPrecio(double)
13 [Link](1000);//doy valores al atributo 13 [Link]=cpu;
14 [Link](16);//doy valores al atributo 14 } +getCpu():String
15 [Link](600);//doy valores al atributo 15 public void setHd(double hd){ +getHd():double
16 16 [Link]=hd;
17 String datos=[Link]();//invoco a toString 17 } +getRam():double
18 [Link](o);//si no se pone nada, java llama a toString 18 public void setRam(double ram){ +getRPrecio():double
19 } 19 [Link]=ram;
20 } 20 } +toString():String
21 public void setPrecio(double precio){ 33 public double getprecio(){
22 [Link]=precio; 34 return [Link];
23 } 35 }
24 public String getCpu(){ 36 public String toString(){
25 return [Link]; 37 return "ordenador{cpu="+cpu+
26 } 38 ",hd="+hd+
27 public double getHd(){ 39 ",ram="+ram+
28 return [Link]; 40 ",precio="+precio+
29 } 41 "}";
30 public double getRam(){ 42 }
31 return [Link]; 43 }
32 }

MAIN CLASE Libro UML Libro


1 /* 1 /* -isbn:String
2 Diseñar una clase libro 2 --
3 (isbn,titulo,autor) con set get. 3 */ -titulo:String
4 */ 4 package objeto04; -autor:String
5 package objeto04; 5
6 6 public class Libro { +toString():String
7 public class Objeto04 { 7 private String isbn; 23 public String getTitulo(){
8 8 private String titulo; 24 return [Link];
9 public static void main(String[] args) { 9 private String autor; 25 }
10 Libro l=new Libro();//instancio el objteto, lo creo 10 26 public String getAutor(){
11 11 public void setIsbn(String isbn){ 27 return [Link];
12 [Link]("123456");//doy valores al atributo 12 [Link]=isbn; 28 }
13 [Link]("el quijote");//doy valores al atributo 13 } 29 public String toString(){
14 [Link]("cervantes");//doy valores al atributo 14 public void setTitulo(String titulo){ 30 return "libro{isbn="+isbn+
15 15 [Link]=titulo; 31 ",titulo="+titulo+
16 [Link](l);//muestro los datos 16 } 32 ",autor="+autor+
17 } 17 public void setAutor(String autor){ 33 "}";
18 } 18 [Link]=autor; 34 }
19 } 35 }
20 public String getIsbn(){
21 return [Link];
22 }

MAIN CLASE Bombilla UML Bombilla


1 /* 1 /* -potencia:double
2 Diseñar una clase bombilla (potencia double, 2 --
3 puede estar encendida o apagada). 3 */ -estado:boolean
4 */ 4 package objeto05; +toString():String
5 package objeto05; 5
6 6 public class Bombilla {
7 public class Objeto05 { 7 private double potencia;
8 8 private boolean estado;
9 public static void main(String[] args) { 9
10 Bombilla b=new Bombilla(); 10 public void setPontencia(double pontencia){
11 11 [Link]=pontencia;
12 [Link](40); 12 }
13 [Link](true); 13 public void setEstado(boolean estado){
14 14 [Link]=estado;
15 [Link](b); 15 }
16 } 16 public double getPotencia(){
17 } 17 return [Link];
18 }
19 public boolean getEstado(){
20 return [Link];
21 }
22 public String toString(){
23 return "bombilla{potencia="+potencia+
24 ",estado="+estado+
25 "}";
26 }
27 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 46


MAIN CLASE Ecuacion UML Ecuacion
1 /* 1 /* -a:double
2 Diseñar clase ecuación con 2 soluciones. 2 --
3 */ 3 */ -b:double
4 package objeto06; 4 package objeto06; -c:double
5 5
6 public class Objeto06 { 6 public class Ecuacion { +getsolucion1():double
7 7 private double a;
8 public static void main(String[] args) { 8 private double b;
+getsolucion2 ():double
9 Ecuacion e=new Ecuacion(); 9 private double c; +toString():String
10 10 26 public double getC(){
11 [Link](2); 11 public void setA(double a){ 27 return c;
12 [Link](5); 12 this.a=a; 28 }
13 [Link](1); 13 } 29 public String toString(){
14 14 public void setB(double b){ 30 return "ecuacion{a="+a+
15 [Link](e); 15 this.b=b; 31 ",b="+b+
16 [Link](e.getSolucion1()); 16 } 32 ",c="+c+
17 [Link](e.getSolucion2()); 17 public void setC(double c){ 33 "}";
18 } 18 this.c=c; 34 }
19 } 19 } 35 public double getSolucion1(){
20 public double getA(){ 36 return (-b+[Link](b*b-4*a*c))/(2*a);
21 return a; 37 }
22 } 38 public double getSolucion2(){
23 public double getB(){ 39 return (-[Link](b*b-4*a*c))/(2*a);
24 return b; 40 }
25 } 41 }

MAIN CLASE Fecha UML Fecha


1 /* 1 /* -dia:int
2 Diseñar una clase fecha con (dia,mes,año) 2 --
3 y metodos set, get, toString. añadir dos metodos: 3 */ -mes:int
4 getFechaCorta():String 4 package objeto07; -anyo:int
5 getFechaLarga():String. crear el UML. 5
6 */ 6 public class Fecha { +getfecha Corta():String
7 package objeto07; 7 private int dia;
8 8 private int mes;
+getFechaLarga ():String
9 public class Objeto07 { 9 private int anyo; +toString():String
10 10 35 public String getFechaCorta(){
11 public static void main(String[] args) { 11 public void setDia(int dia){ 36 return (dia+"/"+mes+"/"+anyo);
12 Fecha f=new Fecha(); 12 [Link]=dia; 37 }
13 13 } 38 public String getFechaLarga(){
14 [Link](2); 14 public void setMes(int mes){ 39 return (dia+" de "+muestra_mes(mes)+" del "+anyo);
15 [Link](4); 15 [Link]=mes; 40 }
16 [Link](2016); 16 } 41 private String muestra_mes(int mes){
17 17 public void setAnyo(int anyo){ 42 String muestra="";
18 [Link]([Link]()); 18 [Link]=anyo; 43 switch(mes){
19 [Link]([Link]()); 19 } 44 case 1: muestra="enero";break;
20 } 20 public int getDia(){ 45 case 2: muestra="febrero";break;
21 } 21 return dia; 46 case 3: muestra="marzo";break;
22 } 47 case 4: muestra="abril";break;
23 public int getMes(){ 48 case 5: muestra="mayo";break;
24 return mes; 49 case 6: muestra="junio";break;
25 } 50 case 7: muestra="julio";break;
26 public int getAnyo(){ 51 case 8: muestra="agosto";break;
27 return anyo; 52 case 9: muestra="septiembre";break;
28 } 53 case 10: muestra="octubre";break;
29 public String toString(){ 54 case 11: muestra="noviembre";break;
30 return "fecha{dia="+dia+ 55 case 12: muestra="diciembre";break;
31 ",mes="+mes+ 56 }
32 ",año="+anyo+ 57 return muestra;
33 "}"; 58 }
34 } 59 }

MAIN CLASE Hora UML Hora


1 /* 1 /* -hora:int
2 Diseñar una clase Hora con los atributos 2 --
3 (hora,minutos,segundos) 3 */ -minutos:int
4 */ 4 package objeto08; -segundos:int
5 package objeto08; 5
6 6 public class Hora { +getHoraCorta ():String
7 public class Objeto08 { 7 private int hora;
8 8 private int minutos;
+toString():String
9 public static void main(String[] args) { 9 private int segundos; 33 "}";
10 Hora h=new Hora(); 10 34 }
11 11 public void setHora(int hora){ 35 public String getHoraSimple(){
12 [Link](12); 12 [Link]=hora; 36 return (hora+":"+minutos+":"+segundos);
13 [Link](4); 13 } 37 }
14 [Link](34); 14 public void setMinutos(int minutos){ 38 public String getHoraCorta(){
15 15 [Link]=minutos; 39 //convierto los numeros a texto
16 [Link](h); 16 } 40 String h=[Link]([Link]);
17 17 public void setSegundos(int segundos){ 41 String m=[Link]([Link]);
18 [Link]([Link]()); 18 [Link]=segundos; 42 String s=[Link]([Link]);
19 [Link]([Link]()); 19 } 43
20 } 20 public int getHora(){ 44 if([Link]<10){
21 } 21 return hora; 45 h="0"+[Link];
22 } 46 }
23 public int getMinutos(){ 47 if([Link]<10){
24 return minutos; 48 m="0"+[Link];
25 } 49 }
26 public int getSegundos(){ 50 if([Link]<10){
27 return segundos; 51 s="0"+[Link];
28 } 52 }
29 public String toString(){ 53 return (h+":"+m+":"+s);
30 return "Hoora{hora="+hora+ 54 }
31 ",minutos="+minutos+ 55 }
32 ",segundos="+segundos+

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 47


5.-La línea de instanciación.
Consta de dos partes:
Libro lib1= New Libro();
Parte 1 Parte2

Libro lib1: crea una referencia (un puntero) a la posición de memoria del objeto. RAM
New libro(); crea el objeto en la memoria RAM, crea la flecha hacia la posición lib1. 1000
1001
à 1002 New libro
1003
1004
1005
1006

RAM
Lib 1 Isbn 1111 Posición -Al poner lib1=lib2 queda sin ocupar (no tiene referencias, es imposible acceder a el)
-Ocupa RAM de forma inecesaria
Lib 2 Isbn 2222 Posición -En otros lenguajes el programador debe liberar este espacio. Java da la solución.
Lib 3

El recolector de basura (garbage collector) propone que se ejecuta en segundo plano de forma asíncrona (no
controlada) que libera de RAM objetos sin referencia.

MAIN CLASE Libro UML Libro


1 /* 1 /* -isbn:String
2 -- 2 --
3 */ 3 */ -titulo:String
4 package objeto09; 4 package objeto09; -autor:String
5 5
6 public class Objeto09 { 6 public class Libro { +toString():String
7 7 private String isbn;
8 public static void main(String[] args) { 8 private String titulo;
9 9 private String autor;
10 Libro lib1=new Libro("1111","viaje a la luna","julio verne"); 10
11 Libro lib2=new Libro("2222","viaje a la tierra","julio verne"); 11 public Libro(String isbn, String titulo, String autor){//constructor
12 12 [Link]=isbn;
13 [Link]("1111"); 13 [Link]=titulo;
14 [Link]("2222"); 14 [Link]=autor;
15 15 }
16 [Link]([Link]());//muestra los datos 16 public void setIsbn(String isbn){
17 [Link]([Link]());//muestra los datos 17 [Link]=isbn;
18 18 }
19 [Link](lib1);//muestra posiciones de la memoria 19 public void setTitulo(String titulo){
20 [Link](lib2);//muestra posiciones de la memoria 20 [Link]=titulo;
21 21 }
22 lib1=lib2;//cambio el puntero de lib1 hacia lib2 22 public void setAutor(String autor){
23 23 [Link]=autor;
24 [Link]([Link]());//muestra los datos 24 }
25 [Link]([Link]());//muestra los datos 25 public String getIsbn(){
26 26 return [Link];
27 [Link](lib1);//muestra posiciones de la memoria 27 }
28 [Link](lib2);//muestra posiciones de la memoria 28 public String getTitulo(){
29 29 return [Link];
30 Libro lib3=null;//creo puntero lib3 pero sin nada 30 }
31 lib3=lib2;//cambio puntero de lib3 hacia lib2 31 public String getAutor(){
32 32 return [Link];
33 [Link]([Link]()); 33 }
34 } 34 }
35 }

6.-Constructores.
Son métodos especiales (no obligatorios) de una clase. Se ejecutan solo una vez al instanciar la clase. Se suelen usar
para dar valor inicial a los atributos y tareas como abrir una conexión a un fichero, BD, red….
Libro lib1= New Libro(); Creación: Public Libro (String isbn,String titulo,String autor)
Se ejecuta el constructor this isbn=isbn;
this titulo=titulo;
this autor=autor;

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 48


RAM
1
Libro a=new Libro(“1”,”a”,”aa”); a a
aa
2
Libro b=new Libro(“2”,”b”,”bb”); b b
bb
[Link](“11”);
Para cambiar un dato:
[Link](“cc”);

MAIN CLASE Libro UML Libro


1 /* 1 /* -dia:int
2 Crear un constructor para la clase fecha 2 --
3 que asigne inicialmente la fecha 1-1-2000 3 */ -mes:int
4 al objeto creado (siempre sera esta fecha 4 package objeto11; -anyo:int
5 inicial. 5
6 */ 6 public class Fecha { +getfecha Corta():String
7 package objeto11; 7 private int dia;
8 8 private int mes;
+toString():String
9 public class Objeto11 { 9 private int anyo; 28 public int getMes(){
10 10 29 return mes;
11 public static void main(String[] args) { 11 public Fecha(){//constructor con valores fijos 30 }
12 Fecha f=new Fecha(); 12 [Link]=1; 31 public int getAnyo(){
13 13 [Link]=1; 32 return anyo;
14 [Link](f); 14 [Link]=2000; 33 }
15 [Link]([Link]()); 15 } 34 public String toString(){
16 } 16 public void setDia(int dia){ 35 return "fecha{dia="+dia+
17 } 17 [Link]=dia; 36 ",mes="+mes+
18 } 37 ",año="+anyo+
19 public void setMes(int mes){ 38 "}";
20 [Link]=mes; 39 }
21 } 40 public String getFechaCorta(){
22 public void setAnyo(int anyo){ 41 return (dia+"/"+mes+"/"+anyo);
23 [Link]=anyo; 42 }
24 } 43 }
25 public int getDia(){
26 return dia;
27 }

Cuando un objeto en RAM se queda sin referencias es inaccesible, ocupa espacio. El recolector de basura
se encarga de eliminar los objetos. El recolector es asíncrono, se ejecuta cuando puede.

El destructor: método especial que se ejecuta cuando el objeto desaparece de la RAM. Es decir, al pasar
el recolector invoca al destructor (no lo usaremos porque no se cuando se ejecutará.)

MAIN CLASE Libro UML Libro


1 /* 1 /* -isbn:String
2 Diseñar una clase libro 2 --
3 (isbn,titulo,autor) con set get. 3 */ -titulo:String
4 */ 4 package objeto04; -autor:String
5 package objeto04; 5
6 6 public class Libro { +toString():String
7 public class Objeto04 { 7 private String isbn;
8 8 private String titulo;
9 public static void main(String[] args) { 9 private String autor;
10 //libro no tiene metodo toString 10
11 11 public void setIsbn(String isbn){
12 Libro lib1=new Libro(); 12 [Link]=isbn;
13 Libro lib2=new Libro(); 13 }
14 14 public void setTitulo(String titulo){
15 [Link]("1111"); 15 [Link]=titulo;
16 [Link]("2222"); 16 }
17 17 public void setAutor(String autor){
18 [Link](lib1); 18 [Link]=autor;
19 [Link](lib2); 19 }
20 20 public String getIsbn(){
21 lib1=null;//el primer libro no tiene referencias 21 return [Link];
22 22 }
23 [Link](lib2); 23 public String getTitulo(){
24 24 return [Link];
25 //invoco al recolector de basura 25 }
26 //probar a ejecutar varias veces el programa 26 public String getAutor(){
27 //asincrono, a veces se jecuta y a veces no. 27 return [Link];
28 [Link](); 28 }
29 } 29 protected void finalize(){//destructor
30 } 30 [Link]("objeto libro liberado de RAM");
31 }
32 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 49


7.-La ayuda de Java.
Todo en Java son clases. Consultar [Link]. La herramienta que genera la ayuda de nuestra clase se llama
Javadoc y los atributos private no salen en ella.

MAIN UML Cancion UML Movil


1 /* -titulo:String -marca:String
2 Diseñar las clases con atributos set, get,
3 constructor, toString, UML. -precio:double -modelo:String
4 -una cancion (para reproductor mp3) -autor:String -precio:double
5 -un disco de musica (tienda de musica)
6 -un telefono movil (tienda de telefonia) -genero:String
7 hacer javadoc de alguna de ellas. -ubicación:String
8 */
9 package objeto12; +toString():String +toString():String
10
11 public class Objeto12 { UML Disco
12
13 public static void main(String[] args) {
-titulo:String
14 //instancio los objetos, los creo -artista:String
15 Cancion c=new Cancion("titulo",333,"autor","genero","ubicacion");
16 Disco d=new Disco("titulo","artista","discografica");
-discografica:String
17 Movil m=new Movil("marca","modelo",333); +toString():String
18
19 [Link](c);//muestro los datos
20 [Link](d);//muestro los datos
21 [Link](m);//muestro los datos
22 }
23 }

CLASE Cancion CLASE Movil


1 /* 38 public void setGenero(String genero){ 1 /*
2 -- 39 [Link]=genero; 2 --
3 */ 40 } 3 */
4 package objeto12; 41 public void setUbicacion(String ubicacion){ 4 package objeto12;
5 42 [Link]=ubicacion; 5
6 /** 43 } 6 public class Movil {
7 * 44 /** 7 private String marca;
8 * @author luisfalagan 45 * devuelve el titulo (que hace la operacion) 8 private String modelo;
9 */ 46 * @return el titulo (que devuelve) 9 private double precio;
10 public class Cancion { 47 */ 10
11 private String titulo; 48 public String getTitulo(){ 11 public Movil(String marca, String modelo,
12 private double precio; 49 return [Link]; 12 double precio) {
13 private String autor; 50 } 13 [Link] = marca;
14 private String genero; 51 public double getprecio(){ 14 [Link] = modelo;
15 private String ubicacion; 52 return [Link]; 15 [Link] = precio;
16 53 } 16 }
17 public Cancion(String titulo,double precio,String autor, 54 public String getAutor(){ 17 public void setMarca(String marca) {
18 String genero, String ubicacion){//constructor 55 return [Link]; 18 [Link] = marca;
19 [Link]=titulo; 56 } 19 }
20 [Link]=precio; 57 public String getGenero(){ 20 public void setModelo(String modelo) {
21 [Link]=autor; 58 return [Link]; 21 [Link] = modelo;
22 [Link]=genero; 59 } 22 }
23 [Link]=ubicacion; 60 public String getubicacion(){ 23 public void setPrecio(double precio) {
24 } 61 return [Link]; 24 [Link] = precio;
25 /** 62 } 25 }
26 * establece una Titulo 63 public String toString(){ 26 public String getMarca() {
27 * @param titulo el titulo a asignar 64 return "disco{titulo="+titulo+ 27 return marca;
28 */ 65 ",precio="+precio+ 28 }
29 public void setTitulo(String titulo){ 66 ",autor="+autor+ 29 public String getModelo() {
30 [Link]=titulo; 67 ",genero="+genero+ 30 return modelo;
31 } 68 ",ubicacion="+ubicacion+ 31 }
32 public void setPrecio(double precio){ 69 "}"; 32 public double getPrecio() {
33 [Link]=precio; 70 } 33 return precio;
34 } 71 } 34 }
35 public void setAutor(String autor){ 35 public String toString() {
36 [Link]=autor; 36 return "Movil{" + "marca=" + marca +
37 } 37 ", modelo=" + modelo +
38 ", precio=" + precio + '}';
39 }
40 }

CLASE Disco
1 /* 22 }
2- 23 public void setDiscografica(String discografica){
3 */ 24 [Link]=discografica;
4 package objeto12; 25 }
5 26 public String getTitulo(){
6 public class Disco { 27 return [Link];
7 private String titulo; 28 }
8 private String artista; 29 public String getArtista(){
9 private String discografica; 30 return [Link];
10 31 }
11 public Disco(String titulo,String artista, 32 public String getDiscografica(){
12 String discografica){//constructor 33 return [Link];
13 [Link]=titulo; 34 }
14 [Link]=artista; 35 public String toString(){
15 [Link]=discografica; 36 return "cancion{titulo="+titulo+
16 } 37 ",artista="+artista+
17 public void setTitulo(String titulo){ 38 ",discografica="+discografica+
18 [Link]=titulo; 39 "}";
19 } 40 }
20 public void setArtista(String artista){ 41 }
21 [Link]=artista;

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 50


TEMA 6 DESARROLLO DE CLASES

En el tema anterior:
Clase: Plantilla
Objeto: Instancia de una clase
Encapsulación: Ocultar el código
Constructor: Método especial al crear el objeto
Destructor: Método especial que se ejecuta cuando se destruye el objeto
Referencia: Puntero que apunta a objeto en la RAM

1.-Sobrecarga de métodos.
Es una técnica optativa, consiste en tener dos o mas métodos de una clase con el mismo nombre pero con
funcionalidad diferente. El compliador usará un método u otro dependiendo de los parámetros usados.

El objetivo de la sobrecarga es facilitar a los usuarios de nuestra clase el manejo de los métodos, ya que quien
utiliza nuestra clase no se tendrá que preocupar ni del nombre de los métodos ni de los parámetros.

Se usa mucho en los constructores de una clase.


[Link]=dia;
[Link]=mes; Fecha a=new Fecha(3,2,2001);
[Link]=anyo;
[Link]=1;
[Link]=1; Fecha b=new Fecha();
[Link]=2000;

El constructor sin parámetros se llama constructor por defecto. Es bueno hacerlo siempre.

MAIN CLASE Punto UML Punto


1 /* 1 /* -x:double
2 Diseñar un metodo que nos da un punto 2 --
3 y calcule la distancia entre el punto y 3 */ -y:double
otro 4 package objeto13; +punto(double,double)
4 que nos pasan por parametro. 5
5 */ 6 public class Punto { +Punto()
6 package objeto13; 7 private double x;
7 8 private double y;
+Punto(Punto)
8 public class Objeto13 { 9 +getDistancia(Punto):double
9 10 public Punto(double x, double y){//constructor
10 public static void main(String[] args) { 11 this.x=x;
+toString():String
11 12 this.y=y; 31 public double getY(){
12 Punto a=new Punto(3,4); 13 } 32 return y;
13 Punto b=new Punto(2,5); 14 public Punto(){//constructor sin parametros 33 }
14 Punto c=new Punto(); 15 this.x=0; 34 public String toString(){
15 16 this.y=0; 35 return "Punto{x="+x+
16 [Link](a); 17 } 36 ",y="+y+
17 [Link](b); 18 public Punto(Punto p){//constructor 37 "}";
18 [Link](c); 19 this.x=[Link]();//la x es el valor p que me pasa en 38 }
19 parametro 39 public double getDistancia(Punto p){
20 //distancia de a---b 20 this.y=[Link]();//la y es el valor p que me pasa en 40 //x2-x1 mi x menos la que me pasan por paramatro
21 [Link]([Link](b)); parametro 41 double restoX=[Link]();
22 } 21 } 42 //y2-y1 mi y menos la que me pasan por paramatro
23 } 22 public void setX(double x){ 43 double restoY=[Link]();
23 this.x=x; 44
24 } 45 double
25 public void setY(double y){ resultado=[Link](restoX,2)+[Link](restoY,2);
26 this.y=y; 46 return [Link](resultado);
27 } 47 }
28 public double getX(){
29 return x;
30 }

MAIN CLASE Contador UML Contador


1 /* 1 /*
2 Diseñar clase contador con 2 metodos cuentaLetras 2 --
3 que devuelvan cuantas 'a' o 'b' tiene una cadena, 3 */ +cuentaLetras(String):int
4 los metodos pueden recibir como parametro un 4 package objeto14;
5 String o un array de caracteres. 5 +cuentaLetras(char[ ]):int
6 */ 6 public class Contador { 17 public int cuentaLetras(char p[]){//me pasan parametro
7 package objeto14; 7 array
8 8 public int cuentaLetras(String p){//me pasan 18 int i, contador=0;
9 public class Objeto14 { parametro 19 for (i=0;i<[Link];i++){//recorro la palabra
10 9 int i, contador=0; 20 if(p[i]=='a' || p[i]=='b'){//si es a o b
11 public static void main(String[] args) { 10 for(i=0;i<[Link]();i++){//recorro la palabra 21 contador++;//cuento las coincidencias
12 11 if([Link](i)=='a'|| [Link](i)=='b'){//si es a o 22 }
13 Contador c=new Contador(); b 23 }
14 12 contador++;//cuento las coincidencias 24 return contador;
15 int resultado=[Link]("bebe el agua del 13 } 25 }
rio"); 14 } 26 }
16 [Link](resultado); 15 return contador;
17 16 }
18 char v[]={'a','b'};
19 resultado=[Link](v);
20 [Link](resultado);
21 }
22 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 51


MAIN CLASE MiVector UML MiVector
1 /* 1 /* -v:int
2 Diseñar una clase MiVector que tenga como atributos un array de 2 --
3 10 numeros enteros. El constructor estará sobrecargado sin 3 */ +MiVector()
4 parametros inicialmente, todo a 0, o puede recibir como para- 4 package objeto15;
5 metro otro vector de 10 numeros enteros. debemos incluir un metodo 5 +MiVector(int[ ])
6 setNuevo para incluir un numero en una posicion del vector y un 6 public class MiVector { +setNumero(int,int)
7 metodo getNumero para obtener el numero que esta en 7
8 determinada posicion. 8 private int v[]=new int[10]; +getNumero(int):int
9 */ 9
10 package objeto15; 10 public MiVector() {//constructor de ceros
11 11 int i;
12 public class Objeto15 { 12 for(i=0;i<[Link];i++){//this indica el vector de la clase
13 13 v[i]=0;
14 public static void main(String[] args) { 14 }
15 15 }
16 MiVector v=new MiVector();//llama al constructor 16 public MiVector(int v[]){
17 [Link](5,0);//mete un 5 en la posicion 0 17 this.v=v;//el vector de aqui es igual al que me pasan por parametro
18 [Link]([Link](5));//dame numero de posicion 1 18 }
19 19 public void setNumero(int numero,int posicion){
20 int h[]={5,4,8,6,9,5,6,7,8,2}; 20 this.v[posicion]=numero;
21 MiVector m=new MiVector(h); 21 }
22 [Link]([Link](4));//saca la posicion 4 del vector 22 public int getNumero(int posicion){
23 } 23 return this.v[posicion];
24 } 24 }
25 }

2.-Comprosicion de clases.
Una clase se compone de otra cuando uno de sus atributos es una clase. Primero se crean los objetos que la componen
y por ultimo el elemento compuesto.

Public class Empresa { CLASE Empresa CLASE Persona


Private Persona director; Persona director -String dni
Private Persona secretario; Persona secretario -String nombre
} -String edad

MAIN UML Empresa UML Persona


1 /* -director:Persona -dni:String
2 --
3 */ -secretario:Persona -nombre:String
4 package objeto16; -edad:int
5
6 public class Objeto16 { +Empresa(Persona,Persona) +Persona(String,String,int)
7 +toString():String +toString():String
8 public static void main(String[] args) {
9 15 [Link](e);
10 Persona d=new Persona("1111","luis",42);//creo una persona 16
11 Persona s=new Persona("2222","Bea",40);//creo una persona 17 [Link]("david");//cambio luis por david
12 18 [Link](e);
13 Empresa e=new Empresa(d,s);//creo la empresa con las personas 19 }
14 20 }

CLASE Empresa CLASE Persona


4 package objeto16; 4 package objeto16;
5 5
6 public class Empresa { 6 public class Persona {
7 7
8 private Persona director; 8 private String dni;
9 private Persona secretario; 9 private String nombre;
10 10 private int edad;
11 public Empresa(Persona director, Persona secretario){//constructor 11
12 [Link]=director; 12 public Persona(String dni, String nombre, int edad){//constructor
13 [Link]=secretario; 13 [Link]=dni;
14 } 14 [Link]=nombre;
15 public void setDirector(Persona director) { 15 [Link]=edad;
16 [Link] = director; 16 }
17 } 17 public String getDni() {
18 public void setSecretario(Persona secretario) { 18 return dni;
19 [Link] = secretario; 19 }
20 } 20 public void setDni(String dni) {
21 public Persona getDirector() { 21 [Link] = dni;
22 return director; 22 }
23 } 23 public String getNombre() {
24 public Persona getSecretario() { 24 return nombre;
25 return secretario; 25 }
26 } 26 public void setNombre(String nombre) {
27 public String toString() { 27 [Link] = nombre;
28 return "Empresa{" + "director=" + director + ", secretario=" + secretario + '}'; 28 }
29 } 29 public int getEdad() {
30 } 30 return edad;
31 }
32 public void setEdad(int edad) {
33 [Link] = edad;
34 }
35 public String toString() {
36 return "Persona{" + "dni=" + dni + ", nombre=" + nombre + ", edad=" + edad + '}';
37 }
38 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 52


MAIN UML Ordenador UML Procesador
1 /* -cpu:Procesador -marca:String
2 Diseñar objeto ordenador que se compone
3 de memoria, placa y procesador. -placa:PlacaBase -modelo:String
4 */ -memoria:Ram
5 package objeto17;
6 +Ordenador(Procesador,PlacaBase,Ram) +Procesador(String,String)
7 public class Objeto17 { +toString():String
8
+toString():String
9 public static void main(String[] args) { UML PlacaBase UML Ram
10
11 Procesador pro=new Procesador("Intel","Core I5");//creo un procesador -marca:String -tipo:String
12 Ram ram=new Ram("DDR3L","1600");//creo una ram -modelo:String -velocidad:String
13 PlacaBase pla=new PlacaBase("Asus","p5v");//creo una placabase
14 +PlacaBase(String,String) +toString():String
15 //creo el ordenador con las clases +toString():String +Ram(String,String)
16 Ordenador o=new Ordenador(pro,ram,pla);
17 [Link](o);
18
19 [Link]("I7");//cambio el procesador a I7
20 [Link](o);
21
22 //accedo a la cpu de o(ordenador) y cambio el modelo
23 [Link]().setModelo("I7");
24 [Link](o);
25 }
26 }

CLASE Ordenador CLASE Procesador


4 package objeto17; 4 package objeto17;
5 5
6 public class Ordenador { 6 public class Procesador {
7 private Procesador cpu; 7 private String marca;
8 private Ram memoria; 8 private String modelo;
9 private PlacaBase placa; 9
10 10 public Procesador(String marca, String modelo) {
11 public Ordenador(Procesador cpu, Ram memoria, PlacaBase placa) { 11 [Link] = marca;
12 [Link] = cpu; 12 [Link] = modelo;
13 [Link] = memoria; 13 }
14 [Link] = placa; 14 public void setMarca(String marca) {
15 } 15 [Link] = marca;
16 public void setCpu(Procesador cpu) { 16 }
17 [Link] = cpu; 17 public void setModelo(String modelo) {
18 } 18 [Link] = modelo;
19 public void setMemoria(Ram memoria) { 19 }
20 [Link] = memoria; 20 public String getMarca() {
21 } 21 return marca;
22 public void setPlaca(PlacaBase placa) { 22 }
23 [Link] = placa; 23 public String getModelo() {
24 } 24 return modelo;
25 public Procesador getCpu() { 25 }
26 return cpu; 26 public String toString() {
27 } 27 return "Procesador{" + "marca=" + marca + ", modelo=" + modelo + '}';
28 public Ram getMemoria() { 28 }
29 return memoria; 29 }
30 }
31 public PlacaBase getPlaca() {
32 return placa;
33 }
34 public String toString() {
35 return "Ordenador{" + "cpu=" + cpu + ", memoria=" + memoria + ", placa=" + placa + '}';
36 }
37 }

CLASE PlacaBase CLASE Ram


4 package objeto17; 4 package objeto17;
5 5
6 public class PlacaBase { 6 public class Ram {
7 private String marca; 7 private String tipo;
8 private String modelo; 8 private String velocidad;
9 9
10 public PlacaBase(String marca, String modelo) { 10 public Ram(String tipo, String velocidad) {
11 [Link] = marca; 11 [Link] = tipo;
12 [Link] = modelo; 12 [Link] = velocidad;
13 } 13 }
14 public void setMarca(String marca) { 14 public void setTipo(String tipo) {
15 [Link] = marca; 15 [Link] = tipo;
16 } 16 }
17 public void setModelo(String modelo) { 17 public void setVelocidad(String velocidad) {
18 [Link] = modelo; 18 [Link] = velocidad;
19 } 19 }
20 public String getMarca() { 20 public String getTipo() {
21 return marca; 21 return tipo;
22 } 22 }
23 public String getModelo() { 23 public String getVelocidad() {
24 return modelo; 24 return velocidad;
25 } 25 }
26 public String toString() { 26 public String toString() {
27 return "PlacaBase{" + "marca=" + marca + ", modelo=" + modelo + '}'; 27 return "Ram{" + "tipo=" + tipo + ", velocidad=" + velocidad + '}';
28 } 28 }
29 } 29 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 53


Posicion de Ram según Posicion de Ram según
OPCION 2 en el main
opción 1 opción 2
RAM Ordenador o=new Ordenador ( RAM
Procesador à Intel new Procesador("Intel","Core I5"), Intel
PlacaBase à Asus new Ram("DDR3L","1600"), Asus
new PlacaBase("Asus","p5v")
Ram à ddr ); ddr
cpu cpu
Ordenador à placa Ordenador à placa
memoria memoria
La diferencia son las flechas hacia la posición en memoria

MAIN UML Estacion


1 /* -nombre:String
2 Diseñar la calse billete: origen (estacion) destino (estacion),
3 fecha, precio. La estacion tiene nombre, direccion, poblacion. -direccion:String
4 Crear en el main el objeto billete que sale de la estacion -poblacion:String
5 norte, c/puente colgante, valladolid con destino a Sans,
6 c/paseo de gracia, barcelona el 4-8-2016 por 100€. +estacion(String, String, String)
7 */
8 package objeto18;
+toString():String
9 UML Billete
10 public class Objeto18 {
11 -origen:Estacion
12 public static void main(String[] args) { -destino:Estacion
13
14 Estacion ori=new Estacion("norte","puente colgante","valladolid"); -fecha:String
15 Estacion des=new Estacion("sans","paseo gracia","barcelona"); -precio:double
16 Billete b=new Billete(ori,des,"4-8-2016",100);
17 +Billete(estación,Estacion,String,double)
18 [Link](b); +toString():String
19
20 [Link]([Link]().getNombre());//nombre de estacion origen
21 [Link]([Link]());//precio el billete
22
23 [Link]().setNombre("sans2");//cambia estacion destino por sans2
24 [Link](b);
25 }
26 }

CLASE Estacion CLASE Billete


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package objeto18; 4 package objeto18;
5 5
6 public class Estacion { 6 public class Billete {
7 private String nombre; 7 private Estacion origen;
8 private String direccion; 8 private Estacion destino;
9 private String poblacion; 9 private String fecha;
10 10 private double precio;
11 public Estacion(String nombre, String direccion, String poblacion) { 11
12 [Link] = nombre; 12 public Billete(Estacion origen, Estacion destino, String fecha, double precio) {
13 [Link] = direccion; 13 [Link] = origen;
14 [Link] = poblacion; 14 [Link] = destino;
15 } 15 [Link] = fecha;
16 public void setNombre(String nombre) { 16 [Link] = precio;
17 [Link] = nombre; 17 }
18 } 18 public void setOrigen(Estacion origen) {
19 public void setDireccion(String direccion) { 19 [Link] = origen;
20 [Link] = direccion; 20 }
21 } 21 public void setDestino(Estacion destino) {
22 public void setPoblacion(String poblacion) { 22 [Link] = destino;
23 [Link] = poblacion; 23 }
24 } 24 public void setFecha(String fecha) {
25 public String getNombre() { 25 [Link] = fecha;
26 return nombre; 26 }
27 } 27 public void setPrecio(double precio) {
28 public String getDireccion() { 28 [Link] = precio;
29 return direccion; 29 }
30 } 30 public Estacion getOrigen() {
31 public String getPoblacion() { 31 return origen;
32 return poblacion; 32 }
33 } 33 public Estacion getDestino() {
34 public String toString() { 34 return destino;
35 return "Estacion{" + "nombre=" + nombre + 35 }
36 ", direccion=" + direccion + 36 public String getFecha() {
37 ", poblacion=" + poblacion + '}'; 37 return fecha;
38 } 38 }
39 } 39 public double getPrecio() {
40 return precio;
41 }
42 public String toString() {
43 return "Billete{" + "origen=" + origen + ", destino=" + destino +
44 ", fecha=" + fecha + ", precio=" + precio + '}';
45 }
46 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 54


MAIN UML Fraccion
1 /* -numerador:int
2 Diseñar una clase Fracción con las siguientes características:
3 Debe contener dos atributos int que representen el numerador y el denominador respectivamente. -denominador:int
4 El constructor debe permitir inicializar estos atributos. +toString():String
5 Deben existir los siguientes métodos:
6 -set y get para cada atributo.
7 -int suma(Fraccion f): método que suma a nuestra fracción la que pasamos como parámetro
8 ( si el denominador de ambas fracciones coincide se realiza la operación y devuelve 0, en caso contrario se devuelve -1)
9 -int resta(Fraccion f): método que resta a nuestra fracción la que pasamos como parámetro
10 ( si el denominador de ambas fracciones coincide se realiza la operación y devuelve 0, en caso contrario se devuelve -1)
11 -void producto(Fraccion f): método que multiplica a nuestra fracción la que pasamos como parámetro.
12 -boolean compara(Fraccion f): método que devuelve true si nuestra fracción es igual a la que recibimos.
13 -void simplifica(): método que simplifica si es posible nuestra fracción.
14 */
15 package objeto19;
16
17 public class objeto19 {
18
19 public static void main(String[] args) {
20
21 Fraccion f1=new Fraccion(4,6);
22 Fraccion f2=new Fraccion(3,6);
23
24 int resultado=[Link](f2);
25
26 if(resultado==0){
27 [Link]("Operacion realizada");
28 }
29 if([Link](f2)==true){
30 [Link]("Son iguales");
31 }
32 else{
33 [Link]("Son direntes");
34 }
35 }
36 }

CLASE Fraccion
1 /* 24 public void setDenominador(int denominador) { 47 else {
2 -- 25 [Link] = denominador; 48 return -1;
3 */ 26 } 49 }
4 package objeto19; 27 public String toString() { 50 }
5 28 return "Fraccion{" + "numerador=" + numerador + 51 public void producto(Fraccion f){
6 public class Fraccion { 29 ", denominador=" + denominador + '}'; 52
7 30 } [Link]=[Link]*[Link]();
8 private int numerador; 31 public int suma(Fraccion f){ 53 [Link]=[Link]*[Link]();
9 private int denominador; 32 54 }
10 33 if ([Link]==[Link]()){ 55 public boolean compara(Fraccion f){
11 public Fraccion(int numerador, int 34 56
denominador) { [Link]=[Link]+[Link](); 57 if (([Link]==[Link]()) &&
12 [Link] = numerador; 35 return 0; 58 ([Link]==[Link]())){
13 [Link] = denominador; 36 } 59 return true;
14 } 37 else { 60 }
15 public int getNumerador() { 38 return -1; 61 else{
16 return numerador; 39 } 62 return false;
17 } 40 } 63 }
18 public void setNumerador(int numerador) { 41 public int resta(Fraccion f){ 64 }
19 [Link] = numerador; 42 65 }
20 } 43 if ([Link]==[Link]()){
21 public int getDenominador() { 44 [Link]=[Link]();
22 return denominador; 45 return 0;
23 } 46 }

Ejemplos fechas
1 /* 33 LocalTime ahora=[Link]();
2 Ejemplos de formato de fecha. 34 [Link]("la hora actual: "+ahora);
3 */ 35 LocalTime otraHora=[Link](10,15,05);
4 package objeto20; 36 [Link]("la hora puesta: "+otraHora);
5 37
6 import [Link].*; 38 [Link]("la hora actual: "+[Link]());
7 import [Link].*; 39 [Link]("los minutos actuales: "+[Link]());
8 import [Link].*; 40
9 41 ahora=[Link](2);
10 public class Ejemplo_fechas { 42 [Link]("la hora actual mas 2: "+ahora);
11 43
12 public static void main(String[] args) { 44 LocalDateTime fecha=[Link](2015,[Link],23,10,15,00);
13 45 [Link]("la fecha y hora puesta: "+fecha);
14 LocalDate fechaActual=[Link](); 46
15 [Link]("la fecha actual es: "+fechaActual); 47 Instant inicio=[Link]();
16 48 int x=555555555;
17 LocalDate miFecha=[Link](2015, [Link], 17); 49 int y=555555555;
18 [Link]("la fecha puesta es: "+miFecha); 50 Instant fin=[Link]();
19 51
20 if([Link](miFecha)) 52 long duracion=[Link](inicio, fin).getSeconds();
21 [Link]("Se pasó la fecha"); 53 [Link]("la duracion entre: "+duracion);
22 54
23 miFecha=[Link](2); 55 [Link]("la fecha actual: "+fechaActual);
24 miFecha=[Link](5); 56 [Link]("la fecha actual es: "
25 [Link]("la fecha personalizada: "+miFecha); 57 +[Link](DateTimeFormatter.ISO_LOCAL_DATE));
26 58 [Link]("la fecha actual es: "
27 [Link]("el dia personalizado: "+[Link]()); 59 +[Link]([Link]("dd-MM-yyyy")));
28 [Link]("el mes personalizado: "+[Link]()); 60 }
29 [Link]("el dia del año: "+[Link]()); 61 }
30 [Link]("el mes personalizado tiene: "+[Link]());
31 [Link]("el año personalizado tiene: "+[Link]());
32

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 55


MAIN UML Viaje
1 /* -identificador:String
2 -Un VUELO se caracteriza por: un identificador (incluye letras), un precio, una clase, una empresa,
3 origen y destino, fecha de salida y llegada (LocalDate), hora de salida y de llegada (LocalTime) -ho[Link]
4 -Un HOTEL se caracteriza por: un NIF, un nombre, dirección, ciudad, categoría y precio de la noche -vueloIda:vuelo
5 (habitación individual). Debe de disponer de un método calcularFactura que nos devuelva el total de la
6 factura a partir de un no de personas y números de noches que recibe como parámetro (el precio por -vueloVuelta:vuelo
7 noche ya lo tenemos como atributo del hotel). -nº-personas:int
8 -Un VIAJE se caracteriza por: un identificador (incluye letras), un Hotel, un Vuelo de ida, un Vuelo de vuelta y
9 un no de personas. El viaje debe de disponer un método calcularPrecio que nos informe del precio total +viaje(String, Hotel, Vuelo,Vuelo,int)
10 del viaje. El cálculo dependerá del no de personas, el precio de los vuelos y días de estancia en el hotel
11 (se recibirá como parámetro).
+CalculaPrecio(int):double
12 Diseñar el siguiente Viaje mostrando por pantalla el importe total del mismo: +toString():String
13 -Vuelo de IDA: identificador de
14 vuelo JK2100, precio 70€, Madrid-Palma de UML Vuelo
15 Mallorca, salida 15/7/2016 a las 9:00, llegada el 15/7/2016 a las 10:00 -identificador:Estacion
16 -Vuelo de VUELTA: identificador de vuelo JK2101, precio 80€, Palma de Mallorca-Madrid, salida 21/7/2016 a
17 las 17:00, llegada el 21/7/2016 a las 18:05 -precio:double
18 Nos alojaremos en el Hotel CATALONIA MAJORICA con NIF B-62178111, c/ Garita, 3 de Palma de Mallorca, -clase:String
19 4 estrellas. Precio por noche 50€.
20 */ -origen:String
21 package objeto21; -destino:String
22
23 import [Link].*; -horaSalida:LocalTime
24
25 public class Objeto21 {
-fechaSalida:LocalDate
26 -horaLLegada:LocalTime
27 public static void main(String[] args) {
28
-fechaLlegada:LocalDate
29 Vuelo ida=new Vuelo("JK2110",70,"turista","spanair","madrid","palma", +Vuelo(String,double,String,String,String,LocalTime,
30 [Link](2016,[Link],15),[Link](9,0),
31 [Link](2016,[Link],15),[Link](9,0)); Localdate,LocalTime,LocalDate)
32 +toString():String
33 Vuelo vuelta=new Vuelo("JK2101",80,"turista","spanair","palma","madrid",
34 [Link](2016,[Link],21),[Link](17,0), UML Hotel
35 [Link](2016,[Link],21),[Link](18,05));
36
-nif:String
37 Hotel hotel=new Hotel("B-62178111","catalonia majorica", -nombre:String
38 "c/garita,3","palma de mallorca","4 estrellas",50);
39
-direccion:String
40 Viaje viaje=new Viaje("42342323",hotel,ida,vuelta,5); -ciudad:String
41
42 int noches=4;
-categoria:String
43 [Link]([Link](noches)); -precio:double
44 }
45 } +Hotel(String, String, String,String,String,double)
+CalcularFactura(int,int):double
+toString():String

CLASE Viaje
1 package objeto21; 34 public String getIdentificador() {
2 35 return identificador;
3 public class Viaje { 36 }
4 37 public Hotel getHotel() {
5 private String identificador; 38 return hotel;
6 private Hotel hotel; 39 }
7 private Vuelo vueloIda; 40 public Vuelo getVueloIda() {
8 private Vuelo vueloVuelta; 41 return vueloIda;
9 private int numeroPersonas; 42 }
10 43 public Vuelo getVueloVuelta() {
11 public Viaje(String identificador, Hotel hotel, Vuelo vueloIda, 44 return vueloVuelta;
12 Vuelo vueloVuelta, int numeroPersonas) { 45 }
13 [Link] = identificador; 46 public int getNumeroPersonas() {
14 [Link] = hotel; 47 return numeroPersonas;
15 [Link] = vueloIda; 48 }
16 [Link] = vueloVuelta; 49 public String toString() {
17 [Link] = numeroPersonas; 50 return "Viaje{" + "identificador=" + identificador +
18 } 51 ", hotel=" + hotel + ", vueloIda=" + vueloIda +
19 public void setIdentificador(String identificador) { 52 ", vueloVuelta=" + vueloVuelta +
20 [Link] = identificador; 53 ", numeroPersonas=" + numeroPersonas + '}';
21 } 54 }
22 public void setHotel(Hotel hotel) { 55 public double calcularPrecio(int total_noches){
23 [Link] = hotel; 56 double total=0;
24 } 57 //recibe calcular factura del hotel,
25 public void setVueloIda(Vuelo vueloIda) { 58 //numero de personas y numero noches
26 [Link] = vueloIda; 59 double total_hotel=[Link]
27 } 60 ([Link], total_noches);
28 public void setVueloVuelta(Vuelo vueloVuelta) { 61 total=[Link]*([Link]()
29 [Link] = vueloVuelta; 62 +[Link]())+total_hotel;
30 } 63 return total;
31 public void setNumeroPersonas(int numeroPersonas) { 64 }
32 [Link] = numeroPersonas; 65 }
33 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 56


CLASE Vuelo
1 package objeto21; 54 public void setHoraSalida(LocalTime horaSalida) {
2 55 [Link] = horaSalida;
3 import [Link].*; 56 }
4 57 public void setFechaLlegada(LocalDate fechaLlegada) {
5 public class Vuelo { 58 [Link] = fechaLlegada;
6 59 }
7 private String identificador; 60 public void setHoraLlegada(LocalTime horaLlegada) {
8 private double precio; 61 [Link] = horaLlegada;
9 private String clase; 62 }
10 private String empresa; 63 public String getIdentificador() {
11 private String origen; 64 return identificador;
12 private String destino; 65 }
13 private LocalDate fechaSalida; 66 public double getPrecio() {
14 private LocalTime horaSalida; 67 return precio;
15 private LocalDate fechaLlegada; 68 }
16 private LocalTime horaLlegada; 69 public String getClase() {
17 70 return clase;
18 public Vuelo(String identificador, double precio, String clase, 71 }
19 String empresa, String origen, String destino, 72 public String getEmpresa() {
20 LocalDate fechaSalida, LocalTime horaSalida, 73 return empresa;
21 LocalDate fechaLlegada, LocalTime horaLlegada) { 74 }
22 [Link] = identificador; 75 public String getOrigen() {
23 [Link] = precio; 76 return origen;
24 [Link] = clase; 77 }
25 [Link] = empresa; 78 public String getDestino() {
26 [Link] = origen; 79 return destino;
27 [Link] = destino; 80 }
28 [Link] = fechaSalida; 81 public LocalDate getFechaSalida() {
29 [Link] = horaSalida; 82 return fechaSalida;
30 [Link] = fechaLlegada; 83 }
31 [Link] = horaLlegada; 84 public LocalTime getHoraSalida() {
32 } 85 return horaSalida;
33 public void setIdentificador(String identificador) { 86 }
34 [Link] = identificador; 87 public LocalDate getFechaLlegada() {
35 } 88 return fechaLlegada;
36 public void setPrecio(double precio) { 89 }
37 [Link] = precio; 90 public LocalTime getHoraLlegada() {
38 } 91 return horaLlegada;
39 public void setClase(String clase) { 92 }
40 [Link] = clase; 93 public String toString() {
41 } 94 return "Vuelo{" + "identificador=" + identificador +
42 public void setEmpresa(String empresa) { 95 ", precio=" + precio + ", clase=" + clase +
43 [Link] = empresa; 96 ", empresa=" + empresa + ", origen=" + origen +
44 } 97 ", destino=" + destino + ", fechaSalida=" + fechaSalida +
45 public void setOrigen(String origen) { 98 ", horaSalida=" + horaSalida + ", fechaLlegada=" + fechaLlegada +
46 [Link] = origen; 99 ", horaLlegada=" + horaLlegada + '}';
47 } 100 }
48 public void setDestino(String destino) { 101 }
49 [Link] = destino;
50 }
51 public void setFechaSalida(LocalDate fechaSalida) {
52 [Link] = fechaSalida;
53 }

CLASE Hotel
1 package objeto21; 36 public void setPrecio(double precio) {
2 37 [Link] = precio;
3 public class Hotel { 38 }
4 39 public String getNif() {
5 private String nif; 40 return nif;
6 private String nombre; 41 }
7 private String direccion; 42 public String getNombre() {
8 private String ciudad; 43 return nombre;
9 private String categoria; 44 }
10 private double precio; 45 public String getDireccion() {
11 46 return direccion;
12 public Hotel(String nif, String nombre, String direccion, String ciudad, 47 }
13 String categoria, double precio) { 48 public String getCiudad() {
14 [Link] = nif; 49 return ciudad;
15 [Link] = nombre; 50 }
16 [Link] = direccion; 51 public String getCategoria() {
17 [Link] = ciudad; 52 return categoria;
18 [Link] = categoria; 53 }
19 [Link] = precio; 54 public double getPrecio() {
20 } 55 return precio;
21 public void setNif(String nif) { 56 }
22 [Link] = nif; 57 public String toString() {
23 } 58 return "Hotel{" + "nif=" + nif + ", nombre=" + nombre +
24 public void setNombre(String nombre) { 59 ", direccion=" + direccion + ", ciudad=" + ciudad +
25 [Link] = nombre; 60 ", categoria=" + categoria + ", precio=" + precio + '}';
26 } 61 }
27 public void setDireccion(String direccion) { 62 public double calcularFactura(int numero_personas,
28 [Link] = direccion; 63 int numero_noches){
29 } 64 double total=0;
30 public void setCiudad(String ciudad) { 65 total=numero_personas*numero_noches*[Link];
31 [Link] = ciudad; 66 return total;
32 } 67 }
33 public void setCategoria(String categoria) { 68 }
34 [Link] = categoria;
35 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 57


1 /* 21 [Link]("introduzca un anyo: ");
2 Pedir por teclado la fecha de nacimiento de una 22 int anyo=[Link]();
3 persona (dia,mes,año) y mostar por pantalla si 23
4 es mayor o menor de 18 años. 24 LocalDate nacimiento = [Link](anyo, mes, dia);
5 */ 25 LocalDate hoy = [Link]();
6 package objeto23a; 26
7 27 Period diferencia=[Link](nacimiento,hoy);//diferencia entre dos fechas
8 import [Link]; 28 int a=[Link]();
9 import [Link]; 29
10 import [Link]; 30 [Link]("tienes: "+[Link]()+" años");//saca los años de diferencia
11 31 [Link]([Link]()+" meses");//saca los meses
12 public class Objeto23a { 32 [Link]([Link]()+" dias");//saca los dias
13 33 if(a>=18){
14 public static void main(String[] args) { 34 [Link]("eres mayor de 18 años");
15 35 }
16 Scanner teclado=new Scanner([Link]); 36 else{
17 [Link]("introduzca una dia: "); 37 [Link]("eres menor de 18 años");
18 int dia=[Link](); 38 }
19 [Link]("introduzca un mes: "); 39 }
20 int mes=[Link](); 40 }

3.-Los Packages (carpetas).


El objetivo de los packages es tener organizadas todas las clases de nuestro proyecto. Se trata de tenerlas
separadas en packages temáticos. No son obligatorios, pero si en la clase ponemos package, obligatoriamente debe
estar dentro de una carpeta asi llamada.

Los packages admiten subcarpetas, las subcarpetas se indican con el import [Link].*

MAIN UML Punto


1 /* -x:double
2 Utilizar la clase Punto para crear una clase Circulo.
3 Que tiene un centro(Punto) y un radio. Ademas incluye la operacion -y::double
4 -getCircunferencia (2*PI*radio) y +punto(double,double)
5 -getArea (PI*radio2).
6 */ +toString():String
7 package objeto22;
8
UML Circulo
9 import [Link]; -centro:Punto
10 import [Link];
11 -radio:double
12 public class Objeto22 { -fecha:String
13
14 public static void main(String[] args) { -precio:double
15 +Circulo(punto,double)
16 Punto p=new Punto(3,4);
17 Circulo c=new Circulo(p,33);//punto y radio +toString():String
18 +getCircunferencia():double
19 [Link]("el area es: "+[Link]()+" m2");
20 [Link]("el circunferencia es: "+[Link]()+" m"); +getArea():double
21 }
22 }

CLASE Punto CLASE Circulo


4 package utils; 4 package utils;
5 5
6 public class Punto { 6 public class Circulo {
7 private double x; 7 private Punto centro;
8 private double y; 8 private double radio;
9 9
10 public Punto(double x, double y){//constructor 10 public Circulo(Punto centro, double radio) {
11 this.x=x; 11 [Link] = centro;
12 this.y=y; 12 [Link] = radio;
13 } 13 }
14 public Punto(){//constructor sin parametros 14 public void setCentro(Punto centro) {
15 this.x=0; 15 [Link] = centro;
16 this.y=0; 16 }
17 } 17 public void setRadio(double radio) {
18 public Punto(Punto p){//constructor 18 [Link] = radio;
19 this.x=[Link]();//la x es el valor p que me pasa en parametro 19 }
20 this.y=[Link]();//la y es el valor p que me pasa en parametro 20 public Punto getCentro() {
21 } 21 return centro;
22 public void setX(double x){ 22 }
23 this.x=x; 23 public double getRadio() {
24 } 24 return radio;
25 public void setY(double y){ 25 }
26 this.y=y; 26 public String toString() {
27 } 27 return "Circulo{" + "centro=" + centro + ", radio=" + radio + '}';
28 public double getX(){ 28 }
29 return x; 29 public double getCircunferencia(){
30 } 30 return 2*[Link]*radio;
31 public double getY(){ 31 }
32 return y; 32 public double getArea(){
33 } 33 return [Link]*radio*radio;
34 public String toString(){ 34 }
35 return "Punto{x="+x+",y="+y+"}"; 35 }
36 }
37 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 58


4.-Métodos que lanzan excepciones.
Una excepción es un error en tiempo de ejecución.

ACCION IMPRIME
try{
[Link](5/10);
} [Link]: /by zero
catch(Exception e){
}
try{
[Link](5/10);
}
/by zero
catch(Exception e){
[Link]([Link]());
}
try{
[Link](5/10);
} [Link]:
/by zero
catch(Exception e){ at [Link]([Link])
[Link]([Link]());
}
Nombre de la excepcion descripcion

Al diseñar un método de una clase ¿qué hago si sale error?.

MAIN CLASE Clase


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package objeto24; 4 package objeto24;
5 5
6 public class Objeto24 { 6 public class Clase {
7 7
8 public static void main(String[] args) { 8 public int suma (int a,int b) throws Exception {
9 9 if(a<0 || b<0){
10 Clase c=new Clase(); 10 throw new Exception("numeros negativos");//mensaje que sale en el error
11 11 }
12 try{ 12 else{
13 [Link]([Link](3,-4)); 13 return a+b;
14 } 14 }
15 catch(Exception e){ 15 }
16 [Link](e); 16 }
17 }
18 }
19 }

MAIN CLASE Ecuacion UML Ecuacion


1 /* 1 /* -a:double
2 Modificar clase ecuacion para que los metodos getSolucion1 2 --
3 y getSolucion2 devuelvan una excepcion en caso de que 3 */ -b:double
4 el discriminante sea negativo o division por 0. 4 package objeto25; -c:double
5 */ 5
6 package objeto25; 6 public class Ecuacion { +getsolucion1():double
7 7 private double a;
8 public class Objeto25 { 8 private double b;
+getsolucion2():double
9 9 private double c; +toString():String
10 public static void main(String[] args) { 10 37 else if(a==0){
11 11 public void setA(double a){ 38 throw new Exception("division por 0");
12 Ecuacion e=new Ecuacion(); 12 this.a=a; 39 //mensaje que sale en el error
13 13 } 40 }
14 [Link](6); 14 public void setB(double b){ 41 else{
15 [Link](5); 15 this.b=b; 42 return (-b+[Link](b*b-4*a*c))/(2*a);
16 [Link](1); 16 } 43 }
17 17 public void setC(double c){ 44 }
18 [Link](e); 18 this.c=c; 45 public double getSolucion2() throws Exception{
19 19 } 46 if(b*b-4*a*c<0){
20 try{ 20 public double getA(){ 47 throw new Exception("raiz negativa");
21 [Link](e.getSolucion1()); 21 return a; 48 //mensaje que sale en el error
22 [Link](e.getSolucion2()); 22 } 49 }
23 } 23 public double getB(){ 50 else if(a==0){
24 catch(Exception error){ 24 return b; 51 throw new Exception("division por 0");
25 [Link](error); 25 } 52 //mensaje que sale en el error
26 } 26 public double getC(){ 53 }
27 } 27 return c; 54 else{
28 } 28 } 55 return (-b+[Link](b*b-4*a*c))/(2*a);
29 public String toString(){ 56 }
30 return "ecuacion{a="+a+",b="+b+",c="+c+"}"; 57 }
31 } 58 }
32 public double getSolucion1() throws Exception{
33 if(b*b-4*a*c<0){
34 throw new Exception("raiz negativa");
35 //mensaje que sale en el error
36 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 59


5.-Métodos y atributos estáticos.
Cuando creamos una clase, tanto los atributos como los métodos pueden ser estáticos. Cuando una clase tiene al
menos un método estático, se convierte en estática y no hace falta instanciarla.

Si una clase es estática solo existe una copia en la RAM.

MAIN CLASE MiClase CLASE MiClase2


1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto26; 4 package objeto26; 4 package objeto26;
5 5 5
6 public class Objeto26 { 6 public class MiClase { 6 public class MiClase2 {
7 7 7
8 public static void main(String[] args) { 8 public void saluda(){ 8 public static void saluda(){
9 9 [Link]("hola"); 9 [Link]("hola2");
10 MiClase a=new MiClase(); 10 } 10 }
11 [Link](); 11 } 11 }
12
13 //como el metodo es static no es necesario instanciar
14 [Link]();
15
16 //pero se podria instanciar
17 MiClase2 b=new MiClase2();
18 [Link]();
19 }
20 }

MAIN CLASE MiClase CLASE MiClase2


1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto27; 4 package objeto27; 4 package objeto27;
5 5 5
6 public class Objeto27 { 6 public class MiClase { 6 public class MiClase2 {
7 7 private int numero; 7
8 public static void main(String[] args) { 8 8 private static int numero;
9 9 public MiClase(int numero) { 9
10 MiClase a1=new MiClase(5); 10 [Link] = numero; 10 public static void incrementa(){
11 MiClase a2=new MiClase(7); 11 } 11 [Link]++;
12 12 public void setNumero(int numero) { 12 }
13 [Link](a1); 13 [Link] = numero; 13 public static int getNumero(){
14 [Link](a2); 14 } 14 return numero;
15 [Link](); 15 public void incrementa() { 15 }
16 [Link](a1);// saca 6 16 [Link]++; 16 //si el metodo utiliza un atributo estatico
17 [Link](a2);//saca 7 17 } 17 //el metodo debe ser estatico
18 18 public int getNumero() { 18 public static void setNumero(int numero) {
19 //en este caso, el atributo es estatico y solo 19 return numero; 19 [Link] = numero;
20 //existe una copia en RAM 20 } 20 }
21 MiClase2 b1=new MiClase2(); 21 public String toString() { 21 }
22 MiClase2 b2=new MiClase2(); 22 return "MiClase{" + "numero=" + numero + '}';
23 23 }
24 [Link](7); 24 }
25 [Link]([Link]());// saca 7
26
27 [Link](8);
28 [Link]([Link]());// saca 8
29
30 [Link]();
31
32 [Link]([Link]());// saca 9
33 }
34 }

RAM
MiClase
a1 à [Link](); -elimina el 5 y pone el 6
5 6

MiClase
a2 à [Link]();
7
MiClase
b1 à -elimina el 7 y pone el 8.
7 8
b2 à -elimina el 8 y pone el 9.
9

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 60


MAIN CLASE AnalizaFichero UML AnalizaFichero
1 /* 1 /* -fichero:String
2 Diseñar una clase AnalizaFichero que recibe 2 --
3 en el constructor la ruta de un fichero. 3 */ +AnalizaFichro(String)
4 -Tendra un metodo contarLineas() que devuelve 4 package objeto28;
5 el nº de lineas del fichero. 5 +ContarLineas ():int
6 -contar() cuenta todos los caracteres del fichero 6 import [Link].*; +Contar():int
7 incluidos espacios. 7
8 -contar(char) cuenta las apariciones del caracter 8 public class AnalizaFichero { +Contar(char):int
9 pasado como parametro. 9 38 String linea;//codigo
10 Si algo falla, estos metodos lanzaran una excepcion. 10 private static String fichero=""; 39 while((linea=[Link]())!=null){
11 La clase debe ser estatica. 11 40 caracteres=caracteres+[Link]();
12 */ 12 public AnalizaFichero(String fichero) { 41 }
13 package objeto28; 13 [Link] = fichero; 42 [Link]();
14 14 } 43 return caracteres;
15 public class Objeto28 { 15 public static int contarLineas() throws Exception{ 44 }
16 16 45 public static int contar(char letra) throws Exception{
17 public static void main(String[] args) { 17 int lineas=0; 46
18 //es una clase estatica y no es necesario instanciarla 18 //lectura fichero 47 int caracteres=0;
19 //pero si queremos usar el constructor si hay que instanciarla 19 File archivo=new File (fichero); 48 //lectura fichero
20 20 FileReader fr=new FileReader (archivo); 49 File archivo=new File (fichero);
21 AnalizaFichero a=new AnalizaFichero("[Link]"); 21 BufferedReader br=new BufferedReader(fr); 50 FileReader fr=new FileReader (archivo);
22 22 51 BufferedReader br=new BufferedReader(fr);
23 try{ 23 String linea;//codigo 52
24 [Link]("numero de lineas: "+[Link]()); 24 while((linea=[Link]())!=null){ 53 String linea;//codigo
25 [Link]("numero de letras: "+[Link]()); 25 lineas++; 54 while((linea=[Link]())!=null){
26 [Link]("numero de aes: "+[Link]('a')); 26 } 55 for(int i=0;i<[Link]();i++){
27 } 27 [Link](); 56 if([Link](i)==letra){
28 catch(Exception e){ 28 return lineas; 57 caracteres++;
29 [Link](e); 29 } 58 }
30 } 30 public static int contar() throws Exception{ 59 }
31 } 31 60 }
32 } 32 int caracteres=0; 61 [Link]();
33 //lectura fichero 62 return caracteres;
34 File archivo=new File (fichero); 63 }
35 FileReader fr=new FileReader (archivo); 64 }
36 BufferedReader br=new BufferedReader(fr);
37

¿Cuándo uso el set y el get?:

• Clase normal: Persona, Coche, es decir, clases que contienen datos solamente (siempre set y get)
(llamados Beans).

• Clases que operan: se pueden poner o no se pueden poner.

6.-Herencias.
Consiste en que una clase puede heredar (recibir) atributos y métodos de una clase superior. Le llamaremos superclase o
clase padre.

El objetivo es la extensibilidad y la reutilización de código.

• Reutilizar código: escribir menos à aplicaciones en menos tiempo à ahorro dinero.

• Extensibilidad: añadir nuevas funciones. Aplicar una buena herencia implica un gran análisis previo.

UML Persona UML Trabajador


-nombre:String -nombre:String
-edad:int -edad:int
-sueldo:double

CLASE Persona CLASE Trabajador


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package objeto29; 4 package objeto29;
5 5
6 public class Persona { 6 //el trabajador hereda de Persona con extends
7 7 public class Trabajador extends Persona {
8 private String nombre; 8
9 private int edad; 9 private double sueldo;
10 10
11 public String getNombre() { 11 public double getSueldo() {
12 return nombre; 12 return sueldo;
13 } 13 }
14 public void setNombre(String nombre) { 14 public void setSueldo(double sueldo) {
15 [Link] = nombre; 15 [Link] = sueldo;
16 } 16 }
17 public int getEdad() { 17 }
18 return edad;
19 }
20 public void setEdad(int edad) {
21 [Link] = edad;
22 }
23 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 61


Al heredar, nombre y edad pasan a Trabajador y no hace falta programar nombre y edad en Trabajador y se aplica la
extensibilidad con el sueldo.

6.1.-Arbol de herencia: siempre va en dirección hacia arriba.

CLASE ATRIBUTOS METODOS

A a,b m()
B b,c,e m(),p()
C d,b,a h(),m()

Además de ser factor común tiene que tener sentido, se relaciona con “es_un”.

Los estudiantes tienen dni, nombre y titulación, los trabajodres dni, nombre y nº_ss, las personas tienen nobre y dni,
los directores tienen dni, nombre, nº_ss y extra en el sueldo. Hacer UML.

Personas
Dni
nombre

Estudiantes Trabajador Directores


Titulación Nº_ss Nº_ss
Dni Dni Sueldo
nombre nombre Dni
nombre

7.-Sobreescritura de métodos.
Al heredar un método podemos modificar su código programado para ajustarlo a la nueva clase.

Persona Ingles Espanyol


-nombre:String
-edad:int

+saluda() +saluda()

Al volver a pasar +saluda() indico sobreescritura. Al sobreescribir puedo ejecutar el código anterior y añadir código nuevo.

UML Persona UML Trabajador


-nombre:String -sueldo:double
-edad:int
+Persona(string,int) +Trabajador(String,int,double)
+Saluda()

Si una clase superior tiene constructor, la descendiente obligatoriamente debe tenerlo y llamarlo.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 62


MAIN UML Persona
1 /* -nombre:String
2 --
3 */ -edad:int
4 package objeto29; +Persona(String,int)
5
6 public class Objeto29 { +saluda()
7
8 public static void main(String[] args) {
UML Ingles UML Espanyol
9
10 Persona p=new Persona("luis",42);
11 Ingles i=new Ingles("luis",42); +saluda()
12 Espanyol e=new Espanyol("luis",42);
UML Trabajador
13
14 [Link](); -sueldo:double
15 [Link]();
16 [Link](); +Trabajador(String,int,double)
17
18 [Link]("luis");
19 [Link](30); CLASE Espanyol
20 1 /*
21 [Link]([Link]()); 2 --
22 3 */
23 //nombre y edad no estan en Trabajador 4 package objeto29;
24 //pero se heredan de Persona 5
25 Trabajador t=new Trabajador(1000,"luis",30); 6 public class Espanyol extends Persona{
26 [Link]("luis"); 7
27 [Link](30); 8 public Espanyol(String nombre, int edad) {
28 [Link](1000); 9 super(nombre, edad);
29 10 }
30 [Link]([Link]()); 11 }
31 }
32 }

CLASE Persona CLASE Ingles CLASE Trabajador


1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto29; 4 package objeto29; 4 package objeto29;
5 5 5
6 public class Persona { 6 public class Ingles extends Persona{ 6 //el trabajador hereda de Persona con extends
7 7 7 public class Trabajador extends Persona {
8 private String nombre; 8 public Ingles(String nombre, int edad) { 8
9 private int edad; 9 super(nombre, edad); 9 private double sueldo;
10 10 } 10
11 public Persona(String nombre, int edad) { 11 @Override//sobreescritura 11 public Trabajador(double sueldo, String nombre, int edad) {
12 [Link] = nombre; 12 public void saluda(){ 12 super(nombre, edad);//llama al construtor de la superior
13 [Link] = edad; 13 [Link]();//ejecuta el Saluda de Persona 13 [Link] = sueldo;
14 } 14 [Link]("hi!!");//ejecuta el Saluda de Ingles. 14 }
15 public String getNombre() { 15 } 15 public double getSueldo() {
16 return nombre; 16 } 16 return sueldo;
17 } 17 }
18 public void setNombre(String nombre) { 18 public void setSueldo(double sueldo) {
19 [Link] = nombre; 19 [Link] = sueldo;
20 } 20 }
21 public int getEdad() { 21 //para cambiar nombre de atributo privado en herencia
22 return edad; 22 //se usa setNombre...
23 } 23 public void cambia(){
24 public void setEdad(int edad) { 24 [Link]("pepito");
25 [Link] = edad; 25 }
26 } 26 }
27 public void saluda(){
28 [Link]("hola!!");
29 }
30 }

MAIN UML Figura


1 /*
2 Diseñar clases Circulo, Triangulo, Cuadrado.
3 Todas tienen un metodo para calcular el area. +getArea():string,int,double
4 Todas son figuras geometricas.
5 */ UML Circulo UML Cuadrado
6 package objeto30;
7
-radio:double -lado:double
8 public class Objeto30 { +getArea():double +getArea():double
9
10 public static void main(String[] args) { +Circulo(double) +Cuadrado(double)
11 UML Triangulo
12 Circulo ci=new Circulo(5);
13 Triangulo t=new Triangulo(5.5,6); -base:double
14 Cuadrado c=new Cuadrado(6.87); -altura:double
15
16 [Link]("el area del circulo es: "+[Link]()); +getArea():double
17 [Link]("el area del triangulo es: "+[Link]());
18 [Link]("el area del cuadrado es: "+[Link]());
+Triangulo(double,double)
19 }
20 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 63


CLASE Figura CLASE Circulo CLASE Triangulo CLASE Cuadrado
1 /* 1 /* 1 /* 1 /*
2 -- 2 -- 2 -- 2 --
3 */ 3 */ 3 */ 3 */
4 package objeto30; 4 package objeto30; 4 package objeto30; 4 package objeto30;
5 5 5 5
6 public class Figura { 6 public class Circulo extends Figura{ 6 public class Triangulo extends Figura{ 6 public class Cuadrado extends Figura{
7 7 7 7
8 public double getArea(){ 8 private double radio; 8 private double base; 8 private double lado;
9 return 0; 9 9 private double altura; 9
10 } 10 public Circulo(double radio) { 10 10 public Cuadrado(double lado) {
11 } 11 [Link] = radio; 11 public Triangulo(double base, double altura) { 11 [Link] = lado;
12 } 12 [Link] = base; 12 }
13 public double getRadio() { 13 [Link] = altura; 13 public double getLado() {
14 return radio; 14 } 14 return lado;
15 } 15 public double getBase() { 15 }
16 public void setRadio(double radio) { 16 return base; 16 public void setLado(double lado) {
17 [Link] = radio; 17 } 17 [Link] = lado;
18 } 18 public void setBase(double base) { 18 }
19 @Override 19 [Link] = base; 19 @Override
20 public double getArea(){ 20 } 20 public double getArea(){
21 return [Link]*radio*radio; 21 public double getAltura() { 21 return lado*lado;
22 } 22 return altura; 22 }
23 } 23 } 23 }
24 public void setAltura(double altura) {
25 [Link] = altura;
26 }
27 @Override
28 public double getArea(){
29 return (base*altura)/2;
30 }
31 }

MAIN UML Contador


1 /* 19 public static void main(String[] args) { -cont:int
2 Crear una clase Contador que defina un unico 20 try{
3 atributo cont (entero). Se podra inicializar 21 Contador c=new Contador(1); +Contador(int)
4 a cualquier valor negativo. 22 [Link]();
5 -incrementara el contador (en una unidad). 23 [Link](); +add()
6 -decrementara el contador (en una unidad). 24 +dec()
7 mostrar contador actual por pantalla. 25 NuevoContador c1=new NuevoContador(4);
8 implementa todos los metodos. 26 [Link](5); +show()
9 -el contador nunca podra tener un valor negativo 27 [Link]();
10 (lanzar excepcion en tal caso). 28
UML NuevoContador
11 -Implementa una clase derivada de la clase 29 [Link](c);
12 contador NuevoContador que ofrezca la posibilidad 30 [Link](c1);
13 de incrementar o decrementar cualquier cantidad. 31 } +add()
14 */ 32 catch (Exception e){ +dec()
15 package objeto31; 33 [Link]([Link]());
16 34 }
17 public class Objeto31 { 35 }
18 36

CLASE Contador
1 /* 13 } 25 cont++;
2 -- 14 else{ 26 }
3 */ 15 [Link] = cont; 27 public void dec() throws Exception{
4 package objeto31; 16 } 28 [Link]--;
5 17 } 29 if (cont<0){
6 public class Contador { 18 public int getCont() { 30 throw new Exception("error contador negativo!");
7 19 return cont; 31 }
8 private int cont; 20 } 32 }
9 21 public void setCont(int cont) { 33 public void show(){
10 public Contador(int cont) throws Exception { 22 [Link] = cont; 34 [Link](cont);
11 if (cont<0){ 23 } 35 }
12 throw new Exception("error contador negativo!"); 24 public void add(){ 36 }

CLASE NuevoContador
1 /* 14 [Link]([Link]()+cantidad);
2 -- 15 }
3 */ 16 public void dec(int cantidad) throws Exception {
4 package objeto31; 17 //utilizo set y get porque son privados
5 18 //en contador y tengo que cogerlos
6 public class NuevoContador extends Contador{ 19 [Link]([Link]()-cantidad);
7 20 if([Link]()<0){
8 public NuevoContador(int cont) throws Exception {//hereda de contador 21 throw new Exception("error contador negativo!");
9 super(cont);//creamos constructor y llama al cont de contador 22 }
10 } 23 }
11 public void add(int cantidad) { 24 }
12 //utilizo set y get porque son privados
13 //en contador y tengo que cogerlos

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 64


MAIN UML Alquiler
1 /* -nombre:String
2 En un puerto se alquilan amarres para barcos de distinto tipo.
3 Para cada ALQUILER se guarda el nombre y DNI del cliente, -dni:String
4 las fechas inicial y final de alquiler, la posición del amarre -fechaInicio:LocalDate
5 y el barco que lo ocupará. Un BARCO se caracteriza por su matricula,
6 su eslora en metros y año de fabricación. -fechaFin:LocalDate
7 Un alquiler se calcula multiplicando el número de días de ocupación -posicion:String
8 (incluyendo los días inicial y final) por un módulo (un número) en
9 función de cada barco (obtenido simplemente multiplicando por 10 los -barco:Barco
10 metros de eslora) y por un valor fijo (2 en la actualidad).
11 +Se pretende diferenciar la información de algunos tipos de barcos:
+Alquiler(string,String,LocalDate,LocalDate,String;Barco)
12 -Número de mástiles para veleros +getAlquiler():double
13 -Potencia en CV para embarcaciones deportivas a motor
14 -Potencia en CV y número de camarotes para yates de lujo UML Barco
15 +El módulo de los barcos de un tipo especial se obtiene como el módulo normal más: -matricula:String
16 -El número de mástiles para veleros
17 -La potencia en CV para embarcaciones deportivas a motor -eslora:double
18 -La potencia en CV más el número de camarotes para yates de lujo -anyo:int
19 -añadir interface para que saque datos del alquiler
20 */ +Barco(String,double,int)
21 package objeto32;
22
+getModulo():double
23 import [Link].*; UML Veleros UML Deportivas
24
25 public class Objeto32 { -mastiles:int -potencia:double
26 +Veleros(int;String,it) +getArea(double)
27 public static void main(String[] args) {
28 +Triangulo(double,double) +Deportivas(double,String,
29 Veleros b=new Veleros(2,"FH-1234-M",3,2);
30
+getModulo():double double,int)
31 LocalDate fechai=[Link](2016,1,1); +getModulo():double
32 LocalDate fechaf=[Link](2016,3,1);
33 UML Yates
34 Alquiler a=new Alquiler("712839","alvaro",fechai,fechaf,b,"207"); -potencia:double
35
36 [Link]("el precio es: "+[Link]()+" €"); -camarotes:int
37 +Yates(double,int,String,double,int)
38 Interfaz i=new Interfaz();
39 [Link](a); +getModulo():double
40 }
41 }

CLASE Alquiler
1 /* 43 public void setFechaInicio(LocalDate fechaInicio) { 85 return total;
2 -- 44 [Link] = fechaInicio; 86 }
3 */ 45 } 87 }
4 package objeto32; 46 public LocalDate getFechaFin() {
5 47 return fechaFin;
6 import [Link]; 48 }
7 import [Link].*; 49 public void setFechaFin(LocalDate fechaFin) {
8 import [Link].*; 50 [Link] = fechaFin;
9 51 }
10 public class Alquiler { 52 public Barco getBarco() {
11 53 return barco;
12 private String dni; 54 }
13 private String nombre; 55 public void setBarco(Barco barco) {
14 private LocalDate fechaInicio; 56 [Link] = barco;
15 private LocalDate fechaFin; 57 }
16 private Barco barco; 58 public String getPosicion() {
17 private String posicion; 59 return posicion;
18 60 }
19 public Alquiler(String dni, String nombre, LocalDate fechaInicio, 61 public void setPosicion(String posicion) {
20 LocalDate fechaFin, Barco barco, String posicion) { 62 [Link] = posicion;
21 [Link] = dni; 63 }
22 [Link] = nombre; 64 @Override
23 [Link] = fechaInicio; 65 public String toString() {
24 [Link] = fechaFin; 66 return "Alquiler{" + "dni=" + dni + ", nombre=" + nombre +
25 [Link] = barco; 67 ", fechaInicio=" + fechaInicio + ", fechaFin=" + fechaFin +
26 [Link] = posicion; 68 ", Barco=" + barco + ", posicion=" + posicion + '}';
27 } 69 }
28 public String getDni() { 70 public double getAlquiler (){
29 return dni; 71 //obtiene la diferencia en dia entre dos fechas y hora
30 } 72 LocalDateTime i=[Link](//fecha inicio
31 public void setDni(String dni) { 73 [Link](),
32 [Link] = dni; 74 [Link](),
33 } 75 [Link](),
34 public String getNombre() { 76 0,0);
35 return nombre; 77 LocalDateTime f=[Link](//fecha fin
36 } 78 [Link](),
37 public void setNombre(String nombre) { 79 [Link](),
38 [Link] = nombre; 80 [Link](),
39 } 81 0,0);
40 public LocalDate getFechaInicio() { 82 //devuelve diferencia en dias entre fechas
41 return fechaInicio; 83 long dias=[Link](i,f).toDays();//toMonths toYears
42 } 84 double total=dias*[Link]()*2;

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 65


CLASE Veleros CLASE Deportivas CLASE Yates
1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto32; 4 package objeto32; 4 package objeto32;
5 5 5
6 public class Veleros extends Barco{ 6 public class Deportivas extends Barco{ 6 public class Yates extends Barco{
7 7 7
8 private int mastiles; 8 private double potencia; 8 private double potencia;
9 9 9 private int camarotes;
10 public Veleros(int mastiles, String matricula, 10 public Deportivas(double potencia, String matricula, 10
11 double eslora, int anyo) { 11 double eslora, int anyo) { 11 public Yates(double potencia, int camarotes,
12 super(matricula, eslora, anyo); 12 super(matricula, eslora, anyo); 12 String matricula, double eslora, int anyo) {
13 [Link] = mastiles; 13 [Link] = potencia; 13 super(matricula, eslora, anyo);
14 } 14 } 14 [Link] = potencia;
15 public int getMastiles() { 15 public double getPotencia() { 15 [Link] = camarotes;
16 return mastiles; 16 return potencia; 16 }
17 } 17 } 17 public double getPotencia() {
18 public void setMastiles(int mastiles) { 18 public void setPotencia(double potencia) { 18 return potencia;
19 [Link] = mastiles; 19 [Link] = potencia; 19 }
20 } 20 } 20 public void setPotencia(double potencia) {
21 @Override 21 @Override 21 [Link] = potencia;
22 public String toString() { 22 public String toString() { 22 }
23 return "Veleros{" + "mastiles=" + mastiles + '}'; 23 return "Deportivas{" + "potencia=" + potencia + '}'; 23 public int getCamarotes() {
24 } 24 } 24 return camarotes;
25 public double getModulo (){ 25 public double getModulo (){ 25 }
26 //el modulo de clase Barco superior + mastiles 26 //el modulo de la clase Barco superior + potencia 26 public void setCamarotes(int camarotes) {
27 return [Link]()+[Link]; 27 return [Link]()+[Link]; 27 [Link] = camarotes;
28 28 } 28 }
29 } 29 @Override
30 public String toString() {
31 return "Yates{" + "potencia=" + potencia +
32 ", camarotes=" + camarotes + '}';
33 }
34 public double getModulo (){
35 //el modulo de la clase Barco
36 //superior + potencia + camarotes
37 return [Link]()+[Link]+[Link];
38 }
39 }

CLASE Interfaz
1 /* 21 //saco fechas del alquiler
2 Extension, metodo printInfo que reciba como parametro 22 LocalDate inicio=[Link]();
3 un alquiler y muestre los datos del alquiler por 23 LocalDate fin=[Link]();
4 pantalla con esta forma: 24
5 ALQUILER del cliente: 78293222Q 25 [Link]([Link]([Link]("dd/MM/yyyy")));
6 Del 7/8/2007 al 19/8/2007 (total dias 12) 26 [Link](" al ");
7 EMBARCACION 5678BZD de 14 metros 27 [Link]([Link]([Link]("dd/MM/yyyy")));
8 IMPORTE TOTAL: 567€ 28
9 */ 29 //otra forma de obtener la diferencia entre fechas
10 package objeto32; 30 long dias=[Link](inicio, fin);
11 31 [Link]("total dias "+dias);
12 import [Link].*; 32
13 import [Link]; 33 //accede a la matricula del barco y a la eslora del barco
14 import [Link]; 34 [Link]("EMBARCACION "+[Link]().getMatricula()+
15 35 " de "+[Link]().getEslora()+" metros");
16 public class Interfaz { 36
17 37 [Link]("IMPORTE TOTAL: "+[Link]()+" €");
18 public void printInfo(Alquiler alquiler){//recibe parametro alquiler 38 }
19 [Link]("ALQUILER del cliente: "+[Link]()); 39 }
20

8.-Polimorfismo.
Es la capacidad de un objeto de cambiar en tiempo de ejecución de tipo de clase al que representa. Se ejecuta de
forma automática.

Su objetivo es complementar la herencia en reutilización y flexibilidad. Un objeto puede cambiar de clase siempre hacia
abajo.

B b=new B();
a=b;
C c=new C(); c=b; no vale
A a=null

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 66


MAIN UML Figura
1 /*
2 Diseñar clases Circulo, Triangulo, Cuadrado.
3 Todas tienen un metodo para calcular el area. +getArea():string,int,double
4 Todas son figuras geometricas.
5 */ UML Circulo UML Cuadrado
6 package objeto30_1;
7
-radio:double -lado:double
8 public class Objeto30_1 { +getArea():double +getArea():double
9
10 public static void main(String[] args) { +Circulo(double) +Cuadrado(double)
11 UML Triangulo
12 Circulo ci=new Circulo(6);
13 Triangulo t=new Triangulo(3,5); -base:double
14 Cuadrado c=new Cuadrado(7); -altura:double
15
16 Figura v[]=new Figura[3]; +getArea():double
17 v[0]=ci;
18 v[1]=t;
+Triangulo(double,double)
19 v[2]=c;
20
21 //recorro array y llamo a la operacion area
22 for(int i=0;i<[Link];i++){
23 [Link](v[i].getArea());
24 }
25 [Link]("el area del circulo es: "+[Link]());
26 [Link]("el area del triangulo es: "+[Link]());
27 [Link]("el area del cuadrado es: "+[Link]());
28 }
29 }

CLASE Figura CLASE Circulo CLASE Triangulo CLASE Cuadrado


1 /* 1 /* 1 /* 1 /*
2 -- 2 -- 2 -- 2 --
3 */ 3 */ 3 */ 3 */
4 package objeto30_1; 4 package objeto30_1; 4 package objeto30_1; 4 package objeto30_1;
5 5 5 5
6 public class Figura { 6 public class Circulo extends Figura{ 6 public class Triangulo extends Figura{ 6 public class Cuadrado extends Figura{
7 7 7 7
8 public double getArea(){ 8 private double radio; 8 private double base; 8 private double lado;
9 return 0; 9 9 private double altura; 9
10 } 10 public Circulo(double radio) { 10 10 public Cuadrado(double lado) {
11 } 11 [Link] = radio; 11 public Triangulo(double base, double altura) { 11 [Link] = lado;
12 } 12 [Link] = base; 12 }
13 public double getRadio() { 13 [Link] = altura; 13 public double getLado() {
14 return radio; 14 } 14 return lado;
15 } 15 public double getBase() { 15 }
16 public void setRadio(double radio) { 16 return base; 16 public void setLado(double lado) {
17 [Link] = radio; 17 } 17 [Link] = lado;
18 } 18 public void setBase(double base) { 18 }
19 @Override 19 [Link] = base; 19 @Override
20 public double getArea(){ 20 } 20 public double getArea(){
21 return [Link]*radio*radio; 21 public double getAltura() { 21 return lado*lado;
22 } 22 return altura; 22 }
23 } 23 } 23 }
24 public void setAltura(double altura) {
25 [Link] = altura;
26 }
27 @Override
28 public double getArea(){
29 return (base*altura)/2;
30 }
31 }

RAM Ejemplos comparativos


Circulo
ci à Creacion de un Array para 5 enteros Int v[]=new int[5]:
6
Creación de un Array para 3 circulos Circulo v[]=new Circulo[3]:
Cuadrado
cà Creación de un Array para un circulo, un cuadrado y un triangulo Figura v[]=new Figura[3]:
7
Triangulo

3,5
và 0 1 2 V apunta a la figura y la figura apunta al circulo que esta hacia abajo

En Java existe la superclase Object, todo hereda de ella implícitamente. Cualquier lenguaje a objetos tiene una
superclase.

Object v[ ]=new Object[3]; se puede meter en el Array cualquier cosa por distinta que sea.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 67


MAIN UML Empleado
1 /* -nif:String
2 Una biblioteca cuenta con una clase empleado (nif, nombre, edad).
3 Al añadir nuevas capacidades a la biblioteca descubrimos que -nombre:String
4 necesitamos modelar nuevos tipos de empleados: -edad:int
5 -Empleado temporal del que nos interesa saber la fecha
6 de alta y de baja en la empresa. +Empleado(String,String,int)
7 -Empleado por horas del que nos interesa el precio de la hora
8 trabajada, y el número de horas que ha trabajado este mes.
+toString():String
9 El primero es un dato fijo, mientras el segundo varía todos los meses. +getSueldo():double
10 -Empleado fijo Debemos añadir a la información que almacenamos sobre
11 él el año de alta en la empresa. Además debemos añadir a todos los UML Empleado_Temporal UML Empleado_Horas
12 empleados la funcionalidad de cálculo del sueldo con las consideraciones: -fechaAlta:LocalDate -horas:int
13 -En los empleados temporales el sueldo mensual es fijo.
14 -En los empleados fijos el sueldo es el resultado de sumarle a la base un -fechaBaja:LocalDate -PRECIO:int=15
15 complemento anual fijo multiplicado por el número de años en la empresa. +Empleado_Temporal(LocalDate, +Empleado_Horas(int,String,String,int)
16 -En los empleados por horas el sueldo se calcula multiplicando su sueldo
17 por hora por el número de horas de este mes. LocalDate,String,String,int) +getSueldo():double
18 */ +getSueldo():double +toString():String
19 package objeto33;
20 +toString():String
21 public class Objeto33 {
22
UML Empleado_Fijo
23 public static void main(String[] args) { -anyo:int
24
25 EmpleadoFijo f=new EmpleadoFijo(10,"1111","luis",40); +Empleado_Fijo(int,String,String,int)
26 EmpleadoHoras h=new EmpleadoHoras(10,"1111","luis",40); +getSueldo():double
27
28 [Link]("suldo empleado fijo: "+[Link]()+" €"); +toString():String
29 [Link]("sueldo empleado por horas: "+[Link]()+" €");
30
31 [Link](h); Si la superclase lleva constructor las dependentientes también.
32 [Link](h);
33 }
PRECIO es una constante
34 }

CLASE Empleado CLASE Empleado_Temporal


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package objeto33; 4 package objeto33;
5 5
6 public class Empleado { 6 import [Link].*;
7 7
8 private String nif; 8 public class EmpleadoTemporal extends Empleado{
9 private String nombre; 9
10 private int edad; 10 private LocalDate fechaAlta;
11 11 private LocalDate fechaBaja;
12 public Empleado(String nif, String nombre, int edad) { 12
13 [Link] = nif; 13 public EmpleadoTemporal(LocalDate fechaAlta, LocalDate fechaBaja,
14 [Link] = nombre; 14 String nif, String nombre, int edad) {
15 [Link] = edad; 15 super(nif, nombre, edad);
16 } 16 [Link] = fechaAlta;
17 public String getNif() { 17 [Link] = fechaBaja;
18 return nif; 18 }
19 } 19 public LocalDate getFechaAlta() {
20 public void setNif(String nif) { 20 return fechaAlta;
21 [Link] = nif; 21 }
22 } 22 public void setFechaAlta(LocalDate fechaAlta) {
23 public String getNombre() { 23 [Link] = fechaAlta;
24 return nombre; 24 }
25 } 25 public LocalDate getFechaBaja() {
26 public void setNombre(String nombre) { 26 return fechaBaja;
27 [Link] = nombre; 27 }
28 } 28 public void setFechaBaja(LocalDate fechaBaja) {
29 public int getEdad() { 29 [Link] = fechaBaja;
30 return edad; 30 }
31 } 31 @Override
32 public void setEdad(int edad) { 32 //como no devuelve nif nombre y edad de empleado
33 [Link] = edad; 33 //añadimos [Link]() para cogerlos
34 } 34 public String toString() {
35 @Override 35 return "EmpleadoTemporal{" +[Link]()+
36 public String toString() { 36 "fechaAlta=" + fechaAlta +
37 return "Empleado{" + "nif=" + nif + 37 ", fechaBaja=" + fechaBaja + '}';
38 ", nombre=" + nombre + 38 }
39 ", edad=" + edad + '}'; 39 public double getSueldo(){
40 } 40 return 1000;
41 public double getSueldo(){ 41 }
42 return 0; 42 }
43 }
44 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 68


CLASE Empleado_Horas CLASE Empleado_Fijo
1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package objeto33; 4 package objeto33;
5 5
6 public class EmpleadoHoras extends Empleado{ 6 public class EmpleadoFijo extends Empleado{
7 7
8 private int horas; 8 private int anyo;
9 private final int PRECIO=15;//es una constante 9
10 10 public EmpleadoFijo(int anyo, String nif,
11 public EmpleadoHoras(int horas, String nif, String nombre, int edad) { 11 String nombre, int edad) {
12 super(nif, nombre, edad); 12 super(nif, nombre, edad);
13 [Link] = horas; 13 [Link] = anyo;
14 } 14 }
15 public int getHoras() { 15 public int getAnyo() {
16 return horas; 16 return anyo;
17 } 17 }
18 public void setHoras(int horas) { 18 public void setAnyo(int anyo) {
19 [Link] = horas; 19 [Link] = anyo;
20 } 20 }
21 @Override 21 @Override
22 public String toString() { 22 public String toString() {
23 return "EmpleadoHoras{" + [Link]() + 23 return "EmpleadoFijo{" +[Link]() +
24 "horas=" + horas + 24 "anyo=" + anyo + '}';
25 ", PRECIO=" + PRECIO + '}'; 25 }
26 } 26 public double getSueldo(){
27 public double getSueldo(){ 27 int complemento=200;
28 return [Link]*[Link]; 28 return 1000+[Link]+complemento;
29 } 29 }
30 } 30 }

9.-IDE.
Es un entorno gráfico.

(editor de textoàcompiladoràdepuradoràcontrol de versionesàeditor de pruebas)

• Diagrama UML à código: ingeniería directa


• Codigo à Diagrama UML: ingeniería inversa

UML en Netbeans: herramientasàpluginsàbuscar UMLàinstalar easyUMLàreiniciar.

Ejemplo UML Netbeans alquiler de barcos

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 69


MAIN UML AnalizadorNotas
1 /* 18 */
2 -Diseñar una clase denominada AnalizadorNotas. La clase tiene 19 package objeto34;
3 como atributo un array double de 10 notas ( representa las 20
4 notas de una asignatura ). La clase debe de disponer 21 public class Objeto34 {
5 (junto al constructor, set, get) los siguientes métodos: 22
UML NewAnalizadorNotas
6 + getMin(): double devuelve la menor de las notas 23 public static void main(String[] args) {
7 + getMax(): double devuelve la mayor de las notas 24
8 + getAvg(): double devuelve la media de las notas 25 int i;
9 + sort() ordena el array de notas 26 double notas[]={6,7,4,6,8,7,9,5,3,2};
10 + printInfo() muestra por pantalla todas las notas 27
11 + newNota(pos, nota) modifica la nota que esta en la posición 28 AnalizadorNotas a=new AnalizadorNotas(notas);
12 pos con la nueva nota 29
13 -Diseñar la clase NewAnalizadorNotas que hereda de la 30 [Link]([Link]());
14 primera. Como novedades incorpora los siguientes métodos: 31 [Link]([Link]());
15 + clear() pone todas las notas a 0 32 [Link]([Link]());
16 + getNota(): double devuelve la nota mas repetida, 33 }
17 -1 en caso de que todas sean iguales 34 }

CLASE AnalizadorNotas CLASE NewAnalizadorNotas


1 /* 33 public double getMax(){ 1 /*
2 -- 34 double mayor=Double.MIN_VALUE; 2 --
3 */ 35 int i; 3 */
4 package objeto34; 36 for(i=0;i<N;i++){ 4 package objeto34;
5 37 if(mayor<notas[i]){ 5
6 import [Link]; 38 mayor=notas[i]; 6 public class NewAnalizadorNotas extends AnalizadorNotas{
7 39 } 7
8 public class AnalizadorNotas { 40 } 8 public NewAnalizadorNotas(double[] notas) {
9 41 return mayor; 9 super(notas);
10 //creamos array con 10 notas 42 } 10 }
11 private final int N=10; 43 public double getAVG(){ 11 public void clear(){
12 private double notas[]=new double[N]; 44 double suma=0; 12 int i;
13 45 int i; 13 double temp[]=new double[10];
14 public AnalizadorNotas (double notas[]){ 46 for(i=0;i<N;i++){ 14 for(i=0;i<10;i++){
15 [Link]=notas; 47 //suma+=nota[i] es igual a suma=suma+nota[i] 15 temp[i]=0;
16 } 48 suma+=notas[i]; 16 }
17 public double[] getNotas() { 49 } 17 [Link](temp);
18 return notas; 50 return suma/N; 18 }
19 } 51 } 19 }
20 public void setNotas(double[] notas) { 52 public void sort(){
21 [Link] = notas; 53 [Link](notas);
22 } 54 }
23 public double getMin(){ 55 public void printInfo(){
24 double menor=Double.MAX_VALUE; 56 int i;
25 int i; 57 for(i=0;i<N;i++){
26 for(i=0;i<N;i++){ 58 [Link]("la nota es: "+notas[i]);
27 if(menor>notas[i]){ 59 }
28 menor=notas[i]; 60 }
29 } 61 public void newNota(int pos, double nota){
30 } 62 notas[pos]=nota;
31 return menor; 63 }
32 } 64 }

MAIN
1 /* 35 try{
2 Crear programa que crea cartas a partir de una 36 //abro fichero para escribir
3 plantilla de carta con datos introducidos por 37 FileWriter f=new FileWriter("[Link]");
4 el teclado. 38 PrintWriter pw=new PrintWriter(f);
5 */ 39 //abrimos fichero carta para leer
6 package objeto35; 40 File ff=new File("[Link]");
7 41 FileReader fr=new FileReader(ff);
8 import [Link].*; 42 BufferedReader br=new BufferedReader(fr);
9 import [Link].*; 43
10 44 //leo las lineas y lo meto en var linea
11 public class Objeto35 { 45 String linea;
12 46 while((linea=[Link]())!=null){
13 public static void main(String[] args) { 47 //creo linea2 y remplazo nombre y apellidos por la var nombre
14 48 //sino encuentra nada no hace nada
15 Scanner sc=new Scanner([Link]); 49 String linea2=linea;
16 50 linea2=[Link]("[nombre y apellidos]", nombre);
17 [Link]("nombre y apellidos: "); 51 linea2=[Link]("[direccion]", direccion);
18 String nombre=[Link](); 52 linea2=[Link]("[codigo postal]", codigo);
19 [Link]("direccion: "); 53 linea2=[Link]("[ciudad]", ciudad);
20 String direccion=[Link](); 54 linea2=[Link]("[poblacion]", poblacion);
21 [Link]("codigo postal: "); 55 linea2=[Link]("[dia]", dia);
22 String codigo=[Link](); 56 linea2=[Link]("[mes]", mes);
23 [Link]("ciudad: "); 57 linea2=[Link]("[ano]", ano);
24 String ciudad=[Link](); 58 [Link](linea2);
25 [Link]("poblacion: "); 59 }
26 String poblacion=[Link](); 60 [Link]();
27 [Link]("dia: "); 61 [Link]();
28 String dia=[Link](); 62 }
29 [Link]("mes: "); 63 catch(Exception e){
30 String mes=[Link](); 64 [Link]("error!!!");
31 [Link]("ano: "); 65 }
32 String ano=[Link](); 66 }
33 [Link](" "); 67 }
34

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 70


MAIN
1 /* 34 //creo nuevo fichero que tendra como nombre el
2 Crear programa que crea cartas a partir de una 35 //de la persona al que va dirigida la carta
3 plantilla de carta con datos obtenidos de un 36 FileWriter f=new FileWriter(nombre+".txt");
4 fichero de texto. 37 PrintWriter pw=new PrintWriter(f);
5 */ 38 //abro la carta original, la tengo que abrir cada vez
6 package objeto35_1; 39 //que creo una carta nueva
7 40 File ff=new File("[Link]");
8 import [Link].*; 41 FileReader fr2=new FileReader(ff);
9 42 BufferedReader br2=new BufferedReader(fr2);
10 public class Objeto35_1 { 43
11 44 while((linea2=[Link]())!=null){
12 public static void main(String[] args) { 45 //creo linea2 y remplazo nombre y apellidos por la var nombre
13 46 //sino encuentra nada no hace nada
14 try{ 47 linea2=[Link]("[nombre y apellidos]", nombre);
15 String linea,linea2; 48 linea2=[Link]("[direccion]", direccion);
16 //abrimos fichero carta para leer 49 linea2=[Link]("[codigo postal]", codigo);
17 File fpersonas=new File("[Link]"); 50 linea2=[Link]("[ciudad]", ciudad);
18 FileReader fr1=new FileReader(fpersonas); 51 linea2=[Link]("[poblacion]", poblacion);
19 BufferedReader br=new BufferedReader(fr1); 52 linea2=[Link]("[dia]", dia);
20 53 linea2=[Link]("[mes]", mes);
21 //saco los datos y los meto en las variables 54 linea2=[Link]("[ano]", ano);
22 while((linea=[Link]())!=null){ 55 [Link](linea2);
23 String datos[]=[Link](":"); 56 }
24 57 [Link]();
25 String nombre=datos[0]+" "+datos[1]; 58 [Link]();
26 String direccion=datos[2]; 59 }
27 String codigo=datos[3]; 60 [Link]();
28 String ciudad=datos[4]; 61 }
29 String poblacion=datos[5]; 62 catch(Exception e){
30 String dia=datos[6]; 63 [Link]("error!!!");
31 String mes=datos[7]; 64 }
32 String ano=datos[8]; 65 }
33 66 }

Planteamiento
[Link] [Link] [Link]
Leer Nombre:apellido:direccion Leer [nombre] Escribir [luis]
brà brà [apellidos] pwà [fernandez]
[direccion] [la calle 3]
LEO SUSTITUYO ESCRIBO

MAIN CLASE Persona UML Persona


1 /* 1 /* -dni:String
2 Diseñar programa que lea un fichero y por 2-
3 cada persona cree un objeto con sus datos 3 */ -nombre:String
4 correspondientes y muestre la informacion 4 package objeto36; -edad:int
5 por pantalla con el toString. 5
6 */ 6 public class Persona { +Persona(String,String,Sring)
7 package objeto36; 7 +toString():String
8 8 private String dni;
9 import [Link]; 9 private String nombre;
10 import [Link]; 10 private int edad;
11 import [Link]; 11
12 12 public Persona(String dni, String nombre, int edad) {
13 public class Objeto36 { 13 [Link] = dni;
14 14 [Link] = nombre;
15 public static void main(String[] args) { 15 [Link] = edad;
16 16 }
17 try{ 17 public String getDni() {
18 String linea; 18 return dni;
19 19 }
20 //abrimos fichero para leer 20 public void setDni(String dni) {
21 File fpersonas=new File("[Link]"); 21 [Link] = dni;
22 FileReader fr=new FileReader(fpersonas); 22 }
23 BufferedReader br=new BufferedReader(fr); 23 public String getNombre() {
24 24 return nombre;
25 //saco los datos y los meto en las variables 25 }
26 while((linea=[Link]())!=null){ 26 public void setNombre(String nombre) {
27 String v[]=[Link](":"); 27 [Link] = nombre;
28 28 }
29 //paso datos del split a variables 29 public int getEdad() {
30 String dni=v[0]; 30 return edad;
31 String nombre=v[1]; 31 }
32 //convierto edad 32 public void setEdad(int edad) {
33 int edad=[Link](v[2]); 33 [Link] = edad;
34 //creo las personas 34 }
35 Persona p=new Persona(dni,nombre,edad); 35 @Override
36 [Link]([Link]()); 36 public String toString() {
37 } 37 return "Persona{" + "dni=" + dni +
38 [Link](); 38 ", nombre=" + nombre +
39 } 39 ", edad=" + edad + '}';
40 catch(Exception e){ 40 }
41 [Link]("error!!!"); 41 }
42 }
43 }
44 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 71


MAIN UML Persona
1 /* 36 //creo el array de tamaño ñineas he leido -dni:String
2 Diseñar programa que lea un fichero para que guarde 37 Persona p[]=new Persona[cont];
3 un array de tipo persona todas las personas del 38 int i=0; -nombre:String
4 fichero, luego recorra el array mostrando los 39 try{ -edad:int
5 datos de las personas. (no dar por hecho que hay 40 //abrimos fichero para leer otra vez
6 3 personas en el fichero). 41 String linea; +Persona(String,String,Sring)
7 */ 42 File ff=new File("[Link]"); +toString():String
8 package objeto36_1; 43 FileReader fr1=new FileReader(ff);
9 44 BufferedReader br1=new BufferedReader(fr1); CLASE Persona
10 import [Link]; 45 1 /*
11 import [Link]; 46 2-
12 import [Link]; 47 while((linea=[Link]())!=null){ 3 */
13 48 String v[]=[Link](":"); 4 package objeto36_1;
14 public class Objeto36_1 { 49 //paso datos del split a variables 5
15 50 String dni=v[0]; 6 public class Persona {
16 public static void main(String[] args) { 51 String nombre=v[1]; 7
17 52 //convierto edad 8 private String dni;
18 int cont=0;//que valga para todo el programa 53 int edad=[Link](v[2]); 9 private String nombre;
19 try{ 54 //creo las personas 10 private int edad;
20 String linea; 55 p[i]=new Persona(dni,nombre,edad); 11
21 //abrimos fichero para leer 56 i++; 12 public Persona(String dni, String nombre, int edad) {
22 File fpersonas=new File("[Link]"); 57 } 13 [Link] = dni;
23 FileReader fr=new FileReader(fpersonas); 58 [Link](); 14 [Link] = nombre;
24 BufferedReader br=new BufferedReader(fr); 59 15 [Link] = edad;
25 60 for(i=0;i<[Link];i++){ 16 }
26 61 [Link](p[i]); 17 public String getDni() {
27 //contamos las lineas que hay en el fichero 62 } 18 return dni;
28 while((linea=[Link]())!=null){ 63 } 19 }
29 cont++; 64 catch(Exception e){ 20 public void setDni(String dni) {
30 } 65 [Link]("error!!!"); 21 [Link] = dni;
31 [Link](); 66 } 22 }
32 } 67 } 23 public String getNombre() {
33 catch(Exception e){ 68 } 24 return nombre;
34 [Link]("error!!!"); 25 }
35 } 26 public void setNombre(String nombre) {
27 [Link] = nombre;
28 }
29 public int getEdad() {
30 return edad;
31 }
32 public void setEdad(int edad) {
33 [Link] = edad;
34 }
35 @Override
36 public String toString() {
37 return "Persona{" + "dni=" + dni +
38 ", nombre=" + nombre +
39 ", edad=" + edad + '}';
40 }
41 }

Dado el siguiente UML y Main, indicar lo que sale por pantalla.

UML Vehiculo MAIN RAM Pantalla


-matricula:String Vehiculo a=new Vehiculo(“1”); aà 1 Tanque hereda de vehiculo y hay que ponerlo 8
+Vehiculo(String) Vehiculo b=new Vehiculo(“2”); bà 2 8 La a, b apuntan a vehículos y la c apunta a tanque 8
+toString():String Tanque c=new Tanque(“4”); cà 4 8 a=b; se puede hacer (el vehiculo apunta a otro vehiculo) 8
UML Tanque a=b; b=c; se puede hacer porque es hacia abajo.
[Link](“8”);
[Link](a);
+Tanque(String) [Link](b);
b=c;
[Link](“8”);
[Link](b);

UML Vehiculo MAIN RAM Pantalla


-matricula:String Vehiculo a=new Vehiculo(“3”); aà 3 9 20 Object o=null; o apunta a nada. 9
+Vehiculo(String) Vehiculo b=new Vehiculo(“9”); bà 9 o=a; o si puede apuntar a un vehiculo 9
+toString():String Object o=null; oà nada b=null= b no apunta a nada.
UML Tanque o=a;; o=b; o apunta a b que no hay nada y no se puede
[Link](“9”); Cambiar el valor y genera una excepcion
[Link](a);
+Tanque(String) a=b;
[Link](“20”);
[Link](b);
b=null;
o=b;
[Link](“89”);

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 72


MAIN CLASE Persona UML Persona
1 /* 1 /* -dni:String
2 Crear una clase presona con la opcion 2-
3 equals y devuelve true o false si ambas 3 */ -nombre:String
4 presonas sean iguales o no. 4 package objeto36_2; -edad:int
5 */ 5
6 package objeto36_2; 6 public class Persona { +Persona(String,String,int)
7 7 +toString():String
8 public class Objeto36_2 { 8 private String dni;
9 9 private String nombre; +equals(Persona):boolean
10 public static void main(String[] args) { 10 private int edad; 32 public void setEdad(int edad) {
11 11 33 [Link] = edad;
12 Persona a=new Persona("1111","luis",45); 12 public Persona(String dni, String nombre, int edad) { 34 }
13 Persona b=new Persona("1111","luis",45); 13 [Link] = dni; 35 @Override
14 14 [Link] = nombre; 36 public String toString() {
15 if([Link](b)){ 15 [Link] = edad; 37 return "Persona{" + "dni=" + dni +
16 [Link]("iguales"); 16 } 38 ", nombre=" + nombre +
17 } 17 public String getDni() { 39 ", edad=" + edad + '}';
18 else{ 18 return dni; 40 }
19 [Link]("son diferentes"); 19 } 41 public boolean equals(Persona p){
20 } 20 public void setDni(String dni) { 42 if([Link]([Link]())&&([Link]==[Link]())){
21 } 21 [Link] = dni; 43 return true;
22 } 22 } 44 }
23 public String getNombre() { 45 else{
24 return nombre; 46 return false;
25 } 47 }
26 public void setNombre(String nombre) { 48 }
27 [Link] = nombre; 49 }
28 }
29 public int getEdad() {
30 return edad;
31 }

MAIN CLASE garaje CLASE Coche


1 /* 1 /* 1 /*
2 En un garaje podemos almacenar N coches, la operacion 2 -- 2 --
3 add guarda un coche en el garaje, la operacion get 3 */ 3 */
4 saca el ultimo coche y getPrecio devuelve el precio 4 package objeto37; 4 package objeto37;
5 de los coches almacenados. 5 5
6 Guardar en el garaje los coches (1111,10000) y (2222,15000) 6 public class Garaje { 6 public class Coche {
7 Modificar el precio del coche 1111 por 19000. Mostrar por 7 7
8 pantallas la suma total de los precios del garaje. 8 private Coche v[]=new Coche[10]; 8 private String matricula;
9 Sacar los dos coches del garaje. 9 private int contador=0; 9 private double precio;
10 */ 10 10
11 package objeto37; 11 //meter coches en garaje 11 public Coche(String matricula, double precio) {
12 12 public void add(Coche c){ 12 [Link] = matricula;
13 public class Objeto37 { 13 v[contador]=c; 13 [Link] = precio;
14 14 contador++; 14 }
15 public static void main(String[] args) { 15 } 15 public String getMatricula() {
16 16 //devuelve ultimo coche metido 16 return matricula;
17 Coche a=new Coche("1111",10000); 17 public int get(){ 17 }
18 Coche b=new Coche("2222",15000); 18 contador--; 18 public void setMatricula(String matricula) {
19 19 return 0; 19 [Link] = matricula;
20 Garaje g=new Garaje();//creo garaje 20 } 20 }
21 21 //devuelve precio de los coches 21 public double getPrecio() {
22 [Link](19000); 22 public double getPrecio(){ 22 return precio;
23 [Link]([Link]()); 23 int i; double suma=0; 23 }
24 24 for(i=0;i<contador;i++){ 24 public void setPrecio(double precio) {
25 [Link](a);//meto coche en garaje 25 suma=suma+v[i].getPrecio(); 25 [Link] = precio;
26 [Link](b);//meto coche en garaje 26 } 26 }
27 27 return suma; 27 @Override
28 [Link]([Link]()); 28 } 28 public String toString() {
29 int c=[Link]();//saco coche de garaje 29 } 29 return "Coche{" + "matricula=" + matricula +
30 int p=[Link]();//saco coche de garaje 30 ", precio=" + precio + '}';
31 } 31 }
32 } 32 }

10.-Clases abstractas.
No se pueden instanciar, debemos heredar de ella y ya instanciar la clase heredada. Si no se dice nada se puede crear
objetos de 3 tipos, Profesor, Interino y Titular. Pero si solo quiero crear objetos de tipo Interino o Titular creo clases
abstractas. Para crearla:

<<abstract>>
MAIN
Profesor
1 /*
2 --.
3 */
4 package objeto38;
5
ProfesorInterino
6 public class Objeto38 {
7
8 public static void main(String[] args) {
9 ProfesorTitular
10 //no podemos instanciar profesor al
11 //ser abstracta la clase
12 //Profesor p=new Profesor("12","luis",25);
13
14 ProfesorTitular p=new ProfesorTitular("12","luis",25);
15 [Link]();
16 }
17 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 73


CLASE Profesor CLASE ProfesorInterino CLASE ProfesorTitular
1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto38; 4 package objeto38; 4 package objeto38;
5 5 5
6 public abstract class Profesor { 6 public class ProfesorInterino extends Profesor{ 6 public class ProfesorTitular extends Profesor{
7 7 7
8 private String IdProfesor; 8 public ProfesorInterino(String IdProfesor, 8 public ProfesorTitular(String IdProfesor,
9 private String nombre; 9 String nombre, int edad) { 9 String nombre, int edad) {
10 private int edad; 10 super(IdProfesor, nombre, edad); 10 super(IdProfesor, nombre, edad);
11 11 } 11 }
12 public Profesor(String IdProfesor, String nombre, int edad) { 12 @Override 12 @Override
13 [Link] = IdProfesor; 13 public float importeNomina(){ 13 public float importeNomina(){
14 [Link] = nombre; 14 return 1200; 14 return 1800;
15 [Link] = edad; 15 } 15 }
16 } 16 } 16 }
17 public String getIdProfesor() { 19 } 32 public void setEdad(int edad) {
18 return IdProfesor; 20 public void setIdProfesor(String IdProfesor) { 33 [Link] = edad;
21 [Link] = IdProfesor; 34 }
22 } 35 public void show(){
23 public String getNombre() { 36 [Link]("profesor de nombre: "+
24 return nombre; 37 getNombre()+" "+
25 } 38 "edad: "+getEdad()+" con Id de profesor: "+
26 public void setNombre(String nombre) { 39 getIdProfesor());
27 [Link] = nombre; 40 }
28 } 41 //metodo que aun no esta programado
29 public int getEdad() { 42 //se pone ; al final
30 return edad; 43 abstract public float importeNomina();
31 } 44 }

Las clases abstractas suelen tener métodos abstractos que tienen las siguientes características:

• No tienen llaves {}, acaban en punto y coma ;


• Solo se pueden utilizar en una clase abstracta.
• Obligatoriamente deben ser sobreescritas y programadas en las clases descendientes.

Se puede evitar que una clase se herede con:

Final class MiClase{


}

11.-Interface.
Es un paso más allá de una clase abstracta, va a ser una clase abstracta pura, todos los métodos son abstractos y no va
a tener ningún atributo “normal” (final o static).
Interface Nombre{ Public class MiClase implements Nombre{
método(); método(){
método(); //contenido
} }
método(){
//contenido
}
}

<<interface>>
MAIN CLASE InstrumentoMusical CLASE Guitarra
InstrumentoMusical
1 /* 1 /* 1 /*
2 2 -- 2 --
3 */ 3 */ 3 */
4 package objeto39; 4 package objeto39; 4 package objeto39;
5 5 5
Guitarra
6 public class Objeto39 { 6 public interface InstrumentoMusical { 6 public class Guitarra implements InstrumentoMusical{
7 7 7
8 public static void main(String[] args) { 8 //no se implementa nada en los metodos 8 public void tocar(){
9 9 public void tocar(); 9 //codigo
10 Guitarra g=new Guitarra(); 10 public void afinar(); 10 }
11 [Link](); 11 public String tipoInstrumento(); 11 public void afinar(){
12 } 12 } 12 //codigo
13 } 13 }
14 public String tipoInstrumento(){
15 //codigo
16 return "";
17 }
18 }

Se pueden implementar varios interface a la vez Se pueden heredar e implementar a la vez


public class MiClase implements Uno, Dos{ public class MiClase extends MiClase2 implements Uno, Dos{
} }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 74


Ejercicios.
1 /* 26 else{
2 Dado el fichero de texto [Link] 27 //abrimos fichero para leer
3 4:%: 8:@: 2:*: 28 FileReader fr=new FileReader(archivo);
4 analizarlo y mostrar por pantalla el dibujo 29 BufferedReader br=new BufferedReader(fr);
5 correspondiente: 30
6 %%%% 31 //saco los datos y los meto en las variables
7 @@@@@@@@ 32 String linea;
8 ** 33 while((linea=[Link]())!=null){
9 Hacerlo con un main 34 String v[]=[Link](":");
10 */ 35 int numero=[Link](v[0]);
11 package objeto40; 36
12 37 for(int i=0;i<numero;i++){
13 import [Link]; 38 [Link](v[1]);
14 import [Link]; 39 }
15 import [Link]; 40 [Link]();
16 41 }
17 public class Objeto40 { 42 [Link]();
18 43 }
19 public static void main(String[] args) { 44 }
20 //comprobamos que existe 45 catch(Exception e){
21 try{ 46 [Link]("error!!!");
22 File archivo=new File("[Link]"); 47 }
23 if(![Link]()){ 48 }
24 [Link]("error, no existe"); 61 }
25 }
49 }

MAIN CLASE Analiza


1 /* 1 /* 24 //abrimos fichero para leer
2 Dado el fichero de texto [Link] 2 -- 25 FileReader fr=new FileReader(archivo);
3 4:%: 8:@: 2:*: 3 */ 26 BufferedReader br=new BufferedReader(fr);
4 analizarlo y mostrar por pantalla el dibujo 4 package objeto40_1; 27
5 correspondiente: %%%% @@@@@@@@ ** en el main. 5 28 //saco los datos y los meto en las variables
6 Modificarlo encapsulando el codigo en la clase 6 import [Link]; 29 String linea;
7 Analiza con un constructor que recibe el nombre 7 import [Link]; 30 while((linea=[Link]())!=null){
8 del fichero y un metodo parse() que muestra por 8 import [Link]; 31 String v[]=[Link](":");
9 pantalla directamente el resultado del 9 32 int numero=[Link](v[0]);
10 analisis del fichero. 10 public class Analiza { 33
11 */ 11 34 for(int i=0;i<numero;i++){
12 package objeto40_1; 12 private String fichero; 35 [Link](v[1]);
13 13 36 }
14 public class Objeto40_1 { 14 public Analiza(String fichero) { 37 [Link]();
15 15 [Link] = fichero; 38 }
16 public static void main(String[] args) { 16 } 39 [Link]();
17 17 public void parse(){ 40 }
18 Analiza a=new Analiza("[Link]"); 18 try{//recibe parametro del fichero [Link] 41 }
19 [Link](); 19 File archivo=new File(fichero); 42 catch(Exception e){
20 } 20 if(![Link]()){ 43 [Link]("error!!!");
21 } 21 [Link]("error, no existe"); 44 }
22 } 45 }
23 else{ 46 }

1 /* 17 try{
2 Diseñar un programa (main) que guarde en el 18 FileWriter fichero=new FileWriter("[Link]",true);
3 fichero [Link] la longitud de cada 19 PrintWriter pw=new PrintWriter(fichero);
4 palabra que el usuario introduzca por teclado. 20
5 El programa acaba cuando el usuario escribe salir. 21 [Link]("introduzca palabra: ");
6 */ 22 String palabra=[Link]();
7 package objeto44; 23 while(![Link]("SALIR")){//mientras sea distinta de salir..
8 24 [Link]("longitud de: "+palabra+" = "+[Link]());
9 import [Link]; 25 [Link]("introduzca palabra: ");
10 import [Link].*; 26 palabra=[Link]();
11 27 }
12 public class Objeto44 { 28 [Link]();
13 29 [Link]("fichero creado");
14 public static void main(String[] args) { 30 }
15 31 catch(Exception e){
16 Scanner teclado=new Scanner([Link]); 32 [Link](e);
33 }
34 }
35 }

Dado el UML decir si se cumplen los supuestos.


A A a=null; a=b; si
B b=new B(); b.a(); si
aà a() C c=new C(); p=b; si
D d=new D(); a=d; si
B D B p=null; a.a(); si
pà d.d(); si
bà b() d() ßd a.d(); no
C


c()

Tiene sentido el supuesto:


public abstract final clase{ No, porque no se puede instanciar, debemos heredar de ella para usarla.
} Y final es una clse que no se puede heredar.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 75


MAIN UML Punto
1 /* 14 Punto p4=new Punto(6,2); -x:double
2 Diseñar programa que guarda poligono 15 Punto p5=new Punto(4,2);
3 dados 5 puntos. 16 //creo el array de 5 puntos -y:doube
4 */ 17 Punto v[]=new Punto[5]; +Punto(double,double)
5 package objeto42; 18 v[0]=p1;
6 19 v[0]=p2; +toString():String
7 public class Objeto42 { 20 v[0]=p3;
8 21 v[0]=p4;
UML Poligono
9 public static void main(String[] args) { 22 v[0]=p5; V[5]:Punto
10 //creo los 5 puntos 23 //creo el poligono
11 Punto p1=new Punto(1,1); 24 Poligono p=new Poligono(v); +Poligono(Punto[])
12 Punto p2=new Punto(3,4); 25 [Link](v);
13 Punto p3=new Punto(5,4); 26 }
27 }

CLASE AnalizadorNotas CLASE NewAnalizadorNotas


1 /* 16 return x; 1 /*
2 -- 17 } 2 --
3 */ 18 public void setX(double x) { 3 */
4 package objeto42; 19 this.x = x; 4 package objeto42;
5 20 } 5
6 public class Punto { 21 public double getY() { 6 public class Poligono {
7 22 return Y; 7
8 private double x; 23 } 8 private Punto v[]=new Punto[5];
9 private double Y; 24 public void setY(double Y) { 9
10 25 this.Y = Y; 10 public Poligono(Punto v[]) {//recibe el punto
11 public Punto(double x, double Y) { 26 } 11 this.v=v;
12 this.x = x; 27 @Override 12 }
13 this.Y = Y; 28 public String toString() { 13 public Punto[] getV() {
14 } 29 return "Punto{" + "x=" + x + ", Y=" + Y + '}'; 14 return v;
15 public double getX() { 30 } 15 }
31 } 16 public void setV(Punto[] v) {
17 this.v = v;
18 }
19 }

MAIN UML Anuncio


1 /* 19 public static void main(String[] args) { -seccion:int
2 Un anuncio se compone de una seccion (numero) 20
3 y texto. Un TablonAnuncios se compone de como 21 Anuncio a1=new Anuncio(0,"vendo coche"); -texto:String
4 mucho 5 secciones y como mucho 10 anuncios por 22 Anuncio a2=new Anuncio(0,"vendo casa"); +Anuncio(int,String)
5 seccion (es decir, una tabla). El TablonAnuncios 23 Anuncio a3=new Anuncio(2,"compro coche");
6 debe tener las siguientes operaciones: 24 +toString():String
7 -clear(): borra todos los anuncios. 25 //creo el tablon
8 -getAnuncios(int): devuelve cuantos anuncios hay 26 TablonAnuncios t=new TablonAnuncios();
UML TablonAnuncios
9 en una seccion indicada. 27 +tablon[5][10]:Anuncio
10 -getAnuncio(int,int): devuelve el anuncio de la 28 //meto los anuncios en el tablon
11 seccion y posicion indicada. 29 [Link](a1); +Contador[5]:int
12 -addAnuncio(Anuncio): inserta un anuncio en la 30 [Link](a2); +clear()
13 seccion correspondiente. 31 [Link](a3);
14 */ 32 +getAnuncios(int):int
15 package objeto43; 33 //muestro cuantos anuncios hay en seccion 0 +getAnuncio(int,int):Anuncio
16 34 [Link]([Link](0));
17 public class Objeto43 { 35 } +addAnuncio(Anuncio)
18 36 }

CLASE Anuncio CLASE TablonAnuncios


1 /* 4 package objeto43;
2 -- 5
3 */ 6 public class TablonAnuncios {
4 package objeto43; 7 //creo la tabla
5 8 private final int SECCIONES=5;
6 public class Anuncio { 9 private final int TOPE=10;
7 10 private Anuncio tablon[][]=new Anuncio[SECCIONES][TOPE];
8 private int seccion; 11 private int contadores[]=new int[SECCIONES];
9 private String texto; 12
10 13 public void addAnuncio(Anuncio a){
11 public Anuncio(int seccion, String texto) { 14 int seccion=[Link]();//obtengo la fila
12 [Link] = seccion; 15 int cont=contadores[seccion];//obtengo la columna
13 [Link] = texto; 16 if(cont<TOPE){//si no llega al tope...
14 } 17 tablon[seccion][cont]=a;//inserto anuncio en tablon
15 public int getSeccion() { 18 contadores[seccion]++;//actualizo contador de seccion
16 return seccion; 19 }
17 } 20 }
18 public void setSeccion(int seccion) { 21 public int getAnuncios(int seccion){
19 [Link] = seccion; 22 return contadores[seccion];//obtengo anuncios de seccion
20 } 23 }
21 public String getTexto() { 24 public void clear(){
22 return texto; 25 for(int i=0;i<SECCIONES;i++){
23 } 26 contadores[i]=0;
24 public void setTexto(String texto) { 27 }
25 [Link] = texto; 28 for(int i=0;i<SECCIONES;i++){//vacio el tablon
26 } 29 for(int j=0;j<TOPE;j++){
27 @Override 30 tablon[i][j]=null;
28 public String toString() { 31 }
29 return "Anuncio{" + "seccion=" + seccion 32 }
30 + ", texto=" + texto + '}'; 33 }
31 } 34 public Anuncio getAnuncio(int seccion, int posicion){
32 } 35 return tablon[seccion][posicion];
36 }
37 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 76


TEMA 7 USO AVANZADO DE CLASES

1.-Clases envolventes.
En Java todo dato nativo o primitivo (variables, int, char, long, float) tiene su correspondiente clase envolvente, que
lo convierte en una calse de Java. Muchas clases no admiten tipos nativos en sus parámetros y debemos de convertirlos.

int a;
[Link](a);

TIPO PRIMITIVO CLASE ENVOLVENTE TIPO PRIMITIVO CLASE ENVOLVENTE


byte Byte long Long
short Short double Double
int Integer float Float

Integer a=new Integer(5); //el 5 dentro de una clase Integer c=new Integer(14); //el 14 lo mete en h
int N=5; Integer p=new Integer(N); //el 5 dentro de una clase int h=; [Link]();

Son clases que tienen sus propios métodos. Para pasar a la inversa (hacer operaciones):
1 /* 14 String n1="45"; String n2="5"; 27 if([Link](num2)){
2 Tenemos dos objetos String, n1=45 y n2=5, 15 28 [Link]("iguales");
3 debemos convertirlos a tipo Integer y comparar 16 //se convierte a num entero 29 }
4 si ambos objetos son iguales o no. 17 Integer num1=new Integer(n1); 30 else{
5 Volver a convertir estos objetos Integer a 18 Integer num2=new Integer(n2); 31 [Link]("distintos");
6 tipo nativo almacenando su valor en int a,b. 19 //comparar si son iguales opcion 1 32 }
7 */ 20 if([Link](num2)==0){ 33 int a=[Link]();
8 package clase01; 21 [Link]("iguales"); 34 int b=[Link]();
9 22 } 35
10 public class Clase01 { 23 else{ 36 [Link](n1+n2);//tipo String da 455
11 24 [Link]("distintos"); 37 [Link](a+b);//tipo entero da 50
12 public static void main(String[] args) { 25 } 38 }
13 26 //comparar si son iguales opcion 2 39 }

2.-Clases contenedoras de objetos. Colecciones.


El objetivo es diseñar una clase que se pueda utilizar para guardar en ella un conjunto de objetos y disponer de los
métodos para manejarlos (guardar, buscar, eliminar,etc). Todas funcionan de la misma manera, tienen un atributo que es un
Array. El tamaño nos lo pasan en el constructor, debemos indicar el tipo de objeto que guardaremos en la contenedora, y
en caso extremo el Array será de tipo Object. La limitación es que tenemos un tamaño fijo. Las clases contenedoras no usan
ni set ni get ni toString.
MAIN CLASE Contenedora UML Persona
1 /* 1 /* -dni:String
2 Diseñar una clase contenedora donde poder 2 --
3 almacenar Personas (dni, nombre). 3 */ -nombre:String
4 La clase tendrá un limite que se especifica 4 package clase02; +Persona(String,String)
5 en el constructor y contara con los metodos 5
6 añadir (add) y obtener una persona a partir 6 public class Contenedora { +toString():String
7 de una posicion (get). 7 //creo un array de personas
8 */ 8 //indico tamaño a traves del constructor
UML Contenedora
9 package clase02; 9 private Persona v[]; -v[]:Persona
10 10 private int indice=0;
11 public class Clase02 { 11
-indice:int
12 12 //constructor +Contenedora(int)
13 public static void main(String[] args) { 13 public Contenedora(int max) {
14 //creo las personas 14 v=new Persona[max]; +add(persona)
15 Persona a=new Persona("1111","luis"); 15 } +get(int):Persona
16 Persona b=new Persona("2222","david"); 16 //me pasan una persona que guardar en array v
17 17 public void add(Persona p){ CLASE Persona
18 //contenedor con tamaño maximo 18 if(indice<[Link]){//compruebo que array no esta lleno 6 public class Persona {
19 Contenedora c=new Contenedora(10); 19 v[indice]=p;//meto persona en indice 7
20 20 indice++;//voy sumando personas 8 private String dni;
21 //guardo las personas en la coleccion 21 } 9 private String nombre;
22 [Link](a); 22 } 10
23 [Link](b); 23 //metodo get que devuelve personas 11 public Persona(String dni, String nombre) {
24 24 public Persona get(int posicion){//me pasan posicion 12 [Link] = dni;
25 //obtengo posicion de persona 25 if(posicion<indice){//compruebo que exista posicion 13 [Link] = nombre;
26 Persona p1=[Link](0);//posicion 1 26 return v[posicion];//devuelve persona 14 }
27 Persona p2=[Link](1);//posicion 2 27 } 15 public String getDni() {
28 28 else{ 16 return dni;
29 //si la posicon no es null, las imprimes 29 return null;//sino null 17 }
30 if((p1)!=null||(p2)!=null){ 30 } 18 public void setDni(String dni) {
31 [Link](p1); 31 } 19 [Link] = dni;
32 [Link](p2); 32 } 20 }
33 } 21 public String getNombre() {
34 } 22 return nombre;
35 } 23 }
24 public void setNombre(String nombre) {
25 [Link] = nombre;
26 }
27 @Override
28 public String toString() {
29 return "Persona{" + "dni=" + dni +
30 ", nombre=" + nombre + '}';

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 77


MAIN UML Figura
1 /*
2 Diseñar una clase contenedora para el ejercicio
3 de las figuras geometricas +getArea():string,int,double
4 Figura, Circulo, Triangulo, Cuadrado.
5 Añadir las operaciones: UML Circulo UML Cuadrado
6 add(Figura)
7 get(int):Figura
-radio:double -lado:double
8 get():Figura[] +getArea():double +getArea():double
9 size():int
10 clear() +Circulo(double) +Cuadrado(double)
11 remove(int):boolean UML Triangulo UML Contenedora
12 */
13 package clase03; -base:double -v[]:Figura
14 -altura:double -indice:int
15 public class clase03 {
16 +getArea():double +Contenedora(int)
17 public static void main(String[] args) {
18
+Triangulo(double,double) +add(Figura)
19 Figura f=new Figura(); +get(int):Figura
20
21 Circulo ci=new Circulo(5);
+get():Figura
22 Triangulo t=new Triangulo(5.5,6); +size():int
23 Cuadrado c=new Cuadrado(6.87);
24 +clear()
25 Circulo ci1=new Circulo(3); +remove(int):boolean
26 Triangulo t1=new Triangulo(4,4);
27 37
28 Contenedora co=new Contenedora(10); 38 //si la posicion no es null, las imprimes
29 39 if((p1)!=null||(p2)!=null){
30 //guardo las Figuras en la coleccion 40 [Link](p1);
31 [Link](ci1); 41 [Link](p2);
32 [Link](t1); 42 }
33 43 [Link]("el area del circulo es: "+[Link]());
34 //obtengo posicion de Figuras 44 [Link]("el area del triangulo es: "+[Link]());
35 Figura p1=[Link](0);//posicion 1 45 [Link]("el area del cuadrado es: "+[Link]());
36 Figura p2=[Link](1);//posicion 2 46 }
47 }

CLASE Contenedora
1 /* 23 } 48 //metodo elimina figura de posicion dada
2 -- 24 //metodo get que devuelve figuras 49 //true si todo bien, false si mal
3 */ 25 public Figura get(int pos){//me pasan posicion 50 //muevo todos los elementos una posicion
4 package clase03; 26 if(pos<indice){//compruebo que exista posicion 51 //a la izquierda para machacar
5 27 return v[pos];//devuelve figura 52 public boolean remove(int pos){
6 public class Contenedora { 28 } 53 if(pos<indice){
7 29 else{ 54 for(int i=pos;i<indice-1;i++){
8 //creo un array de figuras 30 return null;//sino null 55 v[i]=v[i+1];
9 //indico tamaño a traves del constructor 31 } 56 }
10 private Figura v[]; 32 } 57 indice--;
11 private int indice=0; 33 //metodo que devuelve todo el array 58 return true;
12 34 public Figura[] get(){ 59 }
13 //constructor 35 return v; 60 else{
14 public Contenedora(int tam) { 36 } 61 return false;
15 v=new Figura[tam]; 37 //metodo que devuelve elementos de la contenedora
16 } 38 public int size(){
17 //me pasan una figura que guardar en array v 39 return indice;
18 public void add(Figura f){ 40 }
19 if(indice<[Link]){//compruebo que array no esta lleno 41 //metodo pone el array a 0
20 v[indice]=f;//meto figura en indice 42 public void clear(){
21 indice++;//voy sumando figuras 43 indice=0;
22 } 44 for(int i=0;i<[Link];i++){
62 } 45 v[i]=null;
63 } 46 }
64 } 47 }

CLASE Figura CLASE Circulo CLASE Triangulo CLASE Cuadrado


1 /* 1 /* 1 /* 1 /*
2 -- 2 -- 2 -- 2 --
3 */ 3 */ 3 */ 3 */
4 package clase03; 4 package clase03; 4 package clase03; 4 package clase03;
5 5 5 5
6 public class Figura { 6 public class Circulo extends Figura{ 6 public class Triangulo extends Figura{ 6 public class Cuadrado extends Figura{
7 7 7 7
8 public double getArea(){ 8 private double radio; 8 private double base; 8 private double lado;
9 return 0; 9 9 private double altura; 9
10 } 10 public Circulo(double radio) { 10 10 public Cuadrado(double lado) {
11 } 11 [Link] = radio; 11 public Triangulo(double base, double altura) { 11 [Link] = lado;
12 } 12 [Link] = base; 12 }
13 public double getRadio() { 13 [Link] = altura; 13 public double getLado() {
14 return radio; 14 } 14 return lado;
15 } 15 public double getBase() { 15 }
16 public void setRadio(double radio) { 16 return base; 16 public void setLado(double lado) {
17 [Link] = radio; 17 } 17 [Link] = lado;
18 } 18 public void setBase(double base) { 18 }
19 @Override 19 [Link] = base; 19 @Override
20 public double getArea(){ 20 } 20 public double getArea(){
21 return [Link]*radio*radio; 21 public double getAltura() { 21 return lado*lado;
22 } 22 return altura; 22 }
23 } 23 } 23 }
24 public void setAltura(double altura) {
25 [Link] = altura;
26 }
27 @Override
28 public double getArea(){
29 return (base*altura)/2;
30 }
31 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 78


MAIN UML Contenedora
1 /* 18 Contenedora c=new Contenedora(10); -v[]:Barco
2 Diseñar una clase contenedora para el ejercicio 19 Veleros v=new Veleros(2,"b11",100,1900);
3 de los barcos. crear los metodos add, get(int), 20 Yates y=new Yates(150,2,"b12",100,1900); -indice:int
4 clear, size(). 21 Barco b=new Barco("b13",100,1900); +Contenedora(int)
5 incluir un metodo que reciba una matricula 22
6 getMatricula(string) y nos devuelva el barco 23 [Link](v); +add(Barco)
7 con esa matricula. 24 [Link](y);
8 incluir un metodo que reciba una eslora y nos diga 25 [Link](b);
+get(int):barco
9 cuantos barcos tienen mas que esa eslora 26 +size():int
10 getEslora(double):int 27 [Link]([Link]("b13"));
11 */ 28 [Link]([Link](90));
+clear()
12 package clase04; 29 } +getmatricula(String):matricula
13 30 }
14 public class Clase04 { +getEslora(double):int
15
16 public static void main(String[] args) {
17

CLASE Contenedora
1 /* 27 public int size(){ 52 while(i<indice && encontrado==false){
2 -- 28 return indice; //nº elementos dentro 53 if(v[i].getMatricula().equals(matricula)){
3 */ 29 } 54 encontrado=true;
4 package clase04; 30 public void clear(){ //borro 55 }
5 31 indice=0; 56 else{
6 public class Contenedora { 32 int i; 57 i++;
7 private Barco v[]; 33 for(i=0;i<[Link];i++){ 58 }
8 private int indice=0; 34 v[i]=null; 59 }
9 35 } 60 if(i==indice){
10 public Contenedora(int tam) { 36 } 61 return null;
11 v = new Barco[tam]; 37 public int getEslora(double eslora){ 62 }
12 } 38 int i; 63 else{
13 public void add(Barco f){ 39 int contador=0; 64 return v[i];
14 if (indice<[Link]){ 40 65 }
15 v[indice]=f; 41 for(i=0;i<indice;i++){ 66 }
16 indice++; 42 if(v[i].getEslora()>eslora){ 67 }
17 } 43 contador++;
18 } 44 }
19 public Barco get (int pos){ 45 }
20 if(pos<indice && pos>=0){ 46 return contador;
21 return v[pos]; 47 }
22 } 48 public Barco getMatricula(String matricula){
23 else{ 49 int i=0;
24 return null; 50 boolean encontrado=false;
25 } 51
26 }

MAIN UML Articulo UML Factura


1 /* -id:String -v[10]:Articulo
2 un articulo se caractariza por tener un id,
3 descripcion y precio. -descripcion:String -indice:int
4 diseñar una clase contenedora Factura, donde -precio:double
5 podamos meter un máximo de 10 articulos.
6 la clase debe disponer de un metodo add y +Articulo(String,String,double) +add(Articulo)
7 getImporte que nos devuelva el total del +getImporte():double
8 importe (sumatorio de precio*uds).
+toString():String
9 incluir NewFActura incluyendo una fecha, UML NewFactura
10 cliente, IVA que se aplicara en el getImporte.
11 estos datos se pasan en el constructor. -fecha:LocalDate
12 */ -cliente:String
13 package clase05;
14 -IVA:double
15 import [Link]; +NewFactura(LocalDate,String,double)
16
17 public class Clase05 { +getImporte():double
18
19 public static void main(String[] args) {
Limitación:En el contenedor indico el máx de elementos.
20
21 LocalDate fecha=[Link](2016,3,16);
22 Factura f=new Factura();
23 NewFactura f1=new NewFactura(fecha,"luis",0.21);
24
25 Articulo a1=new Articulo("01","zapatos",50.75);
26 Articulo a2=new Articulo("02","bolso",70);
27 Articulo a3=new Articulo("03","chaqueta",110.25);
28 Articulo a4=new Articulo("04","pantalon",90);
29
30 [Link](a1);[Link](a3);[Link](a3);[Link](a4);
31 [Link](a1);[Link](a3);[Link](a3);[Link](a4);
32
33 [Link]([Link]());
34
35 [Link]("precio: "+[Link]());
36 [Link]("iva: "+[Link]());
37 [Link]("precio total: "+([Link]()+[Link]()));
38 }
39 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 79


CLASE Articulo CLASE Factura CLASE NewFactura
1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package clase05; 4 package clase05; 4 package clase05;
5 5 5
6 public class Articulo { 6 public class Factura { 6 import [Link];
7 7 //creo array de 10 articulos 7
8 private String id; 8 private Articulo v[]=new Articulo[10]; 8 public class NewFactura extends Factura{
9 private String descripcion; 9 private int indice=0; 9
10 private double precio; 10 //no lleva constructor, ya se indica 10 private LocalDate fecha;
11 11 //tamaño en el array 11 private String cliente;
12 public Articulo(String id, String descripcion, double precio) { 12 public void add(Articulo f){ 12 private double IVA;
13 [Link] = id; 13 if (indice<[Link]){ 13
14 [Link] = descripcion; 14 v[indice]=f; 14 //no hay super porque la clase superior no tiene constructor
15 [Link] = precio; 15 indice++; 15 public NewFactura(LocalDate fecha, String cliente, double IVA) {
16 } 16 } 16 [Link] = fecha;
17 public String getId() { 17 } 17 [Link] = cliente;
18 return id; 18 public double getImporte(){ 18 [Link] = IVA;
19 } 19 int i; 19 }
20 public void setId(String id) { 20 double total=0; 20 public LocalDate getFecha() {
21 [Link] = id; 21 for(i=0;i<indice;i++){ 21 return fecha;
22 } 22 total+=v[i].getPrecio(); 22 }
23 public String getDescripcion() { 23 } 23 public void setFecha(LocalDate fecha) {
24 return descripcion; 24 return total; 24 [Link] = fecha;
25 } 25 } 25 }
26 public void setDescripcion(String descripcion) { 26 } 26 public String getCliente() {
27 [Link] = descripcion; 27 return cliente;
28 } 28 }
29 public double getPrecio() { 29 public void setCliente(String cliente) {
30 return precio; 30 [Link] = cliente;
31 } 31 }
32 public void setPrecio(double precio) { 32 public double getIVA() {
33 [Link] = precio; 33 return IVA;
34 } 34 }
35 @Override 35 public void setIVA(double IVA) {
36 public String toString() { 36 [Link] = IVA;
37 return "Articulo{" + "id=" + id 37 }
38 + ", descripcion=" + descripcion 38 @Override
39 + ", precio=" + precio + '}'; 39 public String toString() {
40 } 40 return "NewFactura{" + "fecha="
41 } 41 + fecha + ", cliente="
42 + cliente + ", IVA=" + IVA + '}';
43 }
44 @Override
45 //al getImporte ya programado de
46 //Factura le añado el iva
47 public double getImporte(){
48 double total=[Link]();
49 return total*IVA;
50 }
51 }

3.-Colecciones en Java.
Son clases contenedoras ya programadas. Su tamaño es dinámico y disponen de los métodos más comunes,
insertar, eliminar, buscar… ([Link].*;)

3.1.-Interface List: colección de objetos con duplicados.


Vextor<Coche> //en coche que se va a meter(String, Integer…)
Vector<Coche> v=new Vector<Coche>(); //<Coche>(); no tiene tamaño, según meto, crece.
[Link](Coche1); //meto coches
[Link](Coche2);
[Link](); //saca tamaño 2.
[Link](1); //borra coche de la posición 1
Coche c=[Link](0); //dame el coche de la posición 0.

<<Interface>>
List
+add +get
+size +remove
ArrayList Vector LinkedList
+add +get +add +get +add +get
+size +remove +size +remove +size +remove

Cada clase programa cada método de forma diferente.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 80


3.1.1.-Vector: la búsqueda en esta colección es más rápida que un LinkedList, el problema es que el vector es una
clase obsoleta.

MAIN CLASE Persona


1 /* 1 /* 18 public void setDni(String dni) {
2 -- 2 -- 19 [Link] = dni;
3 */ 3 */ 20 }
4 package clase06; 4 package clase06; 21 public String getNombre() {
5 5 22 return nombre;
6 import [Link].*; 6 public class Persona { 23 }
7 7 24 public void setNombre(String nombre) {
8 public class Clase06 { 8 private String dni; 25 [Link] = nombre;
9 9 private String nombre; 26 }
10 public static void main(String[] args) { 10 27 @Override
11 11 public Persona(String dni, String nombre) { 28 public String toString() {
12 Persona p1=new Persona("1","luis"); 12 [Link] = dni; 29 return "Persona{" + "dni="
13 Persona p2=new Persona("2","david"); 13 [Link] = nombre; 30 + dni + ", nombre=" + nombre + '}';
14 14 } 31 }
15 //Vector ArrayList LinkedList 15 public String getDni() { 32 }
16 Vector<Persona> v=new Vector<Persona>(); 16 return dni;
17 17 }
18 [Link](p1);
19 [Link](p2);
20 //da el tamaño del vector
21 [Link]([Link]());
22 //elimina posicion 1 del vector
23 [Link](1);
24 //devuelve nombre de posicion 0
25 [Link]([Link](0).getNombre());
26 }
27 }

MAIN CLASE Persona


1 /* 1 /* 18 public void setDni(String dni) {
2 Diseñar una clase contenedora, en ella podemos 2 -- 19 [Link] = dni;
3 meter un nº ilimitado de personas. Utilizar vector 3 */ 20 }
4 */ 4 package clase07; 21 public String getNombre() {
5 package clase07; 5 22 return nombre;
6 6 public class Persona { 23 }
7 import [Link].*; 7 24 public void setNombre(String nombre) {
8 8 private String dni; 25 [Link] = nombre;
9 public class clase07 { 9 private String nombre; 26 }
10 10 27 @Override
11 public static void main(String[] args) { 11 public Persona(String dni, String nombre) { 28 public String toString() {
12 Persona p1=new Persona("1","luis"); 12 [Link] = dni; 29 return "Persona{" + "dni="
13 Persona p2=new Persona("2","david"); 13 [Link] = nombre; 30 + dni + ", nombre=" + nombre + '}';
14 Persona p3=new Persona("3","bea"); 14 } 31 }
15 15 public String getDni() { 32 }
16 Contenedora c=new Contenedora(); 16 return dni;
17 17 }
18 [Link](p1); CLASE Contenedora
19 [Link](p2);
1 /* 13 [Link](p);
20 [Link](p3);
2 -- 14 }
21
3 */ 15 public Persona get(int posicion){
22 [Link]([Link]());
4 package clase07; 16 return [Link](posicion);
23
5 17 }
24 [Link]([Link](2));
6 import [Link].*; 18 public int size(){
25 }
7 19 return [Link]();
26 }
8 public class Contenedora { 20 }
9 21 public void remove(int posicion){
10 private Vector<Persona> v=new Vector<Persona>(); 22 [Link](posicion);
11 23 }
12 public void add(Persona p){ 24 }

3.1.2.-ArrayList: la búsqueda de elementos es más rápida que un LinkedList, es la versión mejorada del vector, se
usa para consultas.

MAIN CLASE Persona


1 /* 1 /* 18 public void setDni(String dni) {
2 -- 2 -- 19 [Link] = dni;
3 */ 3 */ 20 }
4 package clase06_1; 4 package clase06_1; 21 public String getNombre() {
5 5 22 return nombre;
6 import [Link].*; 6 public class Persona { 23 }
7 7 24 public void setNombre(String nombre) {
8 public class Clase06_1 { 8 private String dni; 25 [Link] = nombre;
9 9 private String nombre; 26 }
10 public static void main(String[] args) { 10 27 @Override
11 11 public Persona(String dni, String nombre) { 28 public String toString() {
12 Persona p1=new Persona("1","luis"); 12 [Link] = dni; 29 return "Persona{" + "dni="
13 Persona p2=new Persona("2","david"); 13 [Link] = nombre; 30 + dni + ", nombre=" + nombre + '}';
14 14 } 31 }
15 ArrayList<Persona> v=new ArrayList<Persona>(); 15 public String getDni() { 32 }
16 16 return dni;
17 [Link](p1); 17 }
18 [Link](p2);
19 //recorrido de un list forma 1
20 int i=0;
21 for(i=0;i<[Link]();i++){ 29 //recorrido de un list forma 3 36 //recorrido de un list forma 4
22 [Link]([Link](i).getNombre()); 30 //se usa Iterator para recorrer 37 //por cada elemento de v sacas la e
23 } 31 Iterator<Persona> it=[Link](); 38 [Link](
24 //recorrido de un list forma 2 32 while([Link]()){//mientras haya elementos.. 39 e->[Link](e)
25 //mete personas desde v a p y las va sacando 33 Persona p=[Link]();//avanzas de uno a otro 40 );
26 for(Persona p:v){ 34 [Link]([Link](i).getNombre()); 41 }
27 [Link]([Link](i).getNombre()); 35 } 42 }
28 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 81


MAIN CLASE Articulo CLASE Factura
1 /* 1 /* 1 /*
2 Dado un Articulo (id, descripcion,precio) crear 2 -- 2 --
3 una clase contenedora Factura donde guardas 3 */ 3 */
articulos, 4 package clase08; 4 package clase08;
4 obtener el importe total, eliminar un articulo por 5 5
5 posicion y obtener el total de articulos almacenados. 6 public class Articulo { 6 import [Link].*;
6 */ 7 private String id; //declaro los atributos 7
7 package clase08; 8 private String descripcion; 8 public class Factura {
8 9 private double precio; 9 private ArrayList<Articulo> v=new
9 public class clase08 { 10 ArrayList<Articulo>();
10 11 public Articulo(String id, String descripcion, double precio) 10
11 public static void main(String[] args) { { 11 public void add(Articulo p){
12 12 [Link] = id; //constructor 12 [Link](p);
13 Articulo a= new Articulo("1111","luis",1); 13 [Link] = descripcion; 13 }
14 Articulo b= new Articulo("2222","david",2); 14 [Link] = precio; 14 public void remove(int posicion){
15 15 } 15 [Link](posicion);
16 Factura c=new Factura(); 16 public String getId() { //set y get 16 }
17 17 return id; 17 public int size(){
18 [Link](a); 18 } 18 return [Link]();
19 [Link](b); 19 public void setId(String id) { 19 }
20 20 [Link] = id; 20 public double getTotal(){
21 [Link]([Link]()); 21 } 21 double total=0;
22 22 public String getDescripcion() { 22 int i;
23 [Link](1); 23 return descripcion; 23
24 24 } 24 for (i=0;i<[Link]();i++){
25 [Link]([Link]()); 25 public void setDescripcion(String descripcion) { 25 total=total+[Link](i).getPrecio();
26 [Link]([Link]()); 26 [Link] = descripcion; 26 }
27 } 27 } 27 return total;
28 } 28 public double getPrecio() { 28 }
29 return precio; 29 }
30 }
31 public void setPrecio(double precio) {
32 [Link] = precio;
33 }
34 @Override
35 public String toString() { //llamo al string
36 return "Articulo{" + "id=" + id + ", descripcion="
37 + descripcion + ", precio=" + precio + '}';
38 }
39 }

3.1.3.-LinkedList: la aplicación está optimizada para altas y eliminaciones de elementos, (altas y bajas).

3.2.-Interface Set: permite almacenar elementos no duplicados (no los inserta). El hashset.

3.3.-Interface Map: se trata de un Array asociativo. Es un Array donde el índice no es un número, sino texto.

Valor: Luis David Bea


Índice: 1224A 2345B 3234D

Un Array asociativo nos permite acceder directamente a un elemento por su índice aunque son texto. Se usan
para consultas.

MAIN CLASE Persona MAIN


1 /* 1 /* 1 /*
2 Interface map 2 -- 2 HashMap
3 */ 3 */ 3 */
4 package clase09; 4 package clase09; 4 package clase10;
5 5 5
6 import [Link].*; 6 public class Persona { 6 import [Link].*;
7 7 7
8 public class clase09 { 8 private String dni; 8 public class clase10 {
9 9 private String nombre; 9
10 public static void main(String[] args) { 10 10 public static void main(String[] args) {
11 11 public Persona(String dni, String nombre) { 11
12 HashMap tabla=new HashMap(); 12 [Link] = dni; 12 Persona p1=new Persona("1","luis");
13 13 [Link] = nombre; 13 Persona p2=new Persona("2","david");
14 [Link]("1224A","luis"); 14 } 14 Persona p3=new Persona("3","bea");
15 [Link]("2345B","david"); 15 public String getDni() { 15
16 [Link]("3234D","bea"); 16 return dni; 16 HashMap tablaPersonas=new HashMap();
17 17 } 17
18 //busco por el indice 18 public void setDni(String dni) { 18 [Link]([Link](),p1);
19 String valor=(String)[Link]("2345B"); 19 [Link] = dni; 19 [Link]([Link](),p2);
20 [Link](valor); 20 } 20 [Link]([Link](),p3);
21 21 public String getNombre() { 21
22 //recorro los indices de la tabla 22 return nombre; 22 Persona p=(Persona)[Link]("2");
23 Iterator it=[Link]().iterator(); 23 } 23 [Link](p);
24 while([Link]()){ 24 public void setNombre(String nombre) { 24 }
25 String contenido=(String)[Link](); 25 [Link] = nombre; 25 }
26 [Link](contenido); 26 }
27 } 27 @Override
28 //recorro los contenidos 28 public String toString() {
29 Iterator it2=[Link]().iterator(); 29 return "Persona{" + "dni="
30 while([Link]()){ 30 + dni + ", nombre=" + nombre + '}';
31 String contenido=(String)[Link](); 31 }
32 [Link](contenido); 32 }
33 }
34 //tabla completa
35 [Link]("INDICE->DATO");
36 Iterator it3=[Link]().iterator();
37 while([Link]()){
38 String indice=(String)[Link]();
39 [Link](indice+"->"+[Link](indice));
40 }
41 }
42 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 82


MAIN
1 /* 19 for(i=0;i<5;i++){
2 diseñar un programa que pida por teclado 5 numeros 20 [Link]("numero [1-10]: ");
3 enteros entre 1-10. Guardarlos en un ArrayList y al final 21 int numero=[Link]();
4 mostrar todos los numeros de la colección y su suma 22 while(numero<1 || numero>10){
5 total. 23 [Link]("numero [1-10]: ");
6 */ 24 numero=[Link]();
7 package clase11; 25 }
8 26 Integer n=new Integer(numero);
9 import [Link].*; 27 [Link](n);
10 28 }
11 public class Clase11 { 29 int suma=0;
12 30 for(i=0;i<[Link]();i++){
13 public static void main(String[] args) { 31 [Link]([Link](i));
14 Scanner teclado=new Scanner([Link]); 32 suma=suma+[Link](i).intValue();
15 33 }
16 ArrayList<Integer> v=new ArrayList<Integer>(); 34 [Link](suma);
17 35 }
18 int i; 36 }

4.-Colecciones especiales.
4.1.-Cola: FIFO (First In First Out). La colección se llama ArrayDeque.
Entra à Luis David bea Saleà Luis David bea

MAIN
1 /* 13 ArrayDeque<String> cola=new ArrayDeque<String>();
2 -- 14
3 */ 15 //insertamos elementos en la cola
4 package clase12; 16 [Link]("luis");
5 17 [Link]("david");
6 import [Link]; 18 [Link]("bea");
7 19
8 public class Clase12 { 20 //saca el primero
9 21 String p=[Link]();
10 public static void main(String[] args) { 22 [Link](p);//saco el primero: luis
11 //FIFO, primero en entrar, primero en salir 23 }
12 //String: que guardo en la cola 24 }

4.1.-Pila: LIFO (Last In First Out). [Link]. la función de Word.


Entra à Luis David bea Saleà Bea David Luis

MAIN
1 /* 13 Stack<String> p=new Stack<String>();
2 -- 14
3 */ 15 //insertamos elementos en la pila
4 package clase13; 16 [Link]("luis");
5 17 [Link]("david");
6 import [Link]; 18 [Link]("bea");
7 19
8 public class Clase13 { 20 //saca el ultimo
9 21 String a=[Link]();
10 public static void main(String[] args) { 22 [Link](a);//saco el ultimo: bea
11 //LIFO, ultimo en entrar, primero en salir 23 }
12 //String: que guardo en la pila 24 }

5.-Clases especiales.
5.1.-Clases miembro: son aquellas que se crean en el cuerpo de otra clase y no en un archivo Java independiente.
Cuando se compilan se crea un .class independiente para cada clase.
CLASE MAIN
public class A{ main--------------------------
public void método(){ A a=new A();
Interna i=new Interna(); [Link]();
[Link]();
}
class Interna{
public void saluda(){
[Link](“hola”);
}

La clase interna solo la puede usar A. Crea en la carpeta build 2 archivos: [Link] y A$[Link]

5.2.-Clases locales: son aquellas que se crean dentro de un método de otra clase, al compliarse se crea un .class
independiente con una numeración. A$n clase. (Ejà crea A$[Link] y [Link])
CLASE MAIN
public class A{ main--------------------------
public void método(){ A a=new A();
public void Saluda(){ [Link]();
[Link](“hola”);
}
}
Interna i=new Interna();
[Link]();

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 83


5.3.-Clases anónimas: son clases que no tienen nombre, se utilizan con frecuencia para heredar de otra clase y
sobreescribir un método. Se utilizan mucho en entorno grafico para escribir eventos.
CLASE MAIN
public class Vehiculo{ main--------------------------
public void Arrancar(){ new Vehiculo(){
} public void Arrancar(){
} [Link](“brummmm”);
}
}
arrancar(); //sobreescribo arrancar y lo ejecuto
}

MAIN UML Inmueble


1 /* -referencia:String
2 Buscamos gestionar los datos de una serie de inmuebles
3 (piso, chalet, parcelas,etc...) todo inmueble esta registrado -proietario:String
4 en el catastro con num de referencia catastral único. Debemos -metros:double
5 manejar de cada inmueble la siguiente información: propietario,
6 metros y fecha de creación. -fecha:LocalDate
7 Podemos realizar obras ( permitirObra() ) sobre los inmuebles
8 siempre que cumplan las siguientes condiciones:
+Inmueble(string,String,doublé,LocalDate)
9 -Si son parcelas siempre se va a poder construir sobre él. +toString():String
10 -Si son pisos, solo si tienen más de 75 metros cuadrados
11 -Si son chalet solo si tienen más de 4 plantas.
+permitirObra():boolean
12 UML Parcela UML Piso
13 Crear una clase que nos permita almacenar hasta diez inmuebles
14 y que sobre ella podamos: guardar inmuebles, buscar por num de
15 referencia catastral y obtener cuántos son modificables. +Parcela //constructor +Piso //constructor
16 */
17 package clase14; +PermitirObra():boolean +PermitirObra():boolean
18
19 import [Link];
UML Clalet UML Contenedora
20 -plantas:int -v ArrayList <Inmueble>
21 public class Clase14 {
22 +Chalet //constructor +add(Inmueble)
23 public static void main(String[] args) { +PermitirObra():boolean +getReferncia(String):Inmueble
24
25 LocalDate fecha=[Link](); +getModificables():int
26 Piso a=new Piso("1111","luis",80,fecha);
27 Chalet b=new Chalet(3,"2222","bea",200,fecha);
28 36 Inmueble i=[Link]("2222");
29 [Link]([Link]()); 37 [Link](i);
30 [Link]([Link]()); 38 [Link]([Link]());
31 39 }
32 Contenedora c=new Contenedora(); 40 }
33 [Link](a);
34 [Link](b);
35

CLASE Contenedora
1 /* 18 //nos pasan ref y cuando la encuentre devuelve inmueble 48 //metodo elimina figura de posicion dada
2 -- 19 public Inmueble getReferencia(String referencia){ 35 return null;
3 */ 20 int i=0; 36 }
4 package clase14; 21 boolean encontrado=false; 37 }
5 22 38 public int getModificables(){
6 import [Link]; 23 while(i<[Link]() && encontrado==false){ 39 int i=0;
7 24 if([Link](i).getReferencia().equals(referencia)){ 40 int total=0;
8 public class Contenedora { 25 encontrado=true; 41
9 26 } 42 for(i=0;i<[Link]();i++){
10 private ArrayList<Inmueble> v=new ArrayList<Inmueble>(); 27 else{ 43 if([Link](i).permitirObra()==true){
11 28 i++; 44 total++;
12 //me pasan inmueble y si el tamaño array es <10 lo añado 29 } 45 }
13 public void add(Inmueble i){ 30 } 46 }
14 if([Link]()<10){ 31 if (encontrado==true){//si lo encuentras lo devuelves 47 return total;
15 [Link](i); 32 return [Link](i); 48 }
16 } 33 } 49 }
17 } 34 else{

CLASE Inmueble
1 /* 21 } 41 return fecha;
2 -- 22 public String getReferencia() { 42 }
3 */ 23 return referencia; 43 public void setFecha(LocalDate fecha) {
4 package clase14; 24 } 44 [Link] = fecha;
5 25 public void setReferencia(String referencia) { 45 }
6 import [Link].*; 26 [Link] = referencia; 46 @Override
7 27 } 47 public String toString() {
8 public class Inmueble { 28 public String getPropietario() { 48 return "Inmueble{" + "referencia=" + referencia
9 29 return propietario; 49 + ", propietario=" + propietario + ", metros="
10 private String referencia; 30 } 50 + metros + ", fecha=" + fecha + '}';
11 private String propietario; 31 public void setPropietario(String propietario) { 51 }
12 private double metros; 32 [Link] = propietario; 52 public boolean permitirObra(){
13 private LocalDate fecha; 33 } 53 return false;
14 34 public double getMetros() { 54 }
15 public Inmueble(String referencia, String propietario, 35 return metros; 55 }
16 double metros, LocalDate fecha) { 36 }
17 [Link] = referencia; 37 public void setMetros(double metros) {
18 [Link] = propietario; 38 [Link] = metros;
19 [Link] = metros; 39 }
20 [Link] = fecha; 40 public LocalDate getFecha() {

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 84


CLASE Parcela CLASE Piso CLASE Chalet
1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package clase14; 4 package clase14; 4 package clase14;
5 5 5
6 import [Link]; 6 import [Link]; 6 import [Link];
7 7 7
8 public class Parcela extends Inmueble{ 8 public class Piso extends Inmueble{ 8 public class Chalet extends Inmueble{
9 9 9 private int plantas;
10 public Parcela(String referencia, String propietario, 10 public Piso(String referencia, String propietario, 10
11 double metros, LocalDate fecha) { 11 double metros, LocalDate fecha) { 11 public Chalet(int plantas, String referencia, String propietario,
12 super(referencia, propietario, metros, fecha); 12 super(referencia, propietario, metros, fecha); 12 double metros, LocalDate fecha) {
13 } 13 } 13 super(referencia, propietario, metros, fecha);
14 @Override 14 @Override 14 [Link] = plantas;
15 public boolean permitirObra(){ 15 public boolean permitirObra(){ 15 }
16 return true;//se permite la obra siempre 16 if([Link]()>75){ 16 public int getPlantas() {
17 } 17 return true; 17 return plantas;
18 } 18 } 18 }
19 else{ 19 public void setPlantas(int plantas) {
20 return false; 20 [Link] = plantas;
21 } 21 }
22 } 22 @Override
23 } 23 public boolean permitirObra(){
24 if([Link]>4){
25 return true;
26 }
27 else{
28 return false;
29 }
30 }
31 }

6.-Expresiones regulares.
Es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de
patrones de cadenas de caracteres y operaciones de sustitución. Se utiliza para validaciones, [Link] pedir una matricula y
vaalidarla..

• Clase Pattern: es la clase que contendrá la expresión regular.


• Clase Matcher: es la encargada de buscar las coincidencias en un texto dada la expresion regular.

[0-9] {4} Ejemplos:


Lo que espero repeticiones 70112483F [0-9] {7,8} [A-Z] {1}
70112483-F [0-9] {7,8} - [A-Z] {1}
70112483-a [0-9] {7,8} - [A-Z a-z] {1}

1 /* 1 /* 25 [Link]("ciclo coincide");
2 -- 2 Crear expresiones regulares para validar el nombre 26 }
3 */ 3 de un ciclo formativo (1DAW, 2ASIR) y un numero 27 else{
4 package clase15; 4 de cuenta bancaria (4-4-2-10) digitos. 28 [Link]("ciclo no coincide");
5 5 */ 29 }
6 import [Link].*; 6 package clase15_1; 30
7 7 31 if([Link]()){
8 public class Clase15 { 8 import [Link].*; 32 [Link]("banco coincide");
9 9 33 }
10 public static void main(String[] args) { 10 public class Clase15_1 { 34 else{
11 11 35 [Link]("banco no coincide");
12 String matricula="2342ABJ"; 12 public static void main(String[] args) { 36 }
13 13 37 }
14 Pattern p=[Link]("[0-9]{4}[A-Z]{3}"); 14 String ciclo="1DAW"; 38 }
15 15
16 Matcher m=[Link](matricula); 16 Pattern c=[Link]("[1-2]{1}[A-Z]{2,4}"); //entre 2 y 4
17 17 Matcher m=[Link](ciclo);
18 if([Link]()){ 18
19 [Link]("coincide"); 19 String banco="1111-2222-33-4444444444";
20 } 20
21 else{ 21 Pattern b=[Link]("[0-9]{4}-[0-9]{4}-[0-9]{2}-[0-9]{10}");
22 [Link]("no coincide"); 22 Matcher m1=[Link](banco);
23 } 23
24 } 24 if([Link]()){
25 }

7.-Numeros de alta precisión.


Que ocurre para el problema de diseñar un programa que pida por teclado el nº de granos que hay en un saco
de arroz de 100 kg…Para estos casos se usan: BigInteger y BigDecimal.
1 /* 11 public static void main(String[] args) {
2 -- 12
3 */ 13 Scanner teclado=new Scanner([Link]);
4 package clase16; 14 [Link]("introduzca numero: ");
5 15
6 import [Link].*; 16 String n=[Link]();
7 import [Link].*; 17 BigInteger num=new BigInteger(n);
8 18 [Link]("el numero es: "+(n));
9 public class Clase16 { 19 }
10 20 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 85


TEMA 8 PERSISTENCIA DE OBJETOS

1.-Persistencia.
La persistencia busca guardar objetos en memoria, no en la RAM, porque al apagar el ordenador se va. Se busca
guardar en disco. Solo se almacenan los datos, no el código.
RAM
Persona p=new Persona(“luis”,”David”);
Luis Bea [Link](p);
David //al apagar el ordenador se pierde de la RAM

1.1.-Persistencia programada: (a mano)


MAIN CLASE Persona
1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package persistencia01; 4 package persistencia01;
5 5
6 import [Link].*; 6 public class Persona {
7 7
8 public class Persistencia01 { 8 private String dni;
9 9 private String nombre;
10 public static void main(String[] args) { 10 private int edad;
11 11
12 try{ 12 public Persona(String dni, String nombre, int edad) {
13 FileWriter fichero=new FileWriter("[Link]"); 13 [Link] = dni;
14 PrintWriter pw=new PrintWriter(fichero); 14 [Link] = nombre;
15 15 [Link] = edad;
16 Persona p=new Persona("111","luis",30); 16 }
17 //saco los datos al fichero 17 public String getDni() {
18 [Link]([Link]()+":"+[Link]()+":"+[Link]()); 18 return dni;
19 19 }
20 [Link](); 20 public void setDni(String dni) {
21 } 21 [Link] = dni;
22 catch(Exception e){ 22 }
23 [Link](e); 23 public String getNombre() {
24 } 24 return nombre;
25 //leon el fichero 25 }
26 try{ 26 public void setNombre(String nombre) {
27 File archivo =new File("[Link]"); 27 [Link] = nombre;
28 if(![Link]()){ 28 }
29 [Link]("error no existe"); 29 public int getEdad() {
30 } 30 return edad;
31 else{ 31 }
32 FileReader fr=new FileReader (archivo); 32 public void setEdad(int edad) {
33 BufferedReader br=new BufferedReader(fr); 33 [Link] = edad;
34 34 }
35 String linea; 35 @Override
36 while((linea=[Link]())!=null){ 36 public String toString() {
37 String v[]=[Link](":"); 37 return "Persona{" + "dni=" + dni + ", nombre="
38 //saco la persona del vector en sus posiciones 38 + nombre + ", edad=" + edad + '}';
39 Persona p=new Persona(v[0],v[1],[Link](v[2])); 39 }
40 [Link](p); 40 }
41 }
42 [Link]();
43 }
44 }
45 catch(Exception e){
46 [Link](e);
47 }
48 }
49 }

Como se repite tanto el código Java ofrece un mecanismo llamado Serialización. Si nuestra clase va a
almacenar en un fichero, indicamos implements Serializable (hereda).

MAIN
1 /* 16 31 Persona a=(Persona)[Link]();
2 -- 17 try{ 32 [Link]();
3 */ 18 ObjectOutputStream o=new ObjectOutputStream( 33 [Link]("Al preguntar nos queda: "+a);
4 package persistencia02; 19 new FileOutputStream("[Link]")); 34 }
5 20 [Link](p); 35 catch(Exception e){
6 import [Link].*; 21 [Link](); 36 [Link](e);
7 22 } 37 }
8 public class Persistencia02 { 23 catch(Exception e){ 38 }
9 24 [Link](e); 39 }
10 public static void main(String[] args) { 25 }
11 26 //deserializo
CLASE Persona
12 //para serializar, la clase Persona 27 try{ 4 package persistencia02;
13 //debe implementar Serializable 28 ObjectInputStream i=new ObjectInputStream( 5
14 Persona p=new Persona("111","luis",30); 29 new FileInputStream("[Link]")); 6 import [Link];
15 [Link]("antes de serializar: "+p); 30 //le digo que lea de tipo persona 7
8 public class Persona implements Serializable{
Public class Persona implements Serializable{ 9
Private String dni: 10 private String dni;
11 private String nombre;
Private transcent String nombre; //Si se pone transcent no se sacan los datos. 12 private int edad;13
14 public Persona(String dni, String nombre, int edad) {

Serializar un objeto en fichero es algo puntual. Si el almacenamiento es continuo mejor usar una Base de Datos.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 86


2.-Bases de datos orientas a objetos. ObjectDB.
Las BD relacionales utilizan tablas y registros y las aplicaciones clases y objetos.
TABLA PERSONAS
Id Nombre
Persona a=new Persona(1,”Ana”); 1 Ana
Persona b=new Persona(2,”Marta”); 2 Marta

Para esto hay dos soluciones:


• ORM Mapeo Objeto-Relación (Hibernate)
• BD NoSQL (ObjectBD, Versant, Objectivy, DB, GemStone, ObjectStone, InterSystems Cache, Matisse, db40).
• SQL (MySQL, Oracle, Access, SQLServer).
• NoSQL (orientadas a objetos, usaremos objectDB [Link] y xml).

2.1.-ObjectDB: es una BD orientada a objetos programada en Java, puede trabajar de 2 modos:


• Modo cliente servidor.

• Modo proceso: (una base de datos en cada aplicación desarrollada).


En objectDB los objetos pueden ser intregramente almacenados y recuperados en la BD, no hay que crear tablas
ni manipular registros usando SQL. ObjectDB soporta 2 lenguajes de consulta:

• JDO: Query Languaje (JDOQL): se base en la sintaxis de Java.


• JPA: Query Languaje (JPQL): se basa en la sintaxis SQL.

2.2.-Java Persistence API (JPA): estándar, código para acceder a BD (Oracle, DB2, SQL Server o MySQL) desde
aplicaciones Java. Import javax persistence.*;

Lo primero será conectarse a la BD con EntityManagerFactory y EntityManager. Cuando utilizamos JPA y queremos
almacenar una clase en la BD lo indicaremos:
@Entity //implements Serializable no es obligatorio ponerlo
public class Clase implements Serializable{
//código
}

Cuando se almacena el objeto en la BD, solo se almacenan los datos, no el código. Si un atributo es static o
transient no se almacena en la BD.
private Strin a; //guarda la variable
private static String b; //no guarda la variable
private transient Strin c; //no guarda la variable

ObjectDB soporta índices o claves primarias implícitas, aunque siempre indicaremos que atributo es la clave
primaria con la anotación ID.
@Id
private String a; //clave primaria

La conexión JPA con la BD requiere el uso de EntityManager, cualquier operación que modifique el contenido de
la BD implica usar EntityTransaction.

2.2.1.-Ficheros jar (JAva aRchive): es un fichero comprimido de clases de Java ya programadas para utilizarlas. Se
copia el fichero [Link] en la carpeta de Java del proyecto. Despues en la carpeta de la
bibliotecaàagregar [Link]ón en Java: archivoàarchivo nuevoàpersistenciaàclase entidad.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 87


MAIN
1 /* 21
2 -- 22 Coche c1=new Coche();
3 */ 23 [Link]("1111");
4 package persistencia03; 24 [Link]("audi");
5 25
6 import [Link].*; 26 Coche c2=new Coche();
7 27 [Link]("2222");
8 public class Persistencia03 { 28 [Link]("seat");
9 29
10 public static void main(String[] args) { 30 //en la concexion me guardas los dos coches
11 //abrimos conexion con la BD 31 [Link](c1);
12 //si no existe la BD la crea en nuestra carpeta 32 [Link](c2);
13 //$objectdb es la carpeta del proyecto 33
14 //db es la subcarpeta 34 //al terminar de modificar la BD acepto los cambios
15 //[Link] nombre del fichero 35 [Link]().commit();
16 EntityManagerFactory emf=[Link]("$objectdb/db/[Link]"); 36 //cerramos la conexion
17 EntityManager em=[Link](); 37 [Link]();
18 38 [Link]();
19 //para dar de alta el coche 39 }
20 [Link]().begin(); 40 }

CLASE Coche
1 /* 20 public String getMatricula() { 39 public int hashCode() {
2 -- 21 return matricula; 40 int hash = 0;
3 */ 22 } 41 hash += (id != null ? [Link]() : 0);
4 package persistencia03; 23 public void setMatricula(String matricula) { 42 return hash;
5 24 [Link] = matricula; 43 }
6 import [Link]; 25 } 44 @Override
7 import [Link].*; 26 public String getMarca() { 45 public boolean equals(Object object) {
8 27 return marca; 46
9 @Entity 28 } 47 if (!(object instanceof Coche)) {
10 public class Coche implements Serializable { 29 public void setMarca(String marca) { 48 return false;
11 //la anotacion @Id indica que el campo id sera la clave 30 [Link] = marca; 49 }
12 //la anotacion @GeneratedValue que es autonumerico 31 } 50 Coche other = (Coche) object;
13 @Id 32 public Long getId() { 51 if (([Link] == null && [Link] != null) ||
14 @GeneratedValue(strategy = [Link]) 33 return id; 52 ([Link] != null && ![Link]([Link]))) {
15 private Long id; 34 } 53 return false;
16 35 public void setId(Long id) { 54 }
17 private String matricula; 36 [Link] = id; 55 return true;
18 private String marca; 37 } 56 }
19 38 @Override 57 @Override
58 public String toString() {
59 return "Coche{" + "id=" + id + ", matricula="
60 + matricula + ", marca=" + marca + '}';
61 }
62 }

MAIN
1 /* 30 //en la conexion me guardas las personas
2 -- 31 [Link](p1);
3 */ 32 [Link](p2);
4 package persistencia04; 33 [Link](p3);
5 34
6 import [Link]; 35 //al terminar de modificar la BD acepto los cambios
7 import [Link].*; 36 [Link]().commit();
8 37
9 public class Persistencia04 { 38 //cuantas personas hay y las guarda en q1
10 39 Query q1=[Link]("select count(p) from Persona p");
11 public static void main(String[] args) { 40 [Link]("Total: "+[Link]());
12 //abrimos conexion con la BD 41
13 //si no existe la BD la crea en nuestra carpeta 42 //saca DNI de las personas y las pasa a mayusculas
14 //$objectdb es la carpeta del proyecto 43 Query q2=[Link]("select UPPER([Link]()) "+"from Persona p");
15 //db es la subcarpeta 44 List<String> list=[Link]();
16 //[Link] nombre del fichero 45 for(String dni:list){
17 EntityManagerFactory emf=[Link] 46 [Link]("Dni: "+dni);
18 ("$objectdb/db/[Link]"); 47 }
19 //si la bd estuviera en red: 48
20 //(objectdb://localhost:6136/[Link];"+"user=admin;password=admin"); 49 //saca las personas de edad entre 20 y 30
21 EntityManager em=[Link](); 50 Query q3=[Link]("select p from Persona p"+
22 51 " where [Link]() Between 10 and 30");
23 //para dar de alta el coche 52 List<Persona> resultado=(List<Persona>)[Link]();
24 [Link]().begin(); 53 for(Persona p:resultado){//cada persona la meto en p
25 54 [Link]([Link]());//saco el nombre de las personas
26 Persona p1=new Persona((long)1,"111","luis",42); 55 }
27 Persona p2=new Persona((long)2,"222","david",12); 56 //cerramos la conexion
28 Persona p3=new Persona((long)3,"333","bea",16); 57 [Link]();
29 58 [Link]();
59 }
60 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 88


CLASE Persona
1 /* 31 public String getNombre() { 61 if (!(object instanceof Persona)) {
2 -- 32 return nombre; 62 return false;
3 */ 33 } 63 }
4 package persistencia04; 34 64 Persona other = (Persona) object;
5 35 public void setNombre(String nombre) { 65 if (([Link] == null && [Link] != null) ||
6 import [Link]; 36 [Link] = nombre; 66 ([Link] != null && ![Link]([Link]))) {
7 import [Link].*; 37 } 67 return false;
8 38 68 }
9 @Entity 39 public int getEdad() { 69 return true;
10 public class Persona implements Serializable { 40 return edad; 70 }
11 //pongo la clave a mano 41 } 71 @Override
12 @Id 42 public void setEdad(int edad) { 72 public String toString() {
13 private Long id; 43 [Link] = edad; 73 return "Persona{" + "id=" + id + ", dni=" + dni +
14 44 } 74 ", nombre=" + nombre + ", edad=" + edad + '}';
15 private String dni; 45 public Long getId() { 75 }
16 private String nombre; 46 return id; 76 }
17 private int edad; 47 }
18 48 public void setId(Long id) {
19 public Persona(Long id, String dni, String nombre, int edad) { 49 [Link] = id;
20 [Link] = id; 50 }
21 [Link] = dni; 51 @Override
22 [Link] = nombre; 52 public int hashCode() {
23 [Link] = edad; 53 int hash = 0;
24 } 54 hash += (id != null ? [Link]() : 0);
25 public String getDni() { 55 return hash;
26 return dni; 56 }
27 } 57
28 public void setDni(String dni) { 58 @Override
29 [Link] = dni; 59 public boolean equals(Object object) {
30 } 60

MAIN
1 /* 30 Barco b1=new Barco("111",42);
2 almacenar 3 objetos de tipo barco (matricula clave, 31 Barco b2=new Barco("222",12);
3 y eslora, en la BD [Link] de la carpeta bdobjectdb 32 Barco b3=new Barco("111",34);
4 de nuestro proyecto. 33
5 despues visualizar la matricula de los barcos con 34 //en la conexion me guardas las barcos
6 eslora superior a 30. 35 [Link](b1);
7 */ 36 [Link](b2);
8 package persistencia05; 37 [Link](b3);
9 38
10 import [Link]; 39 //al terminar de modificar la BD acepto los cambios
11 import [Link].*; 40 [Link]().commit();
12 41
13 public class Persistencia05 { 42 //saca los barcos con eslora > 30
14 43 Query q1=[Link]("select b from Barco b"+" where [Link]() > 30");
15 public static void main(String[] args) { 44 List<Barco> resultado=(List<Barco>)[Link]();
16 //abrimos conexion con la BD 45 for(Barco b:resultado){//cada barco lo meto en b
17 //si no existe la BD la crea en nuestra carpeta 46 [Link]([Link]());//saco la matricula de los barcos
18 //$objectdb es la carpeta del proyecto 47 }
19 //db es la subcarpeta 48 //busca por la clave primaria
20 //[Link] nombre del fichero 49 Barco p=[Link]([Link], "111");
21 EntityManagerFactory emf=[Link] 50 [Link](p);
22 ("$objectdb/dbobjectdb/[Link]"); 51
23 //si la bd estuviera en red: 52 //cerramos la conexion
24 //(objectdb://localhost:6136/[Link];"+"user=admin;password=admin"); 53 [Link]();
25 EntityManager em=[Link](); 54 [Link]();
26 55 }
27 //para dar de alta el barco 56 }
28 [Link]().begin();
29

CLASE Barco
1 /* 16 public Barco(String matricula, int eslora) { 31 }
2 -- 17 [Link] = matricula; 32 @Override
3 */ 18 [Link] = eslora; 33 public String toString() {
4 package persistencia05; 19 } 34 return "Barco{" + "matricula=" + matricula +
5 20 public String getMatricula() { 35 ", eslora=" + eslora + '}';
6 import [Link]; 21 return matricula; 36 }
7 import [Link].*; 22 } 37 }
8 23 public void setMatricula(String matricula) {
9 @Entity 24 [Link] = matricula;
10 public class Barco implements Serializable { 25 }
11 private static final long serialVersionUID = 1L; 26 public int getEslora() {
12 @Id 27 return eslora;
13 private String matricula; 28 }
14 private int eslora; 29 public void setEslora(int eslora) {
15 30 [Link] = eslora;

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 89


2.3.-Clases compuestas:

MAIN UML Trabajo UML Persona


1 /* -id:long -dni:String
2 --
3 */ -jefe:Persona -nombre:String
4 package persistencia06; -empleado:Persona
5
6 import [Link].*; +Trabajo(long,Persona,Persona) +Persona(String,String)
7 +toString():String
8 public class Persistencia06 {
+toString():String
9 26 Persona empleado=new Persona("111","david");
10 public static void main(String[] args) { 27 Persona jefe=new Persona("333","luis");
11 28 //en la conexion me guardas las personas
12 //abrimos conexion con la BD 29 [Link](empleado);
13 //si no existe la BD la crea en nuestra carpeta 30 [Link](jefe);
14 //$objectdb es la carpeta del proyecto 31
15 //db es la subcarpeta 32 Trabajo t=new Trabajo((long)1,jefe,empleado);
16 //[Link] nombre del fichero 33 //en la conexion me guardas el trabajo
17 EntityManagerFactory emf=[Link] 34 [Link](t);
18 ("$objectdb/dbobjectdb/[Link]"); 35
19 //si la bd estuviera en red: 36 //al terminar de modificar la BD acepto los cambios
20 //(objectdb://localhost:6136/[Link];"+"user=admin;password=admin"); 37 [Link]().commit();
21 EntityManager em=[Link](); 38
22 39 //cerramos la conexion
23 //para dar de alta las personas 40 [Link]();
24 [Link]().begin(); 41 [Link]();
25 42 }
43 }

CLASE Trabajo CLASE Persona


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package persistencia06; 4 package persistencia06;
5 5
6 import [Link]; 6 import [Link];
7 import [Link].*; 7 import [Link].*;
8 8
9 @Entity 9 @Entity
10 public class Trabajo implements Serializable { 10 public class Persona implements Serializable {
11 11
12 @Id 12 @Id
13 private Long id; 13 private String dni;
14 //eliminacion en cascada relacion 1 a 1. 14 private String nombre;
15 @OneToOne(cascade=[Link]) 15
16 private Persona jefe; 16 public Persona(String dni, String nombre) {
17 @OneToOne(cascade=[Link]) 17 [Link] = dni;
18 private Persona empleado; 18 [Link] = nombre;
19 19 }
20 public Trabajo(Long id, Persona jefe, Persona empleado) { 20 public String getDni() {
21 [Link] = id; 21 return dni;
22 [Link] = jefe; 22 }
23 [Link] = empleado; 23 public void setDni(String dni) {
24 } 24 [Link] = dni;
25 public Long getId() { 25 }
26 return id; 26 public String getNombre() {
27 } 27 return nombre;
28 public void setId(Long id) { 28 }
29 [Link] = id; 29 public void setNombre(String nombre) {
30 } 30 [Link] = nombre;
31 public Persona getJefe() { 31 }
32 return jefe; 32 @Override
33 } 33 public String toString() {
34 public void setJefe(Persona jefe) { 34 return "Persona{" + "dni=" + dni + ", nombre=" + nombre + '}';
35 [Link] = jefe; 35 }
36 } 36 }
37 public Persona getEmpleado() {
38 return empleado; 43 @Override
39 } 44 public String toString() {
40 public void setEmpleado(Persona empleado) { 45 return "Trabajo{" + "id=" + id +
41 [Link] = empleado; 46 ", jefe=" + jefe + ", empleado=" + empleado + '}';
42 } 47 }
48 }

MAIN
1 /* 21 EntityManagerFactory emf= 40 [Link]().commit();
2 un aviso (id clave primaria, descripcion) se 22 [Link] 41
3 almacena en la BD [Link] 23 ("$objectdb/dbobjectdb/[Link]"); 42 [Link]("Id a buscar?: ");
4 pedir por teclado los datos de 3 avisos y 24 43 int id=[Link]();
5 almacenarlos en la BD. 25 EntityManager em=[Link](); 44
6 despues pedir por teclado un id y mostar 26 45 Aviso a=[Link]([Link],id);
7 por pantalla el aviso correspondiente 27 [Link]().begin(); 46 if(a==null){
8 (usar metodo find visto). 28 47 [Link]("Id no encontrado");
9 */ 29 int i; 48 }
10 package persistencia07; 30 for(i=0;i<3;i++){ 49 else{
11 31 [Link]("aviso nº: "); 50 [Link](a);
12 import [Link]; 32 int id=[Link](); 51 }
13 import [Link].*; 33 [Link](); 52 [Link]();
14 34 [Link]("introduzca descripcion: "); 53 [Link]();
15 public class Persistencia07 { 35 String desc=[Link](); 54 }
16 36 55 }
17 public static void main(String[] args) { 37 Aviso a=new Aviso(id,desc);
18 38 [Link](a);
19 Scanner teclado=new Scanner([Link]); 39 }
20

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 90


CLASE Trabajo
1 /* 15 29 public void setDescripcion(String descripcion) {
2 -- 16 public Aviso(int id, String descripcion) { 30 [Link] = descripcion;
3 */ 17 [Link] = id; 31 }
4 package persistencia07; 18 [Link] = descripcion; 32 @Override
5 19 } 33 public String toString() {
6 import [Link]; 20 public int getId() { 34 return "Aviso{" + "id=" + id + ", descripcion="
7 import [Link].*; 21 return id; 35 + descripcion + '}';
8 22 } 36 }
9 @Entity 23 public void setId(int id) { 37 }
10 public class Aviso implements Serializable { 24 [Link] = id;
11 25 }
12 @Id 26 public String getDescripcion() {
13 private int id; 27 return descripcion;
14 private String descripcion; 28 }

2.4.-Objetos embebidos:

MAIN UML Trabajo UML Persona


1 /* -id:long -dni:String
2 --
3 */ -jefe:Persona -nombre:String
4 package persistencia08; -empleado:Persona
5
6 import [Link]; +Trabajo(long,Persona,Persona) +Persona(String,String)
7 import [Link].*; +toString():String
8
+toString():String
9 public class Persistencia08 { 23 Trabajo t=new Trabajo(jefe,empleado);
10 24
11 public static void main(String[] args) { 25 [Link](t);
12 26
13 EntityManagerFactory emf=[Link] 27 [Link]().commit();
14 ("$objectdb/dbobjectdb/[Link]"); 28
15 29 Query q3=[Link]("select t from Trabajo t");
16 EntityManager em=[Link](); 30 List<Trabajo> resultado=(List<Trabajo>)[Link]();
17 31 for(Trabajo trabajo:resultado){
18 [Link]().begin(); 32 [Link]([Link]());
19 33 }
20 Persona empleado=new Persona("111","david"); 34 [Link]();
21 Persona jefe=new Persona("333","luis"); 35 [Link]();
22 36 }
37 }

CLASE Trabajo CLASE Persona


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package persistencia08; 4 package persistencia08;
5 5
6 import [Link]; 6 import [Link];
7 import [Link].*; 7 import [Link].*;
8 8
9 @Entity 9 @Embeddable
10 public class Trabajo implements Serializable { 10 public class Persona implements Serializable {
11 11
12 @Id 12 private String dni;
13 @GeneratedValue(strategy = [Link]) 13 private String nombre;
14 private Long id; 14
15 15 public Persona(String dni, String nombre) {
16 private Persona jefe; 16 [Link] = dni;
17 private Persona empleado; 17 [Link] = nombre;
18 18 }
19 public Trabajo(Persona jefe, Persona empleado) { 19 public String getDni() {
20 [Link] = jefe; 20 return dni;
21 [Link] = empleado; 21 }
22 } 22 public void setDni(String dni) {
23 public Long getId() { 23 [Link] = dni;
24 return id; 24 }
25 } 25 public String getNombre() {
26 public void setId(Long id) { 26 return nombre;
27 [Link] = id; 27 }
28 } 28 public void setNombre(String nombre) {
29 public Persona getJefe() { 29 [Link] = nombre;
30 return jefe; 30 }
31 } 31 @Override
32 public void setJefe(Persona jefe) { 32 public String toString() {
33 [Link] = jefe; 33 return "Persona{" + "dni=" + dni + ", nombre=" + nombre + '}';
34 } 34 }
35 public Persona getEmpleado() { 35 }
36 return empleado;
37 }
38 public void setEmpleado(Persona empleado) { 41 @Override
39 [Link] = empleado; 42 public String toString() {
40 } 43 return "Trabajo{" + "id=" + id + ", jefe="
44 + jefe + ", empleado=" + empleado + '}';
45 }
46 }

La clase embebida (persona en este caso) se indica con @Embeddable y no lleva clave. Si borro el trabajo se
borran las personas dentro del trabajo. Como la clase trabajo tiene un ArrayList de personas, la persona debe estar
embebida.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 91


MAIN UML Trabajo UML Persona
1 /* -id:long -dni:String
2 --
3 */ -jefe:Persona -nombre:String
4 package persistencia09; -empleados:ArrayList<Personas>
5
6 import [Link]; +Trabajo(Persona jefe,ArrayList +Persona(String,String)
7 import [Link].*; +toString():String
8
<Persona>empleados
9 public class Persistencia09 { +toString():String
10 24 ArrayList<Persona>empleados=new ArrayList<Persona>();
11 public static void main(String[] args) { 25 [Link](empleado1);
12 26 [Link](empleado2);
13 EntityManagerFactory emf=[Link] 27
14 ("$objectdb/dbobjectdb/[Link]"); 28 Trabajo t=new Trabajo(jefe,empleados);
15 29
16 EntityManager em=[Link](); 30 [Link](t);
17 31
18 [Link]().begin(); 32 [Link]().commit();
19 //creo el jefe 33
20 Persona jefe=new Persona("111","david"); 34 [Link]();
21 //creo los empleados 35 [Link]();
22 Persona empleado1=new Persona("333","luis"); 36 }
23 Persona empleado2=new Persona("222","bea"); 37 }

CLASE Trabajo CLASE Persona


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package persistencia09; 4 package persistencia09;
5 5
6 import [Link]; 6 import [Link];
7 import [Link]; 7 import [Link].*;
8 import [Link].*; 8
9 9 @Embeddable
10 @Entity 10 public class Persona implements Serializable {
11 public class Trabajo implements Serializable { 11
12 12 private String dni;
13 @Id 13 private String nombre;
14 @GeneratedValue(strategy = [Link]) 14
15 private Long id; 15 public Persona(String dni, String nombre) {
16 16 [Link] = dni;
17 private Persona jefe; 17 [Link] = nombre;
18 //en vez de un empleado tiene varios empleados 18 }
19 private ArrayList<Persona> empleados; 19 public String getDni() {
20 20 return dni;
21 public Trabajo(Persona jefe, ArrayList<Persona>empleados) { 21 }
22 [Link] = jefe; 22 public void setDni(String dni) {
23 [Link]=empleados; 23 [Link] = dni;
24 } 24 }
25 public Long getId() { 25 public String getNombre() {
26 return id; 26 return nombre;
27 } 27 }
28 public void setId(Long id) { 28 public void setNombre(String nombre) {
29 [Link] = id; 29 [Link] = nombre;
30 } 30 }
31 public Persona getJefe() { 31 @Override
32 return jefe; 32 public String toString() {
33 } 33 return "Persona{" + "dni=" + dni
34 public void setJefe(Persona jefe) { 34 + ", nombre=" + nombre + '}';
35 [Link] = jefe; 35 }
36 } 36 }
37 public ArrayList<Persona> getEmpleados() {
38 return empleados; 43 @Override
39 } 44 public String toString() {
40 public void setEmpleados(ArrayList<Persona> empleados) { 45 return "Trabajo{" + "id=" + id + ", jefe="
41 [Link] = empleados; 46 + jefe + ", empleados=" + empleados + '}';
42 } 47 }
48 }

MAIN UML cpu UML ram UML hd


1 /* -marca:String -tamanyo:double -marca:String
2 un ordenador (id auto) se compone de cpu (marca,modelo)
3 ram (tamanyo, velocidad) y hd (marca, tamanyo). -modelo:String -velocidad:double -tamanyo:double
4 almacenar en [Link] un intel i7 con 8 ram +cpu(String,String) +ram(double,double) +hd(String,double)
5 a 500 mhz y un disco seagate 500 mb.
6 despues hacer una consulta que muestre el id de los +toString():String +toString():String +toString():String
7 ordenadores con una ram superior a 4. 26 Cpu cpu=new Cpu("Intel","I7");
8 usar objetos embebidos. 27 Ram ram=new Ram(8,500);
9 */ 28 Hd hd=new Hd("Seagate",500);
10 package persistencia10; 29
11 30 Ordenador o=new Ordenador(cpu,ram,hd);
12 import [Link]; 31
13 import [Link].*; 32 [Link](o);
14 33
15 public class Persistencia10 { 34 [Link]().commit();
16 35
17 public static void main(String[] args) { 36 Query q=[Link]("select o from Ordenador o "
18 37 + "where [Link]().getTamanyo()>4");
19 EntityManagerFactory emf=[Link] 38 List<Ordenador> resultado=(List<Ordenador>)[Link]();
20 ("$objectdb/dbobjectdb/[Link]"); 39 for(Ordenador ord:resultado){
21 40 [Link]([Link]());
22 EntityManager em=[Link](); 41 }
23 42 [Link]();
24 [Link]().begin(); 43 [Link]();
25 44 }
45 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 92


Clase Ordenador UML Ordenador
1 /* -id:long
2 --
3 */ -cpu:procesador
4 package persistencia10; -ram:memoria
5
6 import [Link]; -hd:disco
7 import [Link].*;
8
+Ordendor(Cpu procesador,
9 @Entity Ram memoria, Hd disco)
10 public class Ordenador implements Serializable {
11 @Id
+toString():String
12 @GeneratedValue(strategy = [Link]) 32 public void setProcesador(Cpu procesador) {
13 private Long id; 33 [Link] = procesador;
14 private Cpu procesador; 34 }
15 private Ram memoria; 35 public Ram getMemoria() {
16 private Hd disco; 36 return memoria;
17 37 }
18 public Ordenador(Cpu procesador, Ram memoria, Hd disco) { 38 public void setMemoria(Ram memoria) {
19 [Link] = procesador; 39 [Link] = memoria;
20 [Link] = memoria; 40 }
21 [Link] = disco; 41 public Hd getDisco() {
22 } 42 return disco;
23 public Long getId() { 43 }
24 return id; 44 public void setDisco(Hd disco) {
25 } 45 [Link] = disco;
26 public void setId(Long id) { 46 }
27 [Link] = id; 47 @Override
28 } 48 public String toString() {
29 public Cpu getProcesador() { 49 return "Ordenador{" + "id=" + id + ", procesador="
30 return procesador; 50 + procesador + ", memoria=" + memoria +
31 } 51 ", disco=" + disco + '}';
52 }
53 }

Clase Cpu Clase Ram Clase Hd


1 /* 1 /* 1 /*
2 -- 2 -- 2 --
3 */ 3 */ 3 */
4 package persistencia10; 4 package persistencia10; 4 package persistencia10;
5 5 5
6 import [Link]; 6 import [Link]; 6 import [Link];
7 import [Link]; 7 import [Link].*; 7 import [Link].*;
8 8 8
9 @Embeddable 9 @Embeddable 9 @Embeddable
10 public class Cpu implements Serializable { 10 public class Ram implements Serializable { 10 public class Hd implements Serializable {
11 11 11
12 private String marca; 12 private double tamanyo; 12 private String marca;
13 private String modelo; 13 private double velocidad; 13 private double tamanyo;
14 14 14
15 public Cpu(String marca, String modelo) { 15 public Ram(double tamanyo, double velocidad) { 15 public Hd(String marca, double tamanyo) {
16 [Link] = marca; 16 [Link] = tamanyo; 16 [Link] = marca;
17 [Link] = modelo; 17 [Link] = velocidad; 17 [Link] = tamanyo;
18 } 18 } 18 }
19 public String getMarca() { 19 public double getTamanyo() { 19 public String getMarca() {
20 return marca; 20 return tamanyo; 20 return marca;
21 } 21 } 21 }
22 public void setMarca(String marca) { 22 public void setTamanyo(double tamanyo) { 22 public void setMarca(String marca) {
23 [Link] = marca; 23 [Link] = tamanyo; 23 [Link] = marca;
24 } 24 } 24 }
25 public String getModelo() { 25 public double getVelocidad() { 25 public double getTamanyo() {
26 return modelo; 26 return velocidad; 26 return tamanyo;
27 } 27 } 27 }
28 public void setModelo(String modelo) { 28 public void setVelocidad(double velocidad) { 28 public void setTamanyo(double tamanyo) {
29 [Link] = modelo; 29 [Link] = velocidad; 29 [Link] = tamanyo;
30 } 30 } 30 }
31 @Override 31 @Override 31 @Override
32 public String toString() { 32 public String toString() { 32 public String toString() {
33 return "Cpu{" + "marca=" + marca + 33 return "Ram{" + "tamanyo=" + tamanyo + 33 return "Hd{" + "marca=" + marca +
34 ", modelo=" + modelo + '}'; 34 ", velocidad=" + velocidad + '}'; 34 ", tamanyo=" + tamanyo + '}';
35 } 35 } 35 }
36 } 36 } 36 }

2.5.-Resumen:
Almacenar: persist
EntityManagerFactory emf=[Link] //creamos la conexion
("$objectdb/dbobjectdb/[Link]"); //carpeta proyecto/db subcarpeta/ nombre fichero
EntityManager em=[Link](); //abrimos conexión con base de datos
[Link]().begin(); //damos de alta el barco
Barco b1=new Barco("111",42); //creamos barco
[Link](b1); //guardamos el barco en la conexión
[Link]().commit(); [Link](); [Link](); //aceptamos los cambios al terminar y cerramos conexion
Consultar: Query, JPQL, método find
Query q1=[Link]("select b from Barco b"+" where [Link]() > 30"); //sacamos barcos con eslora >30
Actualizar: [Link]().begin; //inicio la transacción
Persona p=[Link]([Link],”222”); //busco la persona con DNI 222
[Link](89); //cambio su edad
[Link]().commit(); //confirmo el cambio
Eliminar: [Link]().begin; //inicio la transacción
Persona p=[Link]([Link],”111”); //busco la persona con DNI 111
[Link](h); //borro la persona de la BD
[Link]().commit(); //confirmo el cambio

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 93


Ejercicios sueltos:

MAIN
1 /* 43 public static void ver(String usuario){ 85 }
2 diseñar un programa de envio de mensajes. 44 Scanner teclado=new Scanner([Link]); 86 catch (Exception e){
3 */ 45 try{ 87 [Link](e);
4 package persistencia11; 46 String linea; 88 }
5 47 File archivo=new File("[Link]"); 89 }
6 import [Link].*; 48 //mapeo en windows ("z:/"+usuario+".txt"); 90 public static void todos(String usuario){
7 import [Link].*; 49 //mapeo en mac 91
8 import [Link]; "/Volumes/Users/Public/Downloads/PROG/ 92 LocalDate fechaActual;
9 50 //CHAT/luisfalagan/[Link]" 93 Scanner teclado=new Scanner([Link]);
10 public class Persistencia11 { 51 if(![Link]()){ 94
11 52 [Link]("error no existe"); 95 try{
12 public static void main(String[] args) { 53 } 96 [Link]("a que usuario escribes?: ");
13 54 else{ 97 String nombre=[Link]();
14 Scanner teclado=new 55 FileReader fr=new FileReader(archivo); 98
Scanner([Link]); 56 BufferedReader br=new BufferedReader(fr); 99 [Link]("escribe un mensaje: ");
15 57 while((linea=[Link]())!=null){ 100 String mensaje=[Link]();
16 [Link]("nombre de usuario: "); 58 [Link](linea); 101
17 String usuario=[Link](); 59 } 102 FileWriter fichero=new FileWriter("[Link]",true);
18 60 [Link](); 103 PrintWriter pw=new PrintWriter(fichero);
19 int opcion=0; 61 } 104
20 62 } 105 fechaActual=[Link]();
21 while(opcion!=5){ 63 catch (Exception e){ 106 [Link](usuario+": "+fechaActual+":
22 menu(); 64 [Link](e); "+mensaje);
23 [Link]("introduce la opcion: 65 } 107 [Link]();
"); 66 } 108 }
24 opcion=[Link](); 67 public static void enviar(String usuario){ 109 catch (Exception e){
25 68 110 [Link](e);
26 switch(opcion){ 69 LocalDate fechaActual; 111 }
27 case 1:ver(usuario);break; 70 Scanner teclado=new Scanner([Link]); 112 }
28 case 2:enviar(usuario);break; 71 113 public static void borrar(String usuatio){
29 case 3:todos(usuario);break; 72 try{ 114
30 case 4:borrar(usuario);break; 73 [Link]("a quien escribes?: "); 115 try{
31 } 74 String nombre=[Link](); 116 FileWriter fichero=new FileWriter("[Link]");
32 } 75 117 PrintWriter pw=new PrintWriter(fichero);
33 } 76 [Link]("escribe un mensaje: "); 118 [Link]();
34 public static void menu(){ 77 String mensaje=[Link](); 119 }
35 [Link]("-------menu-------"); 78 120 catch (Exception e){
36 [Link]("------------------"); 79 FileWriter fichero=new FileWriter("[Link]",true); 121 [Link](e);
37 [Link]("1.-leer mensaje"); 80 PrintWriter pw=new PrintWriter(fichero); 122 }
38 [Link]("2.-enviar mensaje"); 81 123 }
39 [Link]("3.-correo a todos"); 82 fechaActual=[Link](); 124 }
40 [Link]("4.-borrar correo"); 83 [Link](usuario+": "+fechaActual+": "+mensaje);
41 [Link]("5.-salir"); 84 [Link]();
42 }

MAIN
1 /* 20 try{
2 diseñar un programa que cree el fichero 21 FileWriter fichero=new FileWriter("[Link]");
3 [Link] con este formato: 22 PrintWriter pw=new PrintWriter(fichero);
4 45,8,9, 23
5 1,120,56,78,98, 24 Random aleatorio=new Random();
6 2,35, 25 int totallineas=[Link](100)+1;
7 el fichero tendrá entre 1 y 100 lineas, 26 int i,j;
8 en cada linea entre 1 y 20 numeros y 27
9 cada nº es aleatorio entre 1 y 300. 28 for(i=0;i<totallineas;i++){//gestiona lineas
10 */ 29 int totalnumeros=[Link](20)+1;
11 package clase17; 30 for(j=0;j<totalnumeros;j++){//gestiona numeros
12 31 int numero=[Link](300)+1;
13 import [Link].*; 32 [Link](numero+",");
14 import [Link].*; 33 }
15 34 [Link]();
16 public class Clase17 { 35 }
17 36 [Link]();
18 public static void main(String[] args) { 37 }
19 38 catch(Exception e){
39 [Link](e);
40 }
41 }
42 }

MAIN UML tarea UML Agenda


1 /* -id:int -tareas:ArrayList<Tarea>
2 crear agenda con tareas
3 */ -descripcion:String
4 package clase18; +Tarea() +add(Tarea)
5
6 public class Clase18 { +Tarea(int,String) +get(int):Tarea
7
+toString():String +pop(int):Tarea
8 public static void main(String[] args) { +size:int
9 //creo tareas
10 Tarea t1=new Tarea(1,"hacer la compra"); +getAll():ArrayList<Tarea>
11 Tarea t2=new Tarea(2,"preparar examen"); 19 //saco datos
12 Tarea t3=new Tarea(3,"ir al gimnasio"); 20 [Link]([Link](2).getDescripcion());
13 //creo agenda 21 [Link]([Link](1));
14 Agenda a=new Agenda(); 22 [Link]([Link]());
15 //añado tareas a agenda 23 }
16 [Link](t1); 24 }
17 [Link](t2);
18 [Link](t3);

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 94


Clase Tarea Clase Agenda
1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package clase18; 4 package clase18;
5 5
6 public class Tarea { 6 import [Link].*;
7 private int id; 7
8 private String descripcion; 8 public class Agenda {
9 //constructor sin parametros 9 private ArrayList<Tarea> tareas=new ArrayList<Tarea>();
10 public Tarea(){ 10
11 } 11 //añade tareas
12 //constructor con parametros 12 public void add(Tarea t){
13 public Tarea(int id, String descripcion) { 13 [Link](t);
14 [Link] = id; 14 }
15 [Link] = descripcion; 15 //busca la tarea
16 } 16 public Tarea get(int id){
17 public int getId() { 17 Tarea t=null;
18 return id; 18
19 } 19 boolean encontrado=false;
20 public void setId(int id) { 20 for(int i=0;i<[Link]()&&encontrado==false;i++){
21 [Link] = id; 21 //accedo en la busqueda al id de la tarea
22 } 22 if([Link](i).getId()==id){
23 public String getDescripcion() { 23 //guardo la tarea en t
24 return descripcion; 24 t=[Link](i);
25 } 25 encontrado=true;
26 public void setDescripcion(String descripcion) { 26 }
27 [Link] = descripcion; 27 } //si lo encuentras retorna y y sino retorna null.
28 } 28 return t;
29 @Override 29 }
30 public String toString() { 30 //busca la tarea y la borra
31 return "Tarea{" + "id=" + id + 31 public Tarea pop(int id){
32 ", descripcion=" + descripcion + '}'; 32 Tarea t=null;
33 } 33
34 } 34 boolean encontrado=false;
35 for(int i=0;i<[Link]()&&encontrado==false;i++){
36 //accedo en la busqueda al id de la tarea
37 if([Link](i).getId()==id){
38 //guardo la tarea en t
39 t=[Link](i);
40 [Link](i);//borra tarea
41 encontrado=true;
42 }
43 } //si lo encuentras retorna y y sino retorna null.
44 return t;
45 }
46 //cuantos elementos hay en la coleccion
47 public int size(){
48 return [Link]();
49 }
50 public ArrayList<Tarea> getAll(){
51 return tareas;
52 }
53 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 95


TEMA 9 ENTORNO GRÁFICO

1.-Herramientas para el entorno gráfico.


MAIN Ventana
1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package grafico02; 4 package grafico02;
5 5
6 import [Link]; 6 import [Link].*;
7 7
8 public class Grafico02 { 8 public class Ventana extends JFrame{
9 9
10 public static void main(String[] args) { 10 public Ventana(){
11 //se crea la ventana 11 //codigo
12 Ventana v=new Ventana(); 12 }
13 //se pone titulo 13 }
14 [Link]("mi ventana");
15 //ancho y alto
16 [Link](400,200);
17
18 [Link](null);
19
20 JButton b=new JButton("mi boton");
21 //en la posicion 10,10 colocas boton de 100x30
22 [Link](10,10,100,30);
23
24 //añado el boton a la ventana
25 [Link](b);
26 //visibilidad de la ventana
27 [Link](true);
28 }
29 }

1.1.-.Boton (JButton), Campo de texto (jTextField):

MAIN Ventana
1 /* 116 private void jButton1ActionPerformed([Link] evt) {
2 -- 117 //saco lo que hay en la caja
3 */ 118 int numero1=[Link]([Link]());
4 package grafico08; 119 int numero2=[Link]([Link]());
5 120 int suma=numero1+numero2;
6 public class Grafico08 { 121
7 122 [Link]([Link](suma));//añade texto a la caja
8 public static void main(String[] args) { 123 }
9 Ventana v=new Ventana();
10 [Link]("calculadora");
11 [Link](true);
12 }
13 }

MAIN Ventana
1 /* 116 private void jButton1ActionPerformed([Link] evt) {
2 -- 117 //saco lo que hay en la caja
3 */ 118 int numero1=[Link]([Link]());
4 package grafico03; 119 int numero2=[Link]([Link]());
5 120 int suma=numero1+numero2;
6 import [Link]; 121
7 import [Link]; 122 [Link]([Link](suma));//añade texto a la caja
8 123 }
9 public class Grafico03 {
10
11 public static void main(String[] args) {
12 Ventana v=new Ventana();
13 [Link]("suma de dos numeros");
14 [Link](true)
15 ;
16 //para centrarla
17 [Link](null);
18
19 //añadir imagen de titulo de ventana
20 Image icono=[Link]().getImage
21 ([Link]("resources/[Link]"));
22
23 [Link](icono);
24
25 //no cambia tamaño de ventana
26 [Link](false);
27 }
28 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 96


MAIN Ventana
1 /* 162 private void jButton1ActionPerformed([Link] evt) {
2 -- 163 //saco lo que hay en la caja
3 */ 164 double numero1=[Link]([Link]());
4 package grafico05; 165 double numero2=[Link]([Link]());
5 166 double suma=numero1+numero2;
6 import [Link].*; 167
7 168 [Link]([Link](suma));//añade texto a la caja
8 public class Grafico05 { 169 }
9 170
10 public static void main(String[] args) { 171 private void jButton2ActionPerformed([Link] evt) {
11 Ventana v=new Ventana(); 172 double numero1=[Link]([Link]());
12 [Link]("calculadora"); 173 double numero2=[Link]([Link]());
13 [Link](true); 174 double resta=numero1-numero2;
14 //para centrarla 175
15 [Link](null); 176 [Link]([Link](resta));//añade texto a la caja
16 177 }
17 //añadir imagen de titulo de ventana 178
18 Image icono=[Link]().getImage 179 private void jButton3ActionPerformed([Link] evt) {
19 ([Link]("resources/[Link]")); 180 double numero1=[Link]([Link]());
20 181 double numero2=[Link]([Link]());
21 [Link](icono); 182 double multiplica=numero1*numero2;
22 183
23 //no cambia tamaño de ventana 184 [Link]([Link](multiplica));//añade texto a la caja
24 [Link](false); 185 }
25 } 186
26 } 187 private void jButton4ActionPerformed([Link] evt) {
188 double numero1=[Link]([Link]());
189 double numero2=[Link]([Link]());
190 double divide=numero1/numero2;
191
192 [Link]([Link](divide));//añade texto a la caja
193 }

1.2.-.Casilla de activacion(JCheckBox):

MAIN Ventana
1 /* 166 private void calculaActionPerformed([Link] evt) {
2 -- 167 double unidades=[Link]([Link]());
3 */ 168 double precio=[Link]([Link]());
4 package grafico07; 169 double total=unidades*precio;
5 170 [Link]([Link](total));//añade texto a la caja
6 public class Grafico07 { 171
7 172 if([Link]()){
8 public static void main(String[] args) { 173 total=total*1.18;
9 Ventana v=new Ventana(); 174 [Link]([Link](total));//
10 [Link]("calculo de factura"); 175 }
11 [Link](true); 176 if([Link]()){
12 } 177 double descuento=[Link]([Link]());
13 } 178 total=total-((total*descuento)/100);
179 [Link]([Link](total));
180 }
SINTAXIS:

f([Link]()){
}

1.3.-Lista desplegable(JComboBox), Lista(jList):

MAIN Ventana
1 /* 156 private void generamenuActionPerformed([Link] evt) {
2 -- 157
3 */ 158 Vector<String> v=new Vector<String>();
4 package grafico09; 159
5 160 [Link]([Link]().toString());
6 public class Grafico09 { 161 [Link]([Link]().toString());
7 162 [Link]([Link]().toString());
8 public static void main(String[] args) { 163
9 Ventana v=new Ventana(); 164 [Link](v);
10 [Link]("Menu"); 165 }
11 [Link](true); SINTAXIS LISTA DESPLEGABLE:
12 } [Link](); //se vacia la lista
13 } [Link](); //se añaden elementos
String dato=[Link](); //extrae a dato el seleccionado

Vector<String> v=new Vector<String>(); //cargo datos en coleecion


[Link](“palencia”);
[Link](“leon”);
[Link](“salamanca”);
[Link](v);
}
SINTAXIS LISTA:
String dato=[Link](); //si se elige una
Object[]=[Link](); //si se eligen varias

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 97


MAIN Ventana
1 /* 270
2 -- 271 private void sieteActionPerformed([Link] evt) {
3 */ 272 [Link]([Link]()+"7");
4 package grafico08; 273 }
5 274
6 public class Grafico08 { 275 private void ochoActionPerformed([Link] evt) {
7 276 [Link]([Link]()+"8");
8 public static void main(String[] args) { 277 }
9 Ventana v=new Ventana(); 278
10 [Link]("calculadora"); 279 private void nueveActionPerformed([Link] evt) {
11 [Link](true); 280 [Link]([Link]()+"9");
12 } 281 }
13 } 282
283 private void sumaActionPerformed([Link] evt) {
284 acum=[Link]([Link]());
285 [Link]("");
286 operacion="+";
287 }
288
289 private void restaActionPerformed([Link] evt) {
290 acum=[Link]([Link]());
291 [Link]("");
292 operacion="-";
293 }
294
295 private void multiplicaActionPerformed([Link] evt) {
237 private void ceActionPerformed([Link] evt) { 296 acum=[Link]([Link]());
238 [Link](""); 297 [Link]("");
239 operacion=""; 298 operacion="*";
240 acum=0; 299 }
241 } 300
242 301 private void divideActionPerformed([Link] evt) {
243 private void ceroActionPerformed([Link] evt) { 302 acum=[Link]([Link]());
244 [Link]([Link]()+"0"); 303 [Link]("");
245 } 304 operacion="div";
246 305 }
247 private void unoActionPerformed([Link] evt) { 306
248 [Link]([Link]()+"1"); 307 private void igualActionPerformed([Link] evt) {
249 } 308
250 309 double n2=[Link]([Link]());
251 private void dosActionPerformed([Link] evt) { 310 if([Link]("+")){
252 [Link]([Link]()+"2"); 311 acum=acum+n2;
253 } 312 }
254 313 else if([Link]("-")){
255 private void tresActionPerformed([Link] evt) { 314 acum=acum-n2;
256 [Link]([Link]()+"3"); 315 }
257 } 316 else if([Link]("*")){
258 317 acum=acum*n2;
259 private void cuatroActionPerformed([Link] evt) { 318 }
260 [Link]([Link]()+"4"); // TODO add your handling code here: 319 else if([Link]("div")){
261 } 320 acum=acum/n2;
262 321 }
263 private void cincoActionPerformed([Link] evt) { 322 [Link]([Link](acum));
264 [Link]([Link]()+"5"); 323 }
265 }
266
267 private void seisActionPerformed([Link] evt) {
268 [Link]([Link]()+"6");
269 }

1.4.-Eventos:

MAIN Ventana Evento Acción


1 /* 68 private void caja2MouseClicked actionPerformed Ejecuta algún comando
2 -- ([Link] evt) { componentHidden El componente se oculta
3 */ 69 if([Link]().length()==5){ componentMoved El componente se mueve
4 package grafico10; 70 componentResized El componente se redimensiona
5 71 if([Link]().startsWith("24")){ componentShown El componente se visualiza
6 public class Grafico10 { 72 [Link]("León"); componentAdded Se añade un componente el contenedor
7 73 } componentRemoved Se elimina un componente del contenedor
8 public static void main(String[] args) { 74 if([Link]().startsWith("47")){ focusGained El componente obtiene el foco
9 Ventana v=new Ventana(); 75 [Link]("Valladolid"); focusLost El componente pierde el foco
10 [Link]("código postal"); 76 } ItemStateChanged Se modifica el estado del componente
11 [Link](true); 77 if([Link]().startsWith("05")){ keyPressed Se ha pulsado una tecla
12 } 78 [Link]("Avila"); keyReleased Se ha soltado la tecla
13 } 79 } keyTyped Se ha tecleado un carácter
80 if([Link]().startsWith("09")){ mouseClicked Se ha pulsado el botón del ratón
81 [Link]("Burgos"); mouseEntered El ratón ha entrado en el componente
82 } mouseExited El raton ha salido del componente
83 if([Link]().startsWith("34")){ mousePressed Se ha presionado un botón del ratón
84 [Link]("Palencia"); mouseReleased Se ha soltado un botón del ratón
85 } mouseDragged Desplazando el ratón con el botón pulsado
86 if([Link]().startsWith("37")){ mouseMoved El raton ha cambiado de posicion
87 [Link]("Salamanca");
88 }
89 if([Link]().startsWith("40")){
90 [Link]("Segovia");
91 }
92 if([Link]().startsWith("42")){
if([Link]().subString(0, 2).equals(“47”); 93 [Link]("Soria");
//extraes desde la posicion 0 94 }
dos caracteres y si coinciden con 47…. 95 if([Link]().startsWith("49")){
96 [Link]("Zamora");
97 }
98 }
99 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 98


1.5.-Spinner:

MAIN Ventana
1 /* 99 private void generaparesActionPerformed([Link] evt) {
2 -- 100
3 */ 101 //saco valores y los paso a numeros
4 package grafico11; 102 int num1=[Link]([Link]().toString());
5 103 int num2=[Link]([Link]().toString());
6 public class Grafico11 { 104
7 105 int i;
8 public static void main(String[] args) { 106 Vector<String> v=new Vector<String>();//creo coleccion
9 Ventana v=new Ventana(); 107 for(i=num1;i<=num2;i++){
10 [Link]("genera pares"); 108 if(i%2==0){
11 [Link](true); 109 [Link]([Link](i));//lo meto en la coleccion
12 } 110 }
13 } 111 }
112 [Link](v);//meto la coleecion en la lista
113 }
SINTAXIS SPINNER:
int n=[Link]();

1.6.-Deslizador(jSlider):

MAIN Ventana
1 /* 135 private void desliza1StateChanged([Link] evt) {
2 -- 136 int red=[Link]();
3 */ 137 int green=[Link]();
4 package grafico12; 138 int blue=[Link]();
5 139 [Link](new Color (red, green, blue));
6 public class Grafico12 { 140 }
7 141
8 public static void main(String[] args) { 142 private void desliza2StateChanged([Link] evt) {
9 Ventana v=new Ventana(); 143 int red=[Link]();
10 [Link]("color RGB"); 144 int green=[Link]();
11 [Link](true); 145 int blue=[Link]();
12 } 146 [Link](new Color (red, green, blue));
13 } 147 }
148
149 private void desliza3StateChanged([Link] evt) {
150 int red=[Link]();
151 int green=[Link]();
152 int blue=[Link]();
153 [Link](new Color (red, green, blue));
154 }

1.7.-Boton de opcion(jRadioButton):

MAIN Ventana Ventana


1 /* 380 private void rotarActionPerformed 91 private void cambiarActionPerformed
2 -- ([Link] evt) { ([Link] evt) {
3 */ 381 String c1=[Link](); 92 if([Link]()){
4 package grafico04; 382 String c2=[Link](); 93 [Link](new Color(240,240,240));
5 383 String c3=[Link](); 94 }
6 public class Grafico04 { 384 95 if([Link]()){
7 385 if([Link]()){ 96 [Link]([Link]);
8 public static void main(String[] args) { 386 [Link](c2); 97 }
9 Ventana v=new Ventana(); 387 [Link](c3); 98 if([Link]()){
10 [Link]("rotar color"); 388 [Link](c1); 99 [Link]([Link]);
11 [Link](true); 389 } 100 }
12 } 390 else{ 101 }
13 } 391 [Link](c3);
392 [Link](c1);
393 [Link](c2);
394 }
395 }
SINTAXIS JRADIOBUTTON:
if([Link]()){
}
else{
}

1.8.-Boton de dos posiciones(jToggleButton):


if([Link]()){
}

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 99


1.9.-Barra de progreso(jProgressBar):

MAIN Ventana
1 /* 344 private void progresoActionPerformed([Link] evt) {
2 -- 345 int valor=[Link]();
3 */ 346 valor++;
4 package grafico04; 347 [Link](valor);
5 348 }
6 public class Grafico04 {
7 SINTAXIS JRADIOBUTTON:
8 public static void main(String[] args) { [Link](100);
9 Ventana v=new Ventana(); [Link](100);
10 [Link]("progreso");
11 [Link](true); Ejemplo: analizar ficheros de unidad D:
12 }
13 } int totalfichero=Contarficheros();
[Link](totalfichero);
while(-------------){
//analiza fichero y aumenta la barra
}

1.10.-Paneles(jPanel): botón derecho en jPanel à activar gestor de distribución à elegir.

1.11.-Ventanas de aviso: al pulsar el botón aparecen. Hay que configurarlas manualmente.


133 private void jButton1ActionPerformed([Link] evt) {
134 [Link](this,"hola");
135 }

137 private void jButton2ActionPerformed([Link] evt) {


138 [Link](null,"Mensaje","titulo ventana",JOptionPane.ERROR_MESSAGE);
139 }

141 private void jButton3ActionPerformed([Link] evt) {


142 int respuesta=[Link](null,"pregunta","titulo",JOptionPane.YES_NO_OPTION);
143 if(respuesta==JOptionPane.YES_OPTION){
144 //codigo
145 }
146 else{
147 //codigo
148 }
149 }

151 private void jButton4ActionPerformed([Link] evt) {


152 String nombre=[Link](null,"dame tu nombre");
153 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 100


1.12.-Tablas (jTable):

MAIN Ventana
1 /* 86 private void tablaActionPerformed([Link] evt) {
2 -- 87 //creacion de tabla
3 */ 88 DefaultTableModel modelo=new DefaultTableModel();
4 package grafico13; 89
5 90 [Link](4);
6 public class Grafico13 { 91 [Link](2);
7 92 //creamos la cabecera con una coleccion
8 public static void main(String[] args) { 93 Vector<String> v=new Vector<String>();
9 Ventana v=new Ventana(); 94 [Link]("col1");
10 [Link]("tabla datos"); 95 [Link]("col2");
11 [Link](true); 96 [Link](v);
12 } 97 //meto los datos
13 } 98 [Link]("10",0,0);//dato, fila, columna
99 [Link]("20",0,1);//dato, fila, columna
100
101 [Link]("30",1,0);//dato, fila, columna
102 [Link]("40",1,1);//dato, fila, columna
103
104 [Link]("50",2,0);//dato, fila, columna
105 [Link]("60",2,1);//dato, fila, columna
106
107 //para visualizar el modelo
108 [Link](modelo);
109 }

SINTAXIS JTable:
int fila=[Link](); //fila seleccionada
int fila[]=[Link](); //filas seleccionadas
String d=[Link](2,1); //que dato de celda seleccionado (fila 2 columna 1)

[Link](…………) //añadir filas


[Link](…….); //eliminar filas

MAIN Ventana
1 /* 102 private void jButton1ActionPerformed([Link] evt) {
2 -- 103 //creacion de tabla
3 */ 104 DefaultTableModel modelo=new DefaultTableModel();
4 package grafico14; 105
5 106 [Link](3);
6 public class Grafico14 { 107 [Link](2);
7 108 //creamos la cabecera con una coleccion
8 public static void main(String[] args) { 109 Vector<String> v=new Vector<String>();
9 Ventana v=new Ventana(); 110 [Link]("provincia");
10 [Link]("tabla datos"); 111 [Link]("localidad");
11 [Link](true); 112 [Link](v);
12 } 113 //meto los datos
13 } 114 [Link]("leon",0,0);//dato, fila, columna
115 [Link]("ponferrada",0,1);//dato, fila, columna
116
117 [Link]("leon",1,0);//dato, fila, columna
118 [Link]("bembibre",1,1);//dato, fila, columna
119
120 [Link]("leon",2,0);//dato, fila, columna
121 [Link]("cacabelos",2,1);//dato, fila, columna
122
123 //para visualizar el modelo
124 [Link](modelo);
125 }
126
127 private void caja1ActionPerformed([Link] evt) {
128 // TODO add your handling code here:
129 }
130
131 private void tablaMouseClicked([Link] evt) {
132 int fila=[Link]();//fila seleccionada
133 //saco datos de la fila
134 String dato=[Link](fila,0).toString()+" "+[Link](fila, 1).toString();
135 [Link](dato);
136 }

1.13.-Cuadro de contraseña(jPasswordField):

Extraemos contenido con getText();

1.14.-Cuadro formateado(jFormattedTextField):

Obligamos a que el contenido cumpla un formato, sino se borra solo. Extraemos contenido con getText();

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 101


1.15.-Area de texto(jTextArea):
MAIN Ventana
1 /* 108 private void leerActionPerformed([Link] evt) {
2 -- 109 try{
3 */ 110 String linea;
4 package grafico15; 111 FileReader fr=new FileReader ([Link]());//ruta
5 112 BufferedReader br=new BufferedReader(fr);
6 public class Grafico15 { 113
7 114 while((linea=[Link]())!=null){
8 public static void main(String[] args) { 115 //lo carga en textarea append=añade
9 Ventana v=new Ventana(); 116 [Link](linea+"\n");
10 [Link]("leer fichero"); 117 }
11 [Link](true); 118 [Link]();
12 } 119 }
13 } 120 catch(Exception e){
121 [Link](null,e);
122 }
123 }
124
125 private void guardarActionPerformed([Link] evt) {
126 try{
127 FileWriter fichero=new FileWriter([Link]());
128 PrintWriter pw=new PrintWriter(fichero);
129
130 [Link]([Link]());
131 [Link]();
132 //mensaje al crearlo
133 [Link](null,"archivo creado");
134 }
135 catch(Exception e){
136 [Link](null,e);
137 }
138 }

1.16.-Ventanas Swing:
MAIN Ventana
1 /* 79 private void archivoActionPerformed([Link] evt) {
2 -- 80 //cuadro dialogo abrir archivo
3 */ 81 JFileChooser fc=new JFileChooser();
4 package grafico16; 82 int respuesta=[Link](this);
5 83 //comprobar si se ha pulsado aceptar
6 public class Grafico16 { 84 if(respuesta==JFileChooser.APPROVE_OPTION){
7 85 //crea un objeto file de archivo seleccionado
8 public static void main(String[] args) { 86 //en ruta se mete la ruta del archivo
9 Ventana v=new Ventana(); 87 File archivoElegido=[Link]();
10 [Link]("abre archivos y colores"); 88 String ruta=[Link]();
11 [Link](true); 89
12 } 90 [Link](ruta);//muestra ruta archivo (opcional)
13 } 91 }
92 }
93
94 private void colorActionPerformed([Link] evt) {
95 Color c=[Link](null,"selecciona color",[Link]);
96 if(c !=null){
97 //uso el color para algo...
98 }
99 }

SINTAXIS Filtra archivos txt solo:


JFileChooser fc=new JFileChooser();
FileFilter filter=new FileNameExtensionFilter(“Texto”,”txt”);
[Link](filter);
if(respuesta==JFileChooser.APPROVE_OPTION){
………….//resto codigo

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 102


MAIN Ventana
1 /* 152 private void guardarActionPerformed([Link] evt) {
2 -- 153 try{
3 */ 154 FileWriter fichero=new FileWriter([Link]());
4 package grafico17; 155 PrintWriter pw=new PrintWriter(fichero);
5 156
6 public class Grafico17 { 157 //[Link]([Link]());
7 158 [Link]();
8 public static void main(String[] args) { 159 [Link](null,"archivo creado");
9 Ventana v=new Ventana(); 160 }
10 [Link]("abre y lee archivos de tabla"); 161 catch(Exception e){
11 [Link](true); 162 [Link](null,e);
12 } 163 }
13 } 164 }
165
166 private void leerActionPerformed([Link] evt) {
167
168 int total=0;
169 try{
170 String linea;
171 FileReader fr=new FileReader([Link]());
172 BufferedReader br=new BufferedReader(fr);
173
174 while((linea=[Link]())!=null){
175 total++;//cuenta las filas del fichero
176 }
177 [Link]();
Boton leer opcion 2 178 }
179 catch (Exception e){
166 private void leerActionPerformed([Link] evt) {
180 [Link](this,e);
167
181 }
168 //creacion de tabla con filas y columnas
182 //creacion de tabla con filas=total y columnas=3
169 DefaultTableModel modelo=new DefaultTableModel(0,3);
183 DefaultTableModel modelo=new DefaultTableModel(total,3);
170
184
171 //creamos la cabecera con una coleccion
185 //creamos la cabecera con una coleccion
172 Vector<String> v=new Vector<String>();
186 Vector<String> v=new Vector<String>();
173 [Link]("nombre");
187 [Link]("nombre");
174 [Link]("direccion");
188 [Link]("direccion");
175 [Link]("localidad");
189 [Link]("localidad");
176 [Link](v);
190 [Link](v);
177
191
178 //meto los datos
192 //meto los datos
179 try{
193 int fila=0;//empieza en 0
180 String linea;
194 try{
181 FileReader fr=new FileReader([Link]());
195 String linea;
182 BufferedReader br=new BufferedReader(fr);
196 FileReader fr=new FileReader([Link]());
183
197 BufferedReader br=new BufferedReader(fr);
184 while((linea=[Link]())!=null){
198
185 String datos[]=[Link](":");
199 while((linea=[Link]())!=null){
186 [Link](datos);
200 String datos[]=[Link](":");
187 }
201 [Link](datos[0],fila,0);//dato, fila, columna
188 [Link]();
202 [Link](datos[1],fila,1);//dato, fila, columna
189 }
203 [Link](datos[2],fila,2);//dato, fila, columna
190 catch (Exception e){
204 fila++;//va aumentando para moverse
191 [Link](this,e);
205 }
192 }
206 [Link]();
193 //para visualizar el modelo
207 }
194 [Link](modelo);
208 catch (Exception e){
195
209 [Link](this,e);
196 }
210 }
SINTAXIS salga directorio trabajo: 211 //para visualizar el modelo
File directorioactual=new File(“:”); 212 [Link](modelo);
JFileChooser fc=new JFileChooser(directorioactual); 213
int respuesta=[Link](this); 214 }
………….//resto codigo 215
216 private void seleccionarActionPerformed([Link] evt) {
217 //cuadro dialogo abrir archivo
218 JFileChooser fc=new JFileChooser();
219 int respuesta=[Link](this);
220 //comprobar si se ha pulsado aceptar
221 if(respuesta==JFileChooser.APPROVE_OPTION){
222 //crea un objeto file de archivo seleccionado
223 //en ruta se mete la ruta del archivo
224 File fichero=[Link]();
225 String ruta=[Link]();
226 [Link](ruta);
227 }
228 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 103


MAIN Ventana
1 /* private void jButton1ActionPerformed([Link] evt) {
2 -- 185 [Link]([Link]()+"1");
3 */ 186 }
4 package grafico18; 187
5 188 private void jButton2ActionPerformed([Link] evt) {
6 public class Grafico18 { 189 [Link]([Link]()+"2");
7 190 }
8 public static void main(String[] args) { 191
9 Ventana v=new Ventana(); 192 private void jButton3ActionPerformed([Link] evt) {
10 [Link]("panel acceso"); 193 [Link]([Link]()+"3");
11 [Link](true); 194 }
12 } 195
13 } 196 private void jButton4ActionPerformed([Link] evt) {
197 [Link]([Link]()+"4");
198 }
199
200 private void jButton5ActionPerformed([Link] evt) {
201 [Link]([Link]()+"5");
202 }
203
204 private void jButton6ActionPerformed([Link] evt) {
205 [Link]([Link]()+"6");
206 }
207
208 private void jButton7ActionPerformed([Link] evt) {
209 [Link]([Link]()+"7");
Ventana 210 }
211
232 private void caja1CaretUpdate([Link] evt) {
212 private void jButton8ActionPerformed([Link] evt) {
233
213 [Link]([Link]()+"8");
234 if([Link]().equals("123")){
214 }
235 [Link]("acceso permitido");
215
236 [Link]([Link]);
216 private void jButton9ActionPerformed([Link] evt) {
237 }
217 [Link]([Link]()+"9");
238 else{
218 }
239 [Link]("acceso denegado");
219
240 [Link]([Link]);
220 private void jButton10ActionPerformed([Link] evt) {
241 }
221 [Link]([Link]()+"0");
242 }
222 }
223
224 private void jButton11ActionPerformed([Link] evt) {
225 [Link]("");
226 }
227
228 private void jButton12ActionPerformed([Link] evt) {
229 [Link]("-");
230 }

1.17.-Menus clásicos:

MAIN Ventana
1 /* 20
2 -- 21 LocalTime h=[Link]();
3 */ 22
4 package grafico22; 23 [Link]([Link]([Link]()));
5 24
6 public class Grafico22 { 25 String min;
7 26 if([Link]()<10){
8 public static void main(String[] args) { 27 min="0"+[Link]();
9 Ventana v=new Ventana(); 28 }
10 [Link]("reloj"); 29 else{
11 [Link](true); 30 min=[Link]([Link]());
12 } 31 }
13 } 32 [Link](min);
33
34 String seg;
35 if([Link]()<10){
36 seg="0"+[Link]();
37 }
38 else{
39 seg=[Link]([Link]());
Ventana 40 }
41 [Link]( seg);
11 public class Ventana extends [Link] {
42 }
12
43 };
13 public Ventana() {
44 [Link](tarea);
14 initComponents();
45 [Link]();
15
46 }
16 Timer t=new Timer(1000,null);
17
18 ActionListener tarea= new ActionListener(){
19 public void actionPerformed(ActionEvent evt){

Para ejecutar codigo al iniciar la ventana Timer: guarda una tarea automaticamente al pasar x segundos
public Ventana() { public Ventana() {
initComponents(); initComponents();
//codigo a ejecutar Timer t=new Timer(1000,null); (1000=milisegundos)
} }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 104


MAIN Ventana
1 /* 150 private void jMenuItem1ActionPerformed([Link] evt) {
2 -- 151 try{
3 */ 152 String linea;
4 package grafico20; 153 FileReader fr=new FileReader ([Link]());//ruta
5 154 BufferedReader br=new BufferedReader(fr);
6 public class Grafico20 { 155
7 156 while((linea=[Link]())!=null){
8 public static void main(String[] args) { 157 //lo carga en textarea append=añade
9 Ventana v=new Ventana(); 158 [Link](linea+"\n");
10 [Link]("lee y guarda archivo en menu"); 159 }
11 [Link](true); 160 [Link]();
12 } 161 }
13 } 162 catch(Exception e){
163 [Link](null,e);
164 }
165 }
166
167 private void jMenuItem2ActionPerformed([Link] evt) {
168 try{
169 FileWriter fichero=new FileWriter([Link]());
170 PrintWriter pw=new PrintWriter(fichero);
171
172 [Link]([Link]());
173 [Link]();
174 //mensaje al crearlo
175 [Link](null,"archivo creado");
176 }
Ventana 177 catch(Exception e){
136 private void seleccionarActionPerformed([Link] evt) { 178 [Link](null,e);
137 //cuadro dialogo abrir archivo 179 }
138 JFileChooser fc=new JFileChooser(); 180 }
139 int respuesta=[Link](this); 181
140 //comprobar si se ha pulsado aceptar 182 private void jMenuItem3ActionPerformed([Link] evt) {
141 if(respuesta==JFileChooser.APPROVE_OPTION){ 183 [Link](0);
142 //crea un objeto file de archivo seleccionado 184 }
143 //en ruta se mete la ruta del archivo
144 File fichero=[Link]();
145 String ruta=[Link]();
146 [Link](ruta);
147 }
148 }
149

MAIN Ventana
1 /* 173
2 -- 174 private void jMenuItem6ActionPerformed([Link] evt) {
3 */ 175 //ultimo
4 package grafico23; 176 if([Link]()>0){//si hay algo en el array
5 177 pos=[Link]()-1;//sacas posicion ultima
6 public class Grafico23 { 178 mostrar();//muestras los datos
7 179 }
8 public static void main(String[] args) { 180 else{
9 Ventana v=new Ventana(); 181 pos=-1;//si esta vacio no saco nada
10 [Link]("agenda"); 182 }
11 [Link](true); 183 }
12 } 184
13 } 185 private void jMenuItem4ActionPerformed([Link] evt) {
186 //anterior
187 if([Link]()>0){//si hay algo en el array
188 pos--;//retrocedo posicion
189 if(pos<0){//si estoy al principio me quedo aqui
190 pos=0;
191 }
192 mostrar();//muestras los datos
193 }
194 else{
Ventana 195 pos=-1;//si esta vacio no saco nada
196 }
150 private void jMenuItem2ActionPerformed([Link] evt) {
197 }
151 [Link](0);
198
152 }
199 private void jMenuItem5ActionPerformed([Link] evt) {
153
200 //avanza
154 private void jMenuItem1ActionPerformed([Link] evt) {
201 if([Link]()>0){//si hay algo en el array
155 //guardar
202 pos++;//avanzo posicion
156 Persona p=new Persona([Link](),[Link](),[Link]());
203 if(pos==[Link]()){//si estoy al final me quedo aqui
157 [Link](p);//guardo la persona
204 pos=[Link]();
158 [Link]("");//pongo a cero
205 }
159 [Link]("");//pongo a cero
206 mostrar();//muestras los datos
160 [Link]("");//pongo a cero
207 }
161 }
208 else{
162
209 pos=-1;//si esta vacio no saco nada
163 private void jMenuItem3ActionPerformed([Link] evt) {
210 }
164 //primero
211 }
165 if([Link]()>0){//si hay algo en el array
212 private void mostrar(){//creo funcion mostrar
166 pos=0;//sacas posicion 0
213 [Link]([Link](pos).getDni());
167 mostrar();//muestras los datos
214 [Link]([Link](pos).getNombre());
168 }
215 [Link]([Link](pos).getApellidos());
169 else{
216 }
170 pos=-1;//si esta vacio no saco nada
171 }
172 }

CLASE persona
4 package grafico23; 11
5 12 public Persona(String dni, String nombre, String apellidos) {
6 public class Persona { 13 [Link] = dni;
7 14 [Link] = nombre;
8 private String dni; 15 [Link] = apellidos;
9 private String nombre; 16 }
10 private String apellidos; //resto de codigo…set y get y toString

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 105


MAIN Ventana
1 /* 152 //creacion de tabla
2 -- 153 DefaultTableModel modelo=new DefaultTableModel(0,0);
3 */ 154
4 package grafico21; 155 try{
5 156 String linea;
6 public class Grafico21 { 157 FileReader fr=new FileReader([Link]());
7 158 BufferedReader br=new BufferedReader(fr);
8 public static void main(String[] args) { 159
9 Ventana v=new Ventana(); 160 while((linea=[Link]())!=null){
10 [Link]("lee y guarda archivo menu"); 161 String datos[]=[Link](":");
11 [Link](true); 162 //si es la primera linea son asignaturas
12 } 163 if(primera_linea){
13 } 164 //hago un bucle y lo cargo en el vector
165 for(int i=0;i<[Link];i++){
166 [Link](datos[i]);
167 }
168 [Link](v);
169 //y si no estoy en la primera linea
170 primera_linea=false;
171 }
172 else{
173 //cargo el resto de datos
174 [Link](datos);
175 }
176 }
177 [Link]();
Ventana 178 //para visualizar el modelo
179 [Link](modelo);
private void seleccionarActionPerformed([Link] evt) {
180
120 //cuadro dialogo abrir archivo
181 //hago el calculo de la mejor nota
121 JFileChooser fc=new JFileChooser();
182 //de cada asignatura y la media
122 int respuesta=[Link](this);
183 //saber cuantas filas y columnas hay
123 //comprobar si se ha pulsado aceptar
184 int filas=[Link]();
124 if(respuesta==JFileChooser.APPROVE_OPTION){
185 int columnas=[Link]();
125 //crea un objeto file de archivo seleccionado
186 //creo array vacio con las columnas de la tabla
126 //en ruta se mete la ruta del archivo
187 String mejores[]=new String[columnas];
127 File fichero=[Link]();
188 String medias[]=new String[columnas];
128 String ruta=[Link]();
189 mejores[0]="Mejor nota";//comienzo el array con mejor nota
129 [Link](ruta);
190 medias[0]="Nota media";
130 }
191
131 }
192 //recorrer la tabla y empiezo en el 1
132
193 for(int j=1;j<columnas;j++){
133 private void cargarActionPerformed([Link] evt) {
194 int mayor=Integer.MIN_VALUE;
134
195 double suma=0;
135 int total=0;
196 for (int i=0;i<filas;i++){
136 try{
197 int nota=[Link]([Link](i,j).toString());
137 String linea;
198 suma=suma+[Link]([Link](i,j).toString());
138 FileReader fr=new FileReader([Link]());
199 if(nota>mayor){
139 BufferedReader br=new BufferedReader(fr);
200 mayor=nota;
140
201 }
141 while((linea=[Link]())!=null){
202 }
142 total++;//cuenta las filas del fichero
203 mejores[j]=[Link](mayor);
143 }
204 medias[j]=[Link](suma/filas);
144 [Link]();
205 }
145 }
206 [Link](mejores);
146 catch (Exception e){
207 [Link](medias);
147 [Link](this,e);
208 [Link](modelo);
148 }
209 }
149 boolean primera_linea=true;
210 catch (Exception e){
150 //creamos la cabecera con una coleccion
211 [Link](this,e);
151 Vector<String> v=new Vector<String>();
212 }
213 }

MAIN Ventana
1 /* 104 v[i]=[Link](fin-ini+1)+ini;
2 -- 105 if([Link]()){
3 */ 106 while(v[i]%2!=0){//mientras el numero no sea par...sigues
4 package grafico24; 107 v[i]=[Link](fin-ini+1)+ini;
5 108 }
6 public class Grafico24 { 109 }
7 110 }
8 public static void main(String[] args) { 111 [Link](this,"numeros generados");
9 Ventana v=new Ventana(); 112 }
10 [Link]("aleatorios"); 113
11 [Link](true); 114 private void exportarActionPerformed([Link] evt) {
12 } 115 try{
13 } 116 FileWriter fichero=new FileWriter("[Link]");
117 PrintWriter pw=new PrintWriter(fichero);
118
119 for(int i=0;i<[Link];i++){
120 [Link](v[i]+"");
121 }
122 [Link]();
123 //mensaje al crearlo
Ventana 124 [Link](null,"archivo exportado");
97 private void generarActionPerformed([Link] evt) { 125 }
98 Random aleatorio=new Random(); 126 catch(Exception e){
99 127 [Link](null,e);
100 int ini=[Link]([Link]()); 128 }
101 int fin=[Link]([Link]()); 129 }
102
103 for(int i=0;i<1000;i++){ Generar: crea aleatorios y los guarda en un array.
Exportar: guarda el array en un [Link]

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 106


MAIN Ventana
4 package grafico25; 127 //numerotarjeta y pin
5 128 "select * from cuentas where numerotarjeta=? and pin=?");
6 public class Grafico25 { 129 //meto los valores
7 130 [Link](1,[Link]());//primer ? numtarjeta
131 [Link](2,[Link]([Link]()));//segundo ? pin
8 public static void main(String[] args) {
132
9 Ventana v=new Ventana();
133 [Link](""); [Link]("");//pone a 0
10 [Link]("cajero"); 134 //se guarda el resultado en rs
11 [Link](true); 135 ResultSet rs=[Link]();
12 } 136
13 } 137 if([Link]()){
138 //paso datos a nueva ventana a traves del constructor
139 Cajero v=new Cajero([Link]("numerocuenta"));
140 [Link]("bienvenido "+[Link]("nombre"));
141 [Link](null);
142 [Link](true);
143 [Link](false);
144
145 [Link]();
146 }
147 else{
148 [Link](this,"no encontrado");
149 }
Ventana 150 [Link]();//cierro la conexion
117 private void entrarActionPerformed([Link] evt) { 151 }
118 try{ 152 catch(Exception e){
119 //cargar el driver 153 [Link](this,e);
120 [Link]("[Link]"); 154 }
121 //creo la conexion a la base de datos 155 }
122 Connection conexion=[Link]( 156
123 "jdbc:mysql://localhost:3306/BDbanco","root","root"); 157 private void cerrarActionPerformed([Link] evt) {
124 158 [Link]();
125 //aqui pongo el codigo a insertar 159 }
126 PreparedStatement sql=[Link](

Ventana
200 //creo la conexion a la base de datos
201 Connection conexion=[Link](
202 "jdbc:mysql://localhost:3306/BDbanco","root","root");
203 //preparo la consulta
204 PreparedStatement sql=[Link](
205 "select * from cuentas where numerocuenta=?");
206 //meto los valores
207 [Link](1,numerocuenta);//primer ? cuenta
208 //ejecutamos la consulta
209 ResultSet rs=[Link]();
210 if([Link]()){
211 [Link]([Link]("saldo"));
212 }
213 else{
214 [Link](this,"no encontrado");
215 }
Ventana 216 [Link]();//cierro la conexion
13 public class Cajero extends [Link] { 217 }
14 218 catch(Exception e){
15 private String numerocuenta; 219 [Link](this,e);
16 //indico en el constructor lo que recibe 220 }
17 public Cajero(String numerocuenta) { 221 }
18 initComponents(); 223 private void salirActionPerformed([Link] evt) {
19 [Link]=numerocuenta; 224 //salir a ventana principal
20 } 225 Ventana v=new Ventana();
21 private void reintegro(double cantidad){ 226 [Link]("Ventana");
22 try{ 227 [Link](null);
23 //cargar el driver 228 [Link](true);
24 [Link]("[Link]"); 229 [Link](false);
25 //creo la conexion a la base de datos 230
26 Connection conexion=[Link]( 231 [Link]();
27 "jdbc:mysql://localhost:3306/BDbanco","root","root"); 232 }
28 //preparo la consulta 234 private void movimientosActionPerformed([Link] evt) {
29 PreparedStatement sql=[Link]( 235 [Link]("");
30 "insert into movimientos values (0,?,?,?,?)"); 236 try{
31 LocalDate fecha=[Link](); 237 //cargar el driver
32 [Link](1,[Link]()); 238 [Link]("[Link]");
33 [Link](2,[Link]); 239 //creo la conexion a la base de datos
34 [Link](3,"reintegro"); 240 Connection conexion=[Link](
35 [Link](4,cantidad); 241 "jdbc:mysql://localhost:3306/BDbanco","root","root");
36 int rs=[Link](); 242 //preparo la consulta
37 if(rs==1){ 243 PreparedStatement sql=[Link](
38 //la catidad que me pasan es negativa 244 "select * from movimientos where numerocuenta=?");
39 sql=[Link]( 245 //meto los valores
40 "update cuentas set saldo=saldo +? where numerocuenta=?"); 246 [Link](1,numerocuenta);//primer ? cuenta
41 247 //ejecutamos la consulta
42 [Link](1,cantidad); 248 ResultSet rs=[Link]();
43 [Link](2,[Link]); 249 while([Link]()){
44 250 String cadena=[Link]("fecha")+" "+
45 rs=[Link](); 251 [Link]("descripcion")+" "+
46 if(rs==1){ 252 [Link]("cantidad")+"\n";
47 [Link](this,"operacion realizada"); 253 [Link](cadena);
48 } 254 }
49 else{ 255 [Link]();//cierro la conexion
50 [Link](this,"operacion no realizada"); 256 }
51 } 257 catch(Exception e){
52 } 258 [Link](this,e);
53 else{ 259 }
54 [Link](this,"operacion no realizada"); 260 }
55 } 262 private void saca50ActionPerformed([Link] evt) {
56 [Link](); 263 reintegro(-50);
57 } 264 }
58 catch(Exception e){ 266 private void saca100ActionPerformed([Link] evt) {
59 [Link](this,e); 267 reintegro(-100);
60 } 268 }
61 } 270 private void saca200ActionPerformed([Link] evt) {
195 private void saldoActionPerformed([Link] evt) { 271 reintegro(-100);
196 [Link](""); 272 }
197 try{ 274 private void reintegroActionPerformed([Link] evt) {
198 //cargar el driver 275 reintegro(-[Link]([Link]()));
199 [Link]("[Link]"); 276 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 107


TEMA 10 GESTION DE BBDD RELACIONALES

1.-Introducción.
MySql: (Apache, php, MySql). Xamp, wamp, lamp.

• Apache: servidor web.


• MySql: bases de datos.
• Filezilla: servidor ftp.
• Mercury: servidor mail.
• Tomcat: servidor aplicaciones.

Para configurar el Xamp:


• Usuario: root.
• Clave: hay que ponerla por seguridad.
o Escribimos en el Shell à cd mysql à cd bin à mysql –u root –p (conecta a sql).
o Escribir: update [Link] set password=password(‘admin’) where user=’root’;
Flush privileges; à quit
o Vamos al Xamp à apache à config à [Link] y escribir en zona
[‘servers’] [$i] [‘password’]=’ ‘;$cf… (donde las comillas admin).

Script sql: fichero de texto (sql) con órdenes sql que se ejecutan en lote. Después se pega en php Myadmin y se ejecuta,
guardándose guarda la base de datos.
#Ejemplo de script
#si existe la base la borras, y si no la creas
drop database if exists BDejemplo;
create database BDejemplo;
#selecciono la BBDD con la que voy a trabajar
use BDejemplo;
#creo una tabla dos columnas a y b
create table tabla (a int, b int, primary key(a));
#cargo datos
insert into tabla (a,b) values (1,1);
insert into tabla (a,b) values (2,2);
insert into tabla (a,b) values (3,3);

2.-JAVA y BBDD relacionales.


Java dispone de la librería JDBC (Java database Conecctity). Es una capa intermedia que ofrece transparencia frente a
la BD. Tiene la ventaja que si cambia la BD no afecta al programa Java. Pasos a realizar:

• Cargar en memoria el driver ([Link]).


• Realizar la conexión: conecction.
• Realizar las consultas oportunas: Statement.
• Cerramos la conexión.

Debemos tener el driver de la BD que usaremos. Es un fichero .jar que hay que buscar en internet (para mysql, Access,
Oracle). Para mysql ya la tiene incorporada Java. (agregar biblioteca à driver MySql jdbc. Si no esta se busca en internet
y agregar archivo JAR/Carpeta. Hay que incorporar el import [Link].*;

Los driver serán proporcionados por los propietarios del SGDB y deben ser cargados antes de conectarnos a la BD. La
sentencia para cargar el driver es:

[Link](“driver”);
[Link](“[Link]”); //En el caso del driver de mysql.

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 108


BBDD Clase Driver
Puente jdbc-odbc [Link]
Oracle [Link]
MySql [Link]
SqlServer [Link]

El driver y la cadena de conexión dependen de la BD, si cambiamos la BD hay que cambiarlos. Suelen parametrizarse en
un fichero externo XML.
Clase driver
//cargar el driver
[Link]("[Link]");
//creo la conexion a la base de datos
Connection conexion=[Link](
"jdbc:mysql://localhost:3306/BDejemplo","root","root");
while([Link]()){
//codigo
}
[Link]();//cierro la conexion
El next mueve la flecha hacia abajo y dice si hay datos, (busca en la fila entera).

1 /* 26 //[Link]("hubo resultados");
2 -- 27 //}
3 */ 28 //else{
4 package datos01; 29 //[Link]("no hubo resultados");
5 30 //}
6 import [Link].*; 31 //bucle para mover la flecha y que saque
7 32 //lo que hay en la columna a
8 public class Datos01 { 33 while([Link]()){
9 34 //modo uno
10 public static void main(String[] args) { 35 int a=[Link]("a");//columna a
11 try{ 36 int b=[Link]("b");//columna b
12 //cargar el driver 37 [Link](a+" "+b);
13 [Link]("[Link]"); 38 //modo dos
14 //creo la conexion a la base de datos 39 [Link]([Link]("a"));//columna a
15 Connection conexion=[Link]( 40 [Link](" ");
16 "jdbc:mysql://localhost:3306/BDejemplo","root","root"); 41 [Link]([Link]("b"));//columna b
17 42 }
18 [Link]("contectados a la BD"); 43 [Link]();//cierro la conexion
19 //aqui pongo el codigo 44 }
20 Statement sql=[Link]();//creo consulta 45 catch(Exception e){
21 //se guarda el resultado en rs 46 [Link](e);
22 ResultSet rs=[Link]("select * from tabla"); 47 }
23 48 }
24 //comprobamos si la select tuvo resultados 49 }
25 //if([Link]()){

1 /* 22 ResultSet rs=[Link]("select * from clientes");


2 -- 23
3 */ 24 //bucle para mover la flecha y que saque
4 package datos02; 25 //lo que hay en las columnas
5 26 [Link]("dni\tnombre\tfecha");
6 import [Link].*; 27 while([Link]()){
7 28 String dni=[Link]("dni");//columna dni
8 public class Datos02 { 29 String nombre=[Link]("nombre");//columna nombre
9 30 String fecha=[Link]("nacimiento");//columna nacimiento
10 public static void main(String[] args) { 31 [Link](dni+"\t"+nombre+"\t"+fecha);
11 try{ 32 }
12 //cargar el driver 33 [Link]();//cierro la conexion
13 [Link]("[Link]"); 34 }
14 //creo la conexion a la base de datos 35 catch(Exception e){
15 Connection conexion=[Link]( 36 [Link](e);
16 "jdbc:mysql://localhost:3306/BDdatos02","root","root"); 37 }
17 38 }
18 [Link]("contectados a la BD"); 39 }
19 //aqui pongo el codigo
20 Statement sql=[Link]();//creo consulta
21 //se guarda el resultado en rs

1 /* 24 [Link]("contectados a la BD");
2 Buscar un cliente por su dni 25 //aqui pongo el codigo
3 */ 26 Statement sql=[Link]();//creo consulta
4 package datos02_1; 27 //se guarda el resultado en rs
5 28 ResultSet rs=[Link](
6 import [Link].*; 29 "select * from clientes where dni='"+dni+"'");
7 import [Link]; 30
8 31 if([Link]()){//si encuentras sacas los datos
9 public class Datos02_1 { 32 [Link]([Link]("nombre"));
10 33 [Link]([Link]("id"));
11 public static void main(String[] args) { 34 [Link]([Link]("nacimiento"));
12 Scanner sc=new Scanner([Link]); 35 }
13 [Link]("introduzca dni: "); 36 else{
14 String dni=[Link](); 37 [Link]("no encontrado");
15 38 }
16 [Link](sc); 39 [Link]();//cierro la conexion
17 try{ 40 }
18 //cargar el driver 41 catch(Exception e){
19 [Link]("[Link]"); 42 [Link](e);
20 //creo la conexion a la base de datos 43 }
21 Connection conexion=[Link]( 44 }
22 "jdbc:mysql://localhost:3306/BDdatos02","root","root"); 45 }
23

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 109


1 /* 22 //sin comillas (primer ?, valor)
2 -- 23 [Link](1,2);//primer ? metes un 2
3 */ 24 [Link](2,2);//segundo ? metes un 2
4 package datos03; 25
5 26 //se guarda el resultado en rs
6 import [Link].*; 27 ResultSet rs=[Link]();
7 28
8 public class Datos03 { 29 //comprobamos si la select tuvo resultados
9 30 if([Link]()){
10 public static void main(String[] args) { 31 [Link]("encontrado");
11 try{ 32 }
12 //cargar el driver 33 else{
13 [Link]("[Link]"); 34 [Link]("no encontrado");
14 //creo la conexion a la base de datos 35 }
15 Connection conexion=[Link]( 36 [Link]();//cierro la conexion
16 "jdbc:mysql://localhost:3306/BDejemplo","root","root"); 37 }
17 38 catch(Exception e){
18 [Link]("conectado a la BD"); 39 [Link](e);
19 //PreparedStatement ya se encarga de 40 }
20 PreparedStatement sql=[Link]( 41 }
21 "select * from tabla where a=? and b=?"); 42 }

MAIN Ventana
1 /* 160 Connection conexion=[Link](
2 -- 161 "jdbc:mysql://localhost:3306/BDdatos02","root","root");
3 */ 162
4 package datos04; 163 //aqui pongo el codigo a actualizar
5 164 PreparedStatement sql=[Link](
6 public class Datos04 { 165 "update clientes set nombre=?,id=? where dni=?");
7 166 //meto los valores
8 public static void main(String[] args) { 167 [Link](1,[Link]());//primer ? metes nombre
9 Ventana v=new Ventana(); 168 [Link](2,[Link]([Link]()));
10 [Link]("buscar"); 169 [Link](3,[Link]());//tercer ? extraes dni
11 [Link](true); 170 [Link]("");[Link]("");[Link]("");
12 } 171
13 } 172 //devuelve el numero de filas actualizadas
173 int resultado=[Link]();
174
175 if(resultado==1){
176 [Link](this,"actualizado");
177 }
178 else{
179 [Link](this,"no actualizado");
180 }
181 [Link]();//cierro la conexion
182 }
Ventana 183 catch(Exception e){
184 [Link](this,e);
124 private void buscarActionPerformed([Link] evt) {
185 }
125 try{
186 }
126 //cargar el driver
187
127 [Link]("[Link]");
188 private void guardarActionPerformed([Link] evt) {
128 //creo la conexion a la base de datos
189 try{
129 Connection conexion=[Link](
190 //cargar el driver
130 "jdbc:mysql://localhost:3306/BDdatos02","root","root");
191 [Link]("[Link]");
131
192 //creo la conexion a la base de datos
132 PreparedStatement sql=[Link](
193 Connection conexion=[Link](
133 "select dni,nombre,id from clientes where dni=?");
194 "jdbc:mysql://localhost:3306/BDdatos02","root","root");
134 //sin comillas (primer ?, valor)
195
135 [Link](1,[Link]());//primer ? metes dni
196 //aqui pongo el codigo a insertar
136
197 PreparedStatement sql=[Link](
137 //se guarda el resultado en rs
198 "insert into clientes (dni,nombre,id) values(?,?,?)");
138 ResultSet rs=[Link]();
199 //meto los valores
139
200 [Link](1,[Link]());//primer ? metes dni
140 //comprobamos si la select tuvo resultados
201 [Link](2,[Link]());//segundo ? metes nombre
141 if([Link]()){
202 [Link](3,[Link]([Link]()));//tercer ? metes id
142 [Link]([Link]("nombre"));
203 [Link]("");[Link]("");[Link]("");
143 [Link]([Link]("id"));
204
144 }
205 //devuelve el numero de filas actualizadas
145 else{
206 int resultado=[Link]();
146 [Link](this, "no encontrado");
207
147 }
208 if(resultado==1){
148 [Link]();//cierro la conexion
209 [Link](this,"guardado");
149 }
210 }
150 catch(Exception e){
211 else{
151 [Link](this,e);
212 [Link](this,"no guardado");
152 }
213 }
153 }
214 [Link]();//cierro la conexion
154
215 }
155 private void actualizarActionPerformed([Link] evt) {
216 catch(Exception e){
156 try{
217 [Link](this,e);
157 //cargar el driver
218 }
158 [Link]("[Link]");
219 }
159 //creo la conexion a la base de datos
Script BDdatos02
# Ejemplo de script
drop database if exists BDdatos02;

create database BDdatos02;

# selecciono la bbdd con la que voy a trabajar


use BDdatos02;

# creo una tabla


create table clientes (dni varchar(15),nombre varchar(20),id int,nacimiento date,primary key(dni));

# cargo datos
insert into clientes values ("111","luis",145,"1990-5-25");
insert into clientes values ("222","marta",109,"1987-2-12");

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 110


2.1.-Altas, actualizaciones y eliminaciones.

Altas: insert into tabla (campos) values (……….);


eliminación: delete fron tabla where (condición);
actualización: update tabla set (campos) where (condición);

1 /* 21 //meto los valores


2 -- 22 [Link](1,"777");
3 */ 23 [Link](2,"bea");
4 package datos05; 24 [Link](3,45);
5 25
6 import [Link].*; 26 //devuelve el numero de filas actualizadas
7 27 int resultado=[Link]();
8 public class Datos05 { 28
9 29 if(resultado==1){
10 public static void main(String[] args) { 30 [Link]("insertado");
11 try{ 31 }
12 //cargar el driver 32 else{
13 [Link]("[Link]"); 33 [Link]("no insertado");
14 //creo la conexion a la base de datos 34 }
15 Connection conexion=[Link]( 35 [Link]();//cierro la conexion
16 "jdbc:mysql://localhost:3306/BDdatos02","root","root"); 36 }
17 37 catch(Exception e){
18 //hago conexion e inserto valores 38 [Link](e);
19 PreparedStatement sql=[Link]( 39 }
20 "insert into clientes (dni,nombre,id) values(?,?,?)"); 40 }
41 }

MAIN Ventana
1 /* 28 modelo=new DefaultTableModel();
2 Crear BD de articulos y la tabla articulos 29 //Titulo de las columnas
3 cargarla con 10 articulos y mostrar la 30 Vector<String> v=new Vector<String>();
4 tabla en Jtable. 31 [Link]("Rferencia");
5 */ 32 [Link]("Descripcion");
6 package datos06; 33 [Link]("Precio");
7 34 [Link]("Stock");
8 public class Datos06 { 35
9 36 [Link](v);
10 public static void main(String[] args) { 37
11 Ventana v=new Ventana(); 38 try{
12 [Link]("articulos"); 39 //cargar el driver
13 [Link](true); 40 [Link]("[Link]");
14 } 41 //creo la conexion a la base de datos
15 } 42 Connection conexion=[Link](
43 "jdbc:mysql://localhost:3306/BDarticulos","root", "root");
44 //creamos la consulta
45 Statement sql = [Link]();
46
47 ResultSet rs = [Link]("select * from articulos");
48
49 while([Link]()){
50 String [] fila={([Link]("referencia")),
51 ([Link]("descripcion")),
52 ([Link]("precio")),
53 ([Link]("stock"))};
54 [Link](fila);
Ventana 55 }
56 [Link](modelo);
17 public class Ventana extends [Link] {
57 [Link]();
18 DefaultTableModel modelo;
58 }
19 /**
59 catch(Exception e){
20 * Creates new form Articulos
60 [Link](this,e);
21 */
61 }
22 public Ventana() {
62 }
23 initComponents();
24 tabla();
25 }
26 private void tabla(){
27
Script BDarticulos
drop database if exists BDarticulos;
create database BDarticulos;

use BDarticulos;

create table articulos (referencia varchar(15),descripcion varchar(20),precio double,stock int,primary key(referencia));

insert into articulos (referencia,descripcion,precio,stock) values ("a001","naranjas",3.2,200);


insert into articulos (referencia,descripcion,precio,stock) values ("a002","platanos",2,100);
insert into articulos (referencia,descripcion,precio,stock) values ("a003","limones",1.5,210);
insert into articulos (referencia,descripcion,precio,stock) values ("a004","fresas",4,154);
insert into articulos (referencia,descripcion,precio,stock) values ("a005","kiwis",3.7,228);
insert into articulos (referencia,descripcion,precio,stock) values ("a006","manzanas",2.8,76);
insert into articulos (referencia,descripcion,precio,stock) values ("a007","peras",3.4,112);
insert into articulos (referencia,descripcion,precio,stock) values ("a008","mandarinas",3.6,251);
insert into articulos (referencia,descripcion,precio,stock) values ("a009","uvas",2.7,73);
insert into articulos (referencia,descripcion,precio,stock) values ("a010","melon",1.9,115);

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 111


2.2.-Navegar por un resulSet.

Por defecto solo puede moverse hacia delante.

TYPE_FORWARD_ONLY Solo permite desplazarnos hacia delante (por defecto).


TYPE_SCROLL_INTENSIVE Podemos movernos adelante y atrás pero no vemos cambios de otros usuarios.
TYPE_SCROLL_SENSITIVE Podemos movernos adelante y atrás y vemos cambios de otros usuarios.
CONCUR_READ_ONLY No podemos actualizar filas en el resutSet (por defecto).
CONCUR_UPDATABLE Podemos actualizar filas en el resultSet.

Para movernos por el resulSet:

Next(); Avanza la fila getRow(); Nos devuelve el nº de fila donde estamos


Previus(); Retrocede la fila isFirst(); Estamos en la primera fila?
First(); Primera fila isLast(); Estamos en la última fila?
Last(); Última la fila
Absolute(int); Nos sitúa en la fila indicada

MAIN Ventana
1 /* private void primeroActionPerformed([Link] evt) {
2 -- 168 try{
3 */ 169 [Link]();//si estoy al principio..
4 package datos07; 170 mostrar();
5 171 }
6 public class Datos07 { 172 catch(Exception e){
7 173 [Link](this,e);
8 public static void main(String[] args) { 174 }
9 Ventana v=new Ventana(); 175 }
10 [Link]("paneles, jPanel"); 176
11 [Link](true); 177 private void ultimoActionPerformed([Link] evt) {
12 } 178 try{
13 } 179 [Link]();//si estoy al final..
180 mostrar();
181 }
182 catch(Exception e){
183 [Link](this,e);
184 }
185 }
186
187 private void atrasActionPerformed([Link] evt) {
188 try{
189 if(![Link]()){//si no estoy al principio..
190 [Link]();//retrocede
Ventana 191 mostrar();
15 public class Ventana extends [Link] { 192 }
16 //creo la conexion aqui 193 }
17 private Connection conexion=null; 194 catch(Exception e){
18 private ResultSet rs=null; 195 [Link](this,e);
19 196 }
20 public Ventana() { 197 }
21 initComponents(); 198
22 199 private void adelanteActionPerformed([Link] evt) {
23 try{ 200 try{
24 //cargar el driver 201 if(![Link]()){//si no estoy al final..
25 [Link]("[Link]"); 202 [Link]();//avanza
26 //creo la conexion a la base de datos 203 mostrar();
27 conexion=[Link]( 204 }
28 "jdbc:mysql://localhost:3306/BDdatos02","root","root"); 205 }
29 206 catch(Exception e){
30 //aqui pongo el codigo 207 [Link](this,e);
31 PreparedStatement sql=[Link]( 208 }
32 "select * from clientes", 209 }
33 ResultSet.TYPE_SCROLL_SENSITIVE,//moverme arriba y abajo 210 @Override
34 ResultSet.CONCUR_READ_ONLY); 211 public void finalize(){
35 rs=[Link](); 212 try{
36 213 [Link]();
37 if([Link]()){//si hay resultados... 214 }
38 mostrar(); 215 catch(Exception e){
39 } 216 [Link](this,e);
40 else{ 217 }
41 [Link](this,"tabla vacia"); 218 }
42 }
43 //no se cierra la conexion
44 }
45 catch(Exception e){
46 [Link](e);
47 }
48 }
49 private void mostrar() throws Exception{
50 [Link]([Link]("dni"));
51 [Link]([Link]("nombre"));
52 [Link]([Link]("id"));
53 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 112


2.3.-DAO (Data Access Object): no es obligatoria pero forma parte de un buen diseño. Ofrece más transparencia en
nuestro código.

MAIN UML DAO


1 /* -conexion:Connection
2 --
3 */ +DAO(String,String,String,String) {exception Exception}
4 package datos08;
5 +finalize() {exception Exception}
6 public class Datos08 { +insertar(String,String,int):boolen {exception Exception}
7
8 public static void main(String[] args) { +buscar(String):boolean {exception Exception}
9 try{ +eliminar(String):boolean {exception Exception}
10 DAO dao=new DAO(
11 "[Link]", +actualizar(String,String,String):boolean {exception Exception}
12 "jdbc:mysql://localhost:3306/BDdatos02",
13 "root",
14 "root");
15
16 boolean encontrado=[Link]("111");
17 [Link](encontrado);
18
19 boolean eliminado=[Link]("666");
20 [Link](eliminado);
21
22 boolean actualizado=[Link]("ana",77,"777");
23 [Link](actualizado);
24 }
25 catch(Exception e){
26 [Link](e);
27 }
28 }
29 }

CLASE DAO
1 /* 46 encontrado=true;
2 -- 47 }
3 */ 48 return encontrado;
4 package datos08; 49 }
5 50 @Override //finaliza la conexion
6 import [Link].*; 51 public void finalize()throws Exception{
7 52 [Link]();
8 public class DAO { 53 }
9 private Connection conexion=null; 54 public boolean eliminar(String dni) throws Exception{
10 //hacemos constructor para pasar parametros 55 boolean eliminado=false;//para ver si esta eliminado
11 public DAO(String driver, String dsn, 56
12 String usuario, String password)throws Exception{ 57 //meto en ? el dni
13 //throws pasa el error arriba 58 PreparedStatement sql=[Link](
14 [Link](driver); 59 "delete from clientes where dni=?");
15 conexion=[Link](dsn,usuario, password); 60 [Link](1,dni);//primer ? metes dni
16 } 61
17 public boolean insertar(String dni, String nombre, int id)throws Exception{ 62 //devuelve cuantas filas se han e
18 boolean insertado=false;//para ver si esta insertado 63 int resultado=[Link]();
19 64 //si lo elimina lo devuelve
20 //meto en ??? el dni, nombre e id 65 if(resultado==1){
21 PreparedStatement sql=[Link]( 66 eliminado=true;
22 "insert into clientes(dni,nombre,id) values (?,?,?"); 67 }
23 [Link](1,dni);//primer ? metes dni 68 return eliminado;
24 [Link](2,nombre);//segundo ? metes nombre 69 }
25 [Link](3,id);//tercer ? metes id 70 public boolean actualizar(String nombre,
26 71 int id,String dni) throws Exception{
27 //devuelve cuantas filas se han actualiado 72 boolean actualizado=false;//para ver si esta actualizado
28 int resultado=[Link](); 73
29 //si lo encuentra lo devuelve 74 //meto en ??? el dni, nombre e id
30 if(resultado==1){ 75 PreparedStatement sql=[Link](
31 insertado=true; 76 "update clientes set nombre=?,id=? where dni=?");
32 } 77 //meto los valores
33 return insertado; 78 [Link](1,nombre);//primer ? metes nombre
34 } 79 [Link](2,id);//segundo ? metes id
35 public boolean buscar(String dni)throws Exception{ 80 [Link](3,dni);//tercer ? metes dni
36 boolean encontrado=false;//para ver si esta encontrado 81
37 82 //devuelve el numero de filas actualizadas
38 //meto en ??? el dni, nombre e id 83 int resultado=[Link]();
39 PreparedStatement sql=[Link]( 84 //si lo encuentra lo devuelve
40 "select * from clientes where dni=?"); 85 if(resultado==1){
41 [Link](1,dni);//primer ? metes dni 86 actualizado=true;
42 87 }
43 ResultSet r=[Link](); 88 return actualizado;
44 //si lo encuentra lo devuelve 89 }
45 if([Link]()){ 90 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 113


MAIN Ventana
1 /* 30 PreparedStatement sql=[Link](
2 -- 31 "select dni from personas");
3 */ 32
4 package datos09; 33 //se guarda el resultado en rs
5 34 ResultSet rs=[Link]();
6 public class Datos09 { 35
7 36 while([Link]()){
8 public static void main(String[] args) { 37 [Link]([Link]("dni"));
9 Ventana v=new Ventana(); 38 }
10 [Link]("consulta coches"); 39 }
11 [Link](true); 40 catch(Exception e){
12 } 41 [Link](this,e);
13 } 42 }
43 }
156 private void dniItemStateChanged([Link] evt) {
157 try{
158 PreparedStatement sql=[Link](
159 //left join para que salgan todas las personas
160 "select * from personas LEFT JOIN coches "
161 + "on [Link]=[Link] "
162 + "where [Link]=?");
163
164 [Link](1,[Link]().toString());//primer ? metes dni
Ventana 165 ResultSet rs=[Link]();
16 public class Ventana extends [Link] { 166
17 //creo objeto conexion para no tener que abrir y cerrar siempre 167 if([Link]()){
18 private Connection conexion; 168 [Link]([Link]("nombre"));
19 169 [Link]([Link]("edad"));
20 public Ventana() { 170 [Link]([Link]("matricula"));
21 initComponents(); 171 [Link]([Link]("marca"));
22 172 [Link]([Link]("modelo"));
23 try{ 173 }
24 //cargar el driver 174 }
25 [Link]("[Link]"); 175 catch(Exception e){
26 //creo la conexion a la base de datos 176 [Link](this,e);
27 conexion=[Link]( 177 }
28 "jdbc:mysql://localhost:3306/BDcoches","root","root"); 178 }
29

MAIN Ventana
1 /* 108
2 -- 109 private void nuevoActionPerformed([Link] evt) {
3 */ 110 Nuevo n=new Nuevo();
4 package datos10; 111 [Link]("nuevo vehiculo");
5 112 [Link](true);
6 public class Datos10 { 113 [Link](null);
7 114 }
8 public static void main(String[] args) { 115
9 Ventana v=new Ventana(); 116 private void eliminarActionPerformed([Link] evt) {
10 [Link]("taller"); 117 Eliminar e=new Eliminar();
11 [Link](true); 118 [Link]("eliminar vehiculo");
12 [Link](null); 119 [Link](true);
13 } 120 [Link](null);
14 } 121 }
122
123 private void burcarActionPerformed([Link] evt) {
124 Buscar b=new Buscar();
125 [Link]("buscar vehiculo");
126 [Link](true);
127 [Link](null);
128 }
129
130 private void listarActionPerformed([Link] evt) {
131 Listado l=new Listado();
Ventana 132 [Link]("listar vehiculo");
105 private void salirActionPerformed([Link] evt) { 133 [Link](true);
106 [Link](0); 134 [Link](null);
107 } 135 }

Nuevo
137 double n1=[Link]([Link]());
138 Integer n2=[Link]([Link]());
139
140 [Link](1,[Link]());//primer ? matricula
141 [Link](2,[Link]());//segundo ? marca
142 [Link](3,[Link]());//tercer ? modelo
143 [Link](4,n1);//cuarto ? cv
144 [Link](5,n2);//quinto ? km
145
146 int resultado=[Link]();
147
Nuevo 148 if(resultado==1){
125 private void jButton1ActionPerformed([Link] evt) { 149 [Link](this,"Alta realizada");
126 try{ 150 }
127 //cargar el driver 151 else{
128 [Link]("[Link]"); 152 [Link](this,"Alta no realizada");
129 //creo la conexion a la base de datos 153 }
130 Connection conexion=[Link]( 154 [Link](); //cerramos la conexión
131 "jdbc:mysql://localhost:3306/bdtaller","root","root"); 155 }
132 //Creamos una consulta 156 catch (Exception e){
133 PreparedStatement sql= [Link]( 157 [Link](e);
134 "insert into coches (matricula,marca,modelo,cv,km) " 158 }
135 + "values(?,?,?,?,?)"); 159 }
136 160
161 private void jButton2ActionPerformed([Link] evt) {
162 [Link]();
163 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 114


Eliminar
91 [Link](1,[Link]());//primer ? matricula
92
93 int resultado=[Link]();
94
95 if(resultado==1){
96 [Link](this,"Borrado realizado");
97 }
Eliminar 98 else{
80 private void jButton1ActionPerformed([Link] evt) { 99 [Link](this,"Borrado no realizado");
81 try{ 100 }
82 //cargar el driver 101 [Link]();//cerramos la conexión
83 [Link]("[Link]"); 102 }
84 //creo la conexion a la base de datos 103 catch (Exception e){
85 Connection conexion=[Link]( 104 [Link](e);
86 "jdbc:mysql://localhost:3306/bdtaller","root","root"); 105 }
87 //Creamos una consulta 106 }
88 PreparedStatement sql= [Link] 107
89 ("delete from coches where matricula=?"); 108 private void jButton2ActionPerformed([Link] evt) {
90 109 [Link]();
110 }

Buscar
136 //Creamos una consulta
137 PreparedStatement sql= [Link](
138 "select * from coches where matricula=?" );
139 [Link](1,[Link]());//primer ? matricula
140 //ejecutamos la consulta
141 ResultSet rs= [Link]();
142
143 if([Link]()){
144 [Link]([Link]("marca"));
145 [Link]([Link]("modelo"));
Buscar 146 [Link]([Link]("cv"));
125 private void jButton2ActionPerformed([Link] evt) { 147 [Link]([Link]("km"));
126 [Link](); 148 }
127 } 149 else{
128 150 [Link]([Link]("marca"));
129 private void BuscarActionPerformed([Link] evt) { 151 }
130 try{ 152 [Link]();//cerramos la conexión
131 //cargar el driver 153 }
132 [Link]("[Link]"); 154 catch (Exception e){
133 //creo la conexion a la base de datos 155 [Link](this,e);
134 Connection conexion=[Link]( 156 }
135 "jdbc:mysql://localhost:3306/bdtaller","root","root"); 157 }

Listado
90 ResultSet rs= [Link]();
91
92 DefaultTableModel modelo=new DefaultTableModel();
93
94 [Link]("Matrícula");
95 [Link]("Marca");
96 [Link]("Modelo");
97 [Link]("cv");
98 [Link]("km");
99
100 while([Link]()){
101 Object[]fila=new Object[5];
102
Listado 103 for (int i=0;i<5;i++){
75 private void jButton1ActionPerformed([Link] evt) { 104 fila[i]=[Link](i+1);
76 [Link](); 105 }
77 } 106 [Link](fila);
78 107 }
79 private void formWindowActivated([Link] evt) { 108 [Link](modelo);
80 try{ 109 [Link]();//cerramos la conexión
81 //cargar el driver 110 }
82 [Link]("[Link]"); 111 catch (Exception e){
83 //creo la conexion a la base de datos 112 [Link](e);
84 Connection conexion=[Link]( 113 }
85 "jdbc:mysql://localhost:3306/bdtaller","root","root"); 114 }
86 //Creamos la consulta
87 PreparedStatement sql= [Link](
88 "select * from coches" );
89

MAIN Ventana
1 /* 171 //actualizo la caja total
2 -- 172 double acum=0;
3 */ 173 //recorro hasta la ultima fila
4 package datos11; 174 for(int i=0;i<[Link]();i++){
5 175 double t=[Link]([Link](i,4).toString());
6 public class Datos11 { 176 acum=acum+t;//acumulo los resultados
7 177 [Link]([Link](acum));
8 public static void main(String[] args) { 178 }
9 Ventana v=new Ventana(); 179 }
10 [Link]("factura"); 180
11 [Link](true); 181 private void guardarActionPerformed([Link] evt) {
12 } 182 try{
13 } 183 //cargar el driver

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 115


184 [Link]("[Link]");
185 //creo la conexion a la base de datos
186 Connection conexion=[Link](
187 "jdbc:mysql://localhost:3306/BDfacturas","root","root");
188 //creamos la consulta
189 PreparedStatement sql=[Link](
190 "insert into factura (numerofactura,fecha,cliente) values(?,?,?)");
191 //meto los valores
192 [Link](1,[Link]([Link]()));//primer ? numero
193 [Link](2,[Link]());//primer ? fecha
194 [Link](3,[Link]());//segundo ? cliente
195
Ventana 196 //devuelve el numero de filas actualizadas
197 int resultado=[Link]();
15 public class Ventana extends [Link] {
198
16
199 if(resultado==1){
17 public Ventana() {
200 //guardo las lineas
18 initComponents();
201 for(int i=0;i<[Link]();i++){
19 //muestro la fecha actual
202 sql=[Link](
20 LocalDate hoy=[Link]();
203 //numerofactura,articulo,descripcion,precio,uds
21 [Link]([Link]());
204 "insert into lineasfactura values(0,?,?,?,?,?)");
22 }
205 [Link](1,[Link]([Link]()));
155 private void nuevoActionPerformed([Link] evt) {
206 [Link](2,[Link](i,0).toString());
156 DefaultTableModel temp=(DefaultTableModel) [Link]();
207 [Link](3,[Link](i,1).toString());
157 //creo array vacio con valores de las columnas
208 [Link](4,[Link]([Link](i,2).toString()));
158 Object nuevo[]={"","",0,0,0};
209 [Link](5,[Link]([Link](i,3).toString()));
159 [Link](nuevo);
210
160 }
161 211 [Link]();//ejcuta la actualizacion
162 private void tablaMouseClicked([Link] evt) { 212 }
163 //que fila he seleccionado 213 [Link](this,"guardado");
164 int filaselecionada=[Link](); 214 }
165 //objtengo el precio y las unidades 215 else{
166 double precio=[Link]([Link](filaselecionada, 2).toString()); 216 [Link](this,"no guardado");
167 int uds=[Link]([Link](filaselecionada, 3).toString()); 217 }
168 //calculo la columna total 218 [Link]();//cierro la conexion
169 [Link](precio*uds,filaselecionada,4); 219 }
220 catch(Exception e){
170
221 [Link](this,e);
222 }
223 }

1.-Imágenes en BD.
1.1.-Almacenar la ruta física: externa a la base de datos. Si me llevo la BD debo llevar las imágenes. No ocupan
espacio en la base de datos.

Id foto
1 C:/[Link]
2 C:/[Link]

1.2.-Almacenar la imagen: interna en la base de datos. Se guarda en bytes. Mysql usa el formato Blop. Las imágenes
se almacenan en la BD de Mysql y ocupan espacio.

Id foto
1 010011011001
2 100110110010

MAIN Ventana
1 /* 170 //meto los valores
2 -- 171 [Link](1,[Link]());//primer ? metes nombre
3 */ 172 //guardo la imagen
4 package datos12; 173 File file=new File([Link]());
5 174 FileInputStream fis=new FileInputStream(file);//lee el fichero
6 public class Datos12 { 175 //en la segunda ?, guardas el fichero entero
7 176 [Link](2,fis,(int)[Link]());
8 public static void main(String[] args) { 177
9 Ventana v=new Ventana(); 178 //devuelve el numero de filas actualizadas
10 [Link]("imagen frutas"); 179 int resultado=[Link]();
11 [Link](true); 180
12 } 181 if(resultado==1){
13 } 182 [Link](this,"guardado");
183 }
184 else{
185 [Link](this,"no guardado");
186 }
187 [Link]();//cierro la conexion
188 }
189 catch(Exception e){
190 [Link](this,e);
191 }
192 }
193
194 private void mostrarActionPerformed([Link] evt) {
195 try{

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 116


Ventana 196 //cargar el driver
145 private void seleccionarActionPerformed([Link] evt) { 197 [Link]("[Link]");
146 //cuadro dialogo abrir archivo 198 //creo la conexion a la base de datos
147 JFileChooser fc=new JFileChooser(); 199 Connection conexion=[Link](
148 int respuesta=[Link](this); 200 "jdbc:mysql://localhost:3306/BDfotos","root","root");
149 //comprobar si se ha pulsado aceptar 201
150 if(respuesta==JFileChooser.APPROVE_OPTION){ 202 //aqui pongo el codigo a insertar
151 //crea un objeto file de archivo seleccionado 203 PreparedStatement sql=[Link](
152 //en ruta se mete la ruta del archivo 204 "select * from frutas where nombre=?");
153 File ficheroelegido=[Link](); 205 //meto los valores
154 [Link]([Link]()); 206 [Link](1,[Link]());//primer ? metes nombre
155 } 207
156 } 208 ResultSet resultado=[Link]();
157 209
158 private void guardarActionPerformed([Link] evt) { 210 if([Link]()){
159 try{ 211 Blob blob=[Link]("imagen");
160 //cargar el driver 212 //convierto el blob en un array de bytes
161 [Link]("[Link]"); 213 byte[]data=[Link](1,(int)[Link]());
162 //creo la conexion a la base de datos 214 //pasamos datos a imagen
163 Connection conexion=[Link]( 215 ImageIcon image=new ImageIcon(data);
164 "jdbc:mysql://localhost:3306/BDfotos","root","root"); 216 [Link](image);
168 //calculo la columna total 217 }
169 [Link](precio*uds,filaselecionada,4); 218 else{
170 219 [Link](this,"no guardado");
165 220 }
166 //aqui pongo el codigo a insertar 221 [Link]();//cierro la conexion
167 PreparedStatement sql=[Link]( 222 }
168 //autonumerico, nombre, ruta imagen 223 catch(Exception e){
169 "insert into frutas values (0,?,?)"); 224 [Link](this,e);
225 }
226 }

MAIN Ventana
1 /* 254 //guardo la imagen
2 -- 255 File file=new File([Link]());
3 */ 256 FileInputStream fis=new FileInputStream(file);//lee el fichero
4 package datos13; 257 //en la segunda ?, guardas el fichero entero
5 258 [Link](3,fis,(int)[Link]());
6 public class Datos13 { 259 [Link]("");[Link]("");[Link]("");
7 260
8 public static void main(String[] args) { 261 //devuelve el numero de filas actualizadas
9 Ventana v=new Ventana(); 262 int resultado=[Link]();
10 [Link]("imagen personas"); 263
11 [Link](true); 264 if(resultado==1){
12 } 265 [Link](this,"guardado");
13 } 266 }
267 else{
268 [Link](this,"no guardado");
269 }
270 [Link]();//cierro la conexion
271 }
272 catch(Exception e){
273 [Link](this,e);
274 }
275 }
276
277 private void buscarActionPerformed([Link] evt) {
278 try{
279 //cargar el driver
280 [Link]("[Link]");
281 //creo la conexion a la base de datos
Ventana 282 Connection conexion=[Link](
226 private void seleccionarActionPerformed([Link] evt) { 283 "jdbc:mysql://localhost:3306/BDpersonas","root","root");
227 //cuadro dialogo abrir archivo 284
228 JFileChooser fc=new JFileChooser(); 285 //aqui pongo el codigo a insertar
229 int respuesta=[Link](this); 286 PreparedStatement sql=[Link](
230 //comprobar si se ha pulsado aceptar 287 "select * from personas where dni=?");
231 if(respuesta==JFileChooser.APPROVE_OPTION){ 288 //meto los valores
232 //crea un objeto file de archivo seleccionado 289 [Link](1,[Link]());//primer ? metes nombre
233 //en ruta se mete la ruta del archivo 290
234 File ficheroelegido=[Link](); 291 ResultSet resultado=[Link]();
235 [Link]([Link]()); 292
236 } 293 if([Link]()){
237 } 294 [Link]([Link]("nombre"));
238 295 Blob blob=[Link]("imagen");
239 private void guardarActionPerformed([Link] evt) { 296 //convierto el blob en un array de bytes
240 try{ 297 byte[]data=[Link](1,(int)[Link]());
241 //cargar el driver 298 //pasamos datos a imagen
242 [Link]("[Link]"); 299 ImageIcon image=new ImageIcon(data);
243 //creo la conexion a la base de datos 300 [Link](image);
244 Connection conexion=[Link]( 301 }
245 "jdbc:mysql://localhost:3306/BDpersonas","root","root"); 302 else{
246 303 [Link](this,"no guardado");
247 //aqui pongo el codigo a insertar 304 }
248 PreparedStatement sql=[Link]( 305 [Link]();//cierro la conexion
249 //dni, nombre, ruta imagen 306 }
250 "insert into personas values (?,?,?)"); 307 catch(Exception e){
251 //meto los valores 308 [Link](this,e);
252 [Link](1,[Link]());//primer ? dni 309 }
253 [Link](2,[Link]());//primer ? nombre 310 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 117


MAIN Ventana método 2
4 package repaso01; 83 private void cambioActionPerformed([Link] evt) {
5 84
6 public class Repaso01 { 85 String c=[Link]();
7 86 //divido la parte entera de la decimal
8 public static void main(String[] args) { 87 String v[]=[Link](",");
9 Ventana v=new Ventana(); 88
10 [Link]("convertir"); 89 int euros=[Link](v[0]);
11 [Link](true); 90 int centimos=[Link](v[1]);
12 } 91
13 } 92 int p=euros/2;
93 [Link](p+" de 2€ \n");
94 euros=euros%2;
95 [Link](euros+" de 1€ \n");
96
97 p=centimos/50;
98 [Link](p+" de 50 centimos \n");
99 centimos=centimos%50;
100
101 p=centimos/20;
102 [Link](p+" de 20 centimos \n");
103 centimos=centimos%20;
104
Ventana método 1 105 p=centimos/10;
83 private void cambioActionPerformed([Link] evt) { 106 [Link](p+" de 10 centimos \n");
84 107 centimos=centimos%10;
85 String c=[Link](); 108
86 //divido la parte entera de la decimal 109 p=centimos/5;
87 String v[]=[Link](","); 110 [Link](p+" de 5 centimos \n");
88 111 centimos=centimos%5;
89 int euros=[Link](v[0]); 112
90 int centimos=[Link](v[1]); 113 p=centimos/2;
91 //divido euros entre dos 114 [Link](p+" de 2 centimos \n");
92 int p=euros/2; 115 centimos=centimos%2;
93 [Link](p+" de 2€ \n"); 116
94 euros=euros%2; 117 [Link](centimos+" de 1 centimo \n");
95 [Link](euros+" de 1€ \n"); 118
96 119
97 int monedas[]={50,20,10,5,2}; 120 }
98 for(int i=0;i<[Link];i++){
99 p=centimos/monedas[i];
100 [Link](p+" de "+monedas[i]+" centimos \n");
101 centimos=centimos%monedas[i];
102 }
103 [Link](centimos+" de 1 centimo \n");
104 }

MAIN UML Bombilla UML Instalacion


1 /* -encendida:boolean -v ArrayList<Bombilla>
2 queremos modelar el sistema de iluminacion de una casa
3 que dispondra de una gran cantidad de bombillas, de forma -general:boolean
4 que cada bombilla se puede encender o apagar individualmente. +Bombilla(boolean) +add(Bombilla)
5 Para ello haremos una clase bombilla con un atributo que
6 indique si esta encendida o apagada, asi como un metodo +CambiarEstado(int,boolean):Bombilla
7 que nos diga el estado de la bombilla. 20 Bombilla b1=new Bombilla(true);
8 Cada objeto bombilla se enciende y se apaga individualemnte; 21 Bombilla b2=new Bombilla(false);
9 pero solo se pueden manipular si la luz general de la casa 22 Bombilla b3=new Bombilla(true);
10 esta activa. 23
11 diseñar las clases necesarias para solucionar el problema. 24 [Link](b1);
12 */ 25 [Link](b2);
13 package repaso03; 26 [Link](b3);
14 27
15 public class Repaso03 { 28 [Link](i);
16 29 }
17 public static void main(String[] args) { 30 }
18 Instalacion i=new Instalacion(true);
19

CLASE Instalacion CLASE Bombilla


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package repaso03; 4 package repaso03;
5 5
6 import [Link]; 6 public class Bombilla{
7 7
8 public class Instalacion{ 8 private boolean encendida;
9 //guardo las bombillas en un arrayList 9
10 private ArrayList<Bombilla> v= new ArrayList<Bombilla>(); 10 public Bombilla(boolean encendida) {
11 private boolean general; 11 [Link] = encendida;
12 12 }
13 public Instalacion(boolean general) { 13 public boolean isEncendida() {
14 [Link] = general; 14 return encendida;
15 } 15 }
16 public void add(Bombilla b){ 16 public void setEncendida(boolean encendida) {
17 [Link](b); 17 [Link] = encendida;
18 } 18 }
19 public void cambiarEstado(int posicion, boolean estado){ 19 @Override
20 if([Link]==true){ 20 public String toString() {
21 [Link](posicion).setEncendida(estado); 21 return "Bombilla{" + "encendida=" + encendida + '}';
22 } 22 }
23 } 23 }
24 @Override
25 public String toString() {
26 return "Instalacion{" + "v=" + v +
27 ", general=" + general + '}';
28 }
29 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 118


MAIN UML Persona UML Profesor
1 /* -nombre:String -especialidad:string
2 --
3 */ -apellidos:String -sueldo:double
4 package repaso02; +Persona(string,string)
5 +Profesor(string,double,string,string)
6 import [Link]; +toString():String +toString():String
7
8 public class Repaso02 {
UML ProfesorTitular UML ProfesorInterino
9 -anyocomienzo:int -inicio:LocalDate
10 public static void main(String[] args) {
11
-fin:LocalDate
12 LocalDate fechainicio=[Link](); +ProfesorTitular(int,string,double) +ProfesorInterino(Localdate,LocalDate,string,
13 LocalDate fechafin=[Link](2016,8,25); +toString():String doublé,string,string)
14
15 Persona p=new Persona("luis","fernandez");
+toString():String
16 24 [Link](p);
17 Profesor p1=new Profesor( 25 [Link](p1);
18 "matematicas",1000,"david","fernandez"); 26 [Link](p2);
19 ProfesorInterino p2=new ProfesorInterino( 27 [Link](p3);
20 fechainicio,fechafin,"lengua",1200,"bea","fernandez"); 28 }
21 ProfesorTitular p3=new ProfesorTitular( 29 }
22 2010,"lengua",1100,"ana","fernandez");
23

CLASE Persona CLASE Profesor


4 package repaso02; 4 package repaso02;
5 5
6 public class Persona { 6 public class Profesor extends Persona{
7 private String nombre; 7 private String especialidad;
8 private String apellido; 8 private double sueldo;
9 9
10 public Persona(String nombre, String apellido) { 10 public Profesor(String especialidad, double sueldo,
11 [Link] = nombre; 11 String nombre, String apellido) {
12 [Link] = apellido; 12 super(nombre, apellido);
13 } 13 [Link] = especialidad;
14 public String getNombre() { 14 [Link] = sueldo;
15 return nombre; 15 }
16 } 16 public String getEspecialidad() {
17 public void setNombre(String nombre) { 17 return especialidad;
18 [Link] = nombre; 18 }
19 } 19 public void setEspecialidad(String especialidad) {
20 public String getApellido() { 20 [Link] = especialidad;
21 return apellido; 21 }
22 } 22 public Double getSueldo() {
23 public void setApellido(String apellido) { 23 return sueldo;
24 [Link] = apellido; 24 }
25 } 25 public void setSueldo(Double sueldo) {
26 @Override 26 [Link] = sueldo;
27 public String toString() { 27 }
28 return "Persona{" + "nombre=" 28 @Override
29 + nombre + ", apellido=" + apellido + '}'; 29 //modifico..escribo [Link] para que aparezca
30 } 30 public String toString() {
31 } 31 return "Profesor{"+[Link]() + "especialidad="
32 + especialidad + ", sueldo=" + sueldo + '}';
33 }
34 }

CLASE ProfesorTitular CLASE ProfesorInterino


4 package repaso02; 4 package repaso02;
5 5
6 public class ProfesorTitular extends Profesor{ 6 import [Link];
7 private int anyoComienzo; 7
8 8 public class ProfesorInterino extends Profesor{
9 public ProfesorTitular(int anyoComienzo, String especialidad, 9 private LocalDate inicio;
10 double sueldo, String nombre, String apellido) { 10 private LocalDate fin;
11 super(especialidad, sueldo, nombre, apellido); 11
12 [Link] = anyoComienzo; 12 public ProfesorInterino(LocalDate inicio, LocalDate fin,
13 } 13 String especialidad, double sueldo,
14 public int getAnyoComienzo() { 14 String nombre, String apellido) {
15 return anyoComienzo; 15 super(especialidad, sueldo, nombre, apellido);
16 } 16 [Link] = inicio;
17 public void setAnyoComienzo(int anyoComienzo) { 17 [Link] = fin;
18 [Link] = anyoComienzo; 18 }
19 } 19 public LocalDate getInicio() {
20 @Override 20 return inicio;
21 //modifico..escribo [Link] para que aparezca 21 }
22 public String toString() { 22 public void setInicio(LocalDate inicio) {
23 return "ProfesorTitular{"+[Link]() + 23 [Link] = inicio;
24 "anyoComienzo=" + anyoComienzo + '}'; 24 }
25 } 25 public LocalDate getFin() {
26 } 26 return fin;
27 }
28 public void setFin(LocalDate fin) {
29 [Link] = fin;
30 }
31 @Override
32 //modifico..escribo [Link] para que aparezca
33 public String toString() {
34 return "ProfesorInterino{"+[Link]() + "inicio="
35 + inicio + ", fin=" + fin + '}';
36 }
37 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 119


MAIN UML Analisis UMLMuestra
1 /* -v ArrayList<Conductor> -dia:LocalDate
2 diseñar una clase que nos permita almacenar la informacion
3 relativa a unas muestras de alcoholemia recogidas en un -hora:LocalTime
4 anañisis preventivo de la DGT de forma que: -codpuesto:string
5 para cada conductor podamos almacenar su DNI y una
6 coleccion de las muestras que se han tomado durante el -matricula:string
7 estudio. -tasa:double
8 de cada muestra tendremos dia y hora, codigo del
9 puesto de control, matricula del vehiculo, tasa del +addConductor(Conductor) +muestra(LocalDate,LocalTime,string,
10 alcohol espirado en aire (entre 0 y 0.25) string,doublé) throws Exception
11 */
+toString():String
12 package repaso04; +toString():String
13 UML Conductor
14 import [Link];
15 import [Link]; -dni:string
16 -v ArrayList<Muestra>
17 public class Repaso04 {
18 +add(Muestra)
19 public static void main(String[] args) { +Conductor(string)
20
21 LocalDate fecha1=[Link](2016,4,3); +toString():String
22 LocalTime hora1=[Link](12,56); 34 Analisis a=new Analisis();
23 LocalDate fecha2=[Link](2016,4,13); 35 [Link](c);
24 LocalTime hora2=[Link](2,15); 36
25 37 [Link](a);
26 try{ 38 }
27 Muestra m1=new Muestra(fecha1,hora1,"P90","1111ABC",0); 39 catch (Exception e){
28 Muestra m2=new Muestra(fecha2,hora2,"P26","1111ABC",0.20); 40 [Link](e);
29 41 }
30 Conductor c=new Conductor("1234567A"); 42 }
31 [Link](m1); 43 }
32 [Link](m2);
33

CLASE Analisis CLASE Conductor


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package repaso04; 4 package repaso04;
5 5
6 import [Link]; 6 import [Link];
7 7
8 public class Analisis { 8 public class Conductor {
9 private ArrayList<Conductor> v= new ArrayList<Conductor>(); 9
10 10 private String dni;
11 public Analisis() { 11 //array para almecenar muestras
12 } 12 private ArrayList<Muestra> v= new ArrayList<Muestra>();
13 public void addConductor(Conductor c){ 13
14 [Link](c); 14 public Conductor(String dni) {
15 } 15 [Link] = dni;
16 public ArrayList<Conductor> getV() { 16 }
17 return v; 17 public void addMuestra(Muestra m){
18 } 18 [Link](m);
19 public void setV(ArrayList<Conductor> v) { 19 }
20 this.v = v; 20
21 } 21 @Override
22 @Override 22 public String toString() {
23 public String toString() { 23 return "Conductor{" + "dni=" + dni + ", v=" + v + '}';
24 return "Analisis{" + "v=" + v + '}'; 24 }
25 } 25 }
26 }

CLASE Muestra
4 package repaso04; 38 return hora;
5 39 }
6 import [Link].*; 40 public void setHora(LocalTime hora) {
7 41 [Link] = hora;
8 public class Muestra { 42 }
9 43 public String getCodigopuesto() {
10 private LocalDate fecha; 44 return codigopuesto;
11 private LocalTime hora; 45 }
12 private String codigopuesto; 46 public void setCodigopuesto(String codigopuesto) {
13 private String matricula; 47 [Link] = codigopuesto;
14 private double tasa; 48 }
15 49 public String getMatricula() {
16 public Muestra(LocalDate fecha, LocalTime hora, 50 return matricula;
17 String codigopuesto, String matricula, 51 }
18 double tasa) throws Exception { 52 public void setMatricula(String matricula) {
19 //controlo el fallo de throws 53 [Link] = matricula;
20 if(tasa<0 || tasa>2.5){ 54 }
21 throw new Exception("tasa no permitida"); 55 public double getTasa() {
22 } 56 return tasa;
23 else{ 57 }
24 [Link] = fecha; 58 public void setTasa(double tasa) throws Exception{
25 [Link] = hora; 59 if(tasa<0 || tasa>2.5){
26 [Link] = codigopuesto; 60 throw new Exception("tasa no permitida");
27 [Link] = matricula; 61 }
28 [Link] = tasa; 62 else{
29 } 63 [Link] = tasa;
30 } 64 }
31 public LocalDate getFecha() { 65 }
32 return fecha; 66 @Override
33 } 67 public String toString() {
34 public void setFecha(LocalDate fecha) { 68 return "Muestra{" + "fecha=" + fecha + ", "
35 [Link] = fecha; 69 + "hora=" + hora + ", codigopuesto=" + codigopuesto + ", "
36 } 70 + "matricula=" + matricula + ", tasa=" + tasa + '}';
37 public LocalTime getHora() { 71 }
72 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 120


MAIN UML Punto UML Grafica
1 /* -x:double -puntos:ArrayList<Puntos>
2 crear array de punto generador por y=x*3+1
3 mostrarlos, mostrar la distancia entre ellos, el tamaño -y:double
4 y la posicion de un Punto +Punto(double,double) +Grafica()
5 */
6 package repaso06; +toString():String +addPunto(Punto)
7
+getDistancia(Punto):double +get(int):Punto
8 public class Repaso06 { +size():int
9
22 for(int i=0;i<[Link]()-1;i++){
10 public static void main(String[] args) {
23 //accedo a las posiciones del array
11
24 [Link]([Link](i));
12 int x,y;
25 [Link](" - ");
13 Grafica g=new Grafica();
26 [Link]([Link](i+1));
14 //valores de x son de 0 a 9 y los
27 [Link](" -> ");
15 //de y los voy calculando
28 //accedo a las posiciones del array y opero con ellas
16 for(x=0;x<10;x++){
29 //con el metodo
17 y=x*3+1;
30 [Link]([Link](i).getDistancia([Link](i+1)));
18 Punto p=new Punto(x,y);
31 }
19 [Link](p);
32 [Link]("el tamaño del array es: "+[Link]());
20 [Link](p);
33 [Link]("posicion del punto: "+[Link](2));
21 }
34 }
35 }

CLASE Punto CLASE Grafica


1 /* 1 /*
2 -- 2 --
3 */ 3 */
4 package repaso06; 4 package repaso06;
5 5
6 public class Punto { 6 import [Link];
7 7
8 private int x; 8 public class Grafica {
9 private int y; 9 //creo array para guardar los puntos
10 10 private ArrayList<Punto> puntos= new ArrayList<Punto>();
11 public Punto(int x, int y) { 11
12 this.x = x; 12 public Grafica(){
13 this.y = y; 13 }
14 } 14 //paso un punto y lo meto en array
15 public int getX() { 15 public void addPunto(Punto p){
16 return x; 16 [Link](p);
17 } 17 }
18 public void setX(int x) { 18 //me pasan punto y busco posicion en array
19 this.x = x; 19 public Punto get(int posicion){
20 } 20 return [Link](posicion);
21 public int getY() { 21 }
22 return y; 22 public int size(){
23 } 23 return [Link]();
24 public void setY(int y) { 24 }
25 this.y = y; 25 }
26 }
27 @Override
28 public String toString() {
29 return "Punto{" + "x=" + x + ", y=" + y + '}';
30 }
31 public double getDistancia(Punto p){
32 //resto la x de aqui y la x que me pasan
33 //resto la y de aqui y la y que me pasan
34 return [Link]([Link]([Link](),2)
35 +[Link]([Link](),2));
36 }
37 }

1 /* 35 try{
2 crear programa que crea clases. 36 FileWriter fichero=new FileWriter(clase+".java");//abro archivo
3 */ 37 PrintWriter pw=new PrintWriter(fichero);
4 package repaso08; 38
5 39 [Link]("public class "+clase+"{");
6 import [Link]; 40 //bucle para crear atributos
7 import [Link]; 41 //con recorrer un array vale
8 import [Link]; 42 for(int i=0;i<[Link]();i++){
9 import [Link]; 43 [Link](" private "+[Link](i)+" "+[Link](i)+";");
10 44 }
11 public class Repaso08 { 45 [Link]("}");
12 46 [Link]();
13 public static void main(String[] args) { 47 [Link]("clase creada");
14 Scanner teclado=new Scanner([Link]); 48 }
15 49 catch(Exception e){
16 [Link]("nombre de la clase: "); 50 [Link](e);
17 String clase=[Link](); 51 }
18 //creo array para guardar los nombres 52 }
19 ArrayList<String> atributos=new ArrayList<String>(); 53 }
20 ArrayList<String> tipo=new ArrayList<String>();
21
22 String mas="si";
23 while([Link]().equals("si")){
24 [Link]("nombre de atributo: ");
25 String atributo=[Link]();
26 [Link](atributo);
27
28 [Link]("tipo de atributo: ");
29 String tipos=[Link]();
30 [Link](tipos);
31
32 [Link]("mas? si/no ");
33 mas=[Link]();
34 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 121


1 /* 22 //aqui pongo el codigo de la consulta
2 mostrar total clientes 23 PreparedStatement sql=[Link](
3 */ 24 "select count(*) from clientes");
4 package repaso09_1; 25
5 26 //se guarda el resultado en rs
6 import [Link]; 27 ResultSet rs=[Link]();
7 import [Link]; 28
8 import [Link]; 29 if ([Link]()){//si encuentras sacas datos
9 import [Link]; 30 //al ser un count saco la columna 1
10 31 [Link]([Link](1));
11 public class Repaso09_1 { 32 }
12 33 else{
13 public static void main(String[] args) { 34 [Link]("no hay resultados");
14 try{ 35 }
15 //cargar el driver 36 [Link]();//cierro la conexion
16 [Link]("[Link]"); 37 }
17 //creo la conexion a la base de datos 38 catch(Exception e){
18 Connection conexion=[Link]( 39 [Link](e);
19 "jdbc:mysql://localhost:3306/BDejemplo2","root","root"); 40 }
20 41 }
21 [Link]("contectados a la BD"); 42 }

1 /* 22 //aqui pongo el codigo de la consulta


2 total clientes de mexico 23 PreparedStatement sql=[Link](""
3 */ 24 + "select count(*) from clientes where pais='Mexico'");
4 package repaso09_2; 25
5 26 //se guarda el resultado en rs
6 import [Link]; 27 ResultSet rs=[Link]();
7 import [Link]; 28
8 import [Link]; 29 if ([Link]()){//si encuentras sacas datos
9 import [Link]; 30 //al ser un count saco la columna 1
10 31 [Link]([Link](1));
11 public class Repaso09_2 { 32 }
12 33 else{
13 public static void main(String[] args) { 34 [Link]("no hay resultados");
14 try{ 35 }
15 //cargar el driver 36 [Link]();//cierro la conexion
16 [Link]("[Link]"); 37 }
17 //creo la conexion a la base de datos 38 catch(Exception e){
18 Connection conexion=[Link]( 39 [Link](e);
19 "jdbc:mysql://localhost:3306/BDejemplo2","root","root"); 40 }
20 41 }
21 [Link]("contectados a la BD"); 42 }

1 /* 27
2 pedir por teclado precio min y max y mostrar 28 int min=[Link]();
3 articulos comprendidos entre ellos. 29 [Link]("introduzca un valor maximo: ");
4 */ 30 int max=[Link]();
5 package repaso09_3; 31 //aqui pongo el codigo de la consulta
6 32 PreparedStatement sql=[Link](
7 import [Link]; 33 "select nombre from productos where precio between ? and ?");
8 import [Link]; 34 [Link](1,min);
9 import [Link]; 35 [Link](2,max);
10 import [Link]; 36
11 import [Link]; 37 //se guarda el resultado en rs
12 38 ResultSet rs=[Link]();
13 public class Repaso09_3 { 39 //bucle para sacarlos todos
14 40 while([Link]()){
15 public static void main(String[] args) { 41 [Link]([Link]("nombre"));
16 try{ 42 }
17 //cargar el driver 43 [Link]();//cierro la conexion
18 [Link]("[Link]"); 44 }
19 //creo la conexion a la base de datos 45 catch(Exception e){
20 Connection conexion=[Link]( 46 [Link](e);
21 "jdbc:mysql://localhost:3306/BDejemplo2","root","root"); 47 }
22 48 }
23 [Link]("contectados a la BD"); 49 }
24
25 Scanner teclado=new Scanner([Link]);
26 [Link]("introduzca un valor minimo: ");

1 /* 25 //cambio ? por los datos


2 insertar nuevo producto 26 [Link](1,100);
3 */ 27 [Link](2,"Pimientos");
4 package repaso09_4; 28 [Link](3,7);
5 29 [Link](4,"bote 100g");
6 import [Link]; 30 [Link](5,6);
7 import [Link]; 31
8 import [Link]; 32 //se guarda el resultado en rs
9 33 //cuantas filas han cambiado
10 public class Repaso09_4 { 34 int resultado=[Link]();
11 35 //si encuentras filas insertadas...
12 public static void main(String[] args) { 36 if (resultado==1){
13 try{ 37 [Link]("alta realizada");
14 //cargar el driver 38 }
15 [Link]("[Link]"); 39 else{
16 //creo la conexion a la base de datos 40 [Link]("alta no realizada");
17 Connection conexion=[Link]( 41 }
18 "jdbc:mysql://localhost:3306/BDejemplo2","root","root"); 42 [Link]();//cierro la conexion
19 43 }
20 [Link]("contectados a la BD"); 44 catch(Exception e){
21 //creo consulta 45 [Link](e);
22 PreparedStatement sql=[Link]("insert into productos " 46 }
23 + "(idproducto,nombre,idproveedor,cantidadporunidad,precio) " 47 }
24 + "values(?,?,?,?,?)"); 48 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 122


1 /* 25 PreparedStatement sql=[Link](
2 mostrar la compañia de los clientes de 10 en 10. 26 "select * from clientes");
3 */ 27
4 package repaso09_5; 28 //se guarda el resultado en rs
5 29 ResultSet rs=[Link]();
6 import [Link]; 30 //bucle para sacarlos de 10 en 10
7 import [Link]; 31 int contador=0;
8 import [Link]; 32 while([Link]()){//bucle para sacar los datos
9 import [Link]; 33 [Link]([Link]("companya"));
10 import [Link]; 34 contador++;
11 35
12 public class Repaso09_5 { 36 if(contador==10){
13 37 contador=0;
14 public static void main(String[] args) { 38 [Link]("--------------------");
15 try{ 39 [Link]("pulse para continuar");
16 Scanner teclado=new Scanner([Link]); 40 String temp=[Link]();
17 //cargar el driver 41 }
18 [Link]("[Link]"); 42 }
19 //creo la conexion a la base de datos 43 }
20 Connection conexion=[Link]( 44 catch(Exception e){
21 "jdbc:mysql://localhost:3306/BDejemplo2","root","root"); 45 [Link](e);
22 46 }
23 [Link]("contectados a la BD"); 47 }
24 //aqui pongo el codigo de la consulta 48 }

PROGRAMACIÓN - Técnico Superior en Desarrollo de Aplicaciones Web 123

También podría gustarte