tema02

13
Sintaxis básica del lenguaje Java El lenguaje Java — Tema 2 — Sintaxis básica Curso de Java Curso de Java Tema 2 – Sintaxis básica - 1 Luis Hernández Yáñez Carlos Cervigón Rückauer Índice Un par de cosas sobre las clases ... 3 Comentarios ... 4 Identificadores ... 8 Palabras reservadas ... 9 Separadores ... 10 Tipos de datos numéricos ... 11 Tipos de datos no numéricos ... 12 Literales ... 13 Variables ... 14 Constantes de clase ... 16 Bloques y ámbito de los identificadores ... 17 Operadores ... 18 Entrada/salida básica ... 21 Ejercicios ... 22 Una clase muy útil para números: Math ... 24 Sintaxis básica del lenguaje Java . . . Curso de Java Tema 2 – Sintaxis básica - 2 Luis Hernández Yáñez Carlos Cervigón Rückauer Instrucciones de control de flujo ... 25 Selección condicional: bifurcación ... 26 Ejercicios ... 28 Selección condicional: ramificación múltiple ... 29 Bucles: la instrucción for ... 31 Ejercicios ... 34 Bucles: la instrucción while ... 35 Bucles: la instrucción do...while ... 36 break y continue ... 37 Ejercicios ... 38 Métodos ... 39 Ejercicios ... 43 Sobrecarga de métodos ... 44 Recursividad ... 45 Ejercicios ... 46 Ejercicio de refuerzo ... 47 Sintaxis básica del lenguaje Java Curso de Java Tema 2 – Sintaxis básica - 3 Luis Hernández Yáñez Carlos Cervigón Rückauer Un programa está compuesto por un conjunto de clases (al menos una). Las clases son los módulos del programa. Una clase consiste en unos datos (atributos) y unas funciones (métodos). Debe haber un método main() en una de las clases. Una plantilla para los primeros programas de prueba: // Programa.java public class Programa { // Declaraciones globales public static void main(String[] args) { // Declaraciones locales // Instrucciones } } Un par de cosas sobre las clases

Upload: faznet

Post on 12-Nov-2014

1.404 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Tema02

Sintaxis básica del lenguaje Java

El lenguaje Java — Tema 2 — Sintaxis básica

Curso de Java

Curso de Java Tema 2 – Sintaxis básica - 1Luis Hernández YáñezCarlos Cervigón Rückauer

Índice

Un par de cosas sobre las clases ... 3Comentarios ... 4Identificadores ... 8Palabras reservadas ... 9Separadores ... 10Tipos de datos numéricos ... 11Tipos de datos no numéricos ... 12Literales ... 13Variables ... 14Constantes de clase ... 16Bloques y ámbito de los identificadores ... 17Operadores ... 18Entrada/salida básica ... 21Ejercicios ... 22Una clase muy útil para números: Math ... 24

Sintaxis básica del lenguaje Java

. . .

Curso de Java Tema 2 – Sintaxis básica - 2Luis Hernández YáñezCarlos Cervigón Rückauer

Instrucciones de control de flujo ... 25Selección condicional: bifurcación ... 26Ejercicios ... 28Selección condicional: ramificación múltiple ... 29Bucles: la instrucción for ... 31Ejercicios ... 34Bucles: la instrucción while ... 35Bucles: la instrucción do...while ... 36break y continue ... 37Ejercicios ... 38Métodos ... 39Ejercicios ... 43Sobrecarga de métodos ... 44Recursividad ... 45Ejercicios ... 46Ejercicio de refuerzo ... 47

Sintaxis básica del lenguaje Java

Curso de Java Tema 2 – Sintaxis básica - 3Luis Hernández YáñezCarlos Cervigón Rückauer

Un programa está compuesto por un conjunto de clases(al menos una). Las clases son los módulos del programa.

Una clase consiste en unos datos (atributos) y unas funciones (métodos). Debe haber un método main() en una de las clases.

Una plantilla para los primeros programas de prueba:

// Programa.java

public class Programa {// Declaraciones globalespublic static void main(String[] args) {

// Declaraciones locales// Instrucciones

}}

Un par de cosas sobre las clases

Page 2: Tema02

Curso de Java Tema 2 – Sintaxis básica - 4Luis Hernández YáñezCarlos Cervigón Rückauer

Tres tipos de comentarios:

// De una sola línea

/* De una ómás líneas

*/

/** De documentación, de una o varias líneas.Justo antes del elemento que documenta(clase, método, etcétera)

*/

Los comentarios de documentación son utilizados por javadocpara generar documentación en formato HTML.Pueden llevar etiquetas.

Comentarios

Curso de Java Tema 2 – Sintaxis básica - 5Luis Hernández YáñezCarlos Cervigón Rückauer

Etiquetas para referencias:

@see <otra clase>

Etiquetas de documentación de clases:

@version <información sobre la versión>

@author <nombre autor>

Etiquetas de documentación de métodos:

@param <nombre argumento><descripción>

@return <descripción>

@exception <excepción

Comentarios: etiquetas para javadoc

Curso de Java Tema 2 – Sintaxis básica - 6Luis Hernández YáñezCarlos Cervigón Rückauer

Comentarios: ejemplo de uso de javadoc

Hola.java

// Hola.java

/** Primera clase de prueba@author Luis Hernández@version 1.0@see Adios

*/public class Hola {

/** Método principal@param args argumentos de línea de órdenes@return nada

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

System.out.println("Hola mundo");}

}

Curso de Java Tema 2 – Sintaxis básica - 7Luis Hernández YáñezCarlos Cervigón Rückauer

javadoc Hola.java

Hola.html

y otras páginas más.

Comentarios: resultado de javadoc

Page 3: Tema02

Curso de Java Tema 2 – Sintaxis básica - 8Luis Hernández YáñezCarlos Cervigón Rückauer

En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($).Los siguientes caracteres pueden ser letras o dígitos.

Convenios:

Nombre de clase: empieza por mayúscula..

Nombre de método o atributo: empieza por minúscula(quizá con un subrayado delante para los atributos).

Las constantes: todo en mayúsculas.

Identificadores formados por varias palabras: comienzo de cada nueva palabra en mayúsculas (dibujaRectangulo)

Identificadores

Java distingue entre mayúsculas y minúsculas

Curso de Java Tema 2 – Sintaxis básica - 9Luis Hernández YáñezCarlos Cervigón Rückauer

abstract continue for new switch

boolean default goto null synchronized

break do if package this

byte double implements private threadsafe

byvalue else import protected throw

case extends instanceof public transient

catch false int return true

char final interface short try

class finally long static void

const float native super while

Palabras reservadas

Curso de Java Tema 2 – Sintaxis básica - 10Luis Hernández YáñezCarlos Cervigón Rückauer

()Para delimitar listas de parámetros o de argumentos.Para modificar la precedencia en una expresión.Para delimitar condiciones.Para realizar conversiones de tipo (moldes o casting).

{}Para definir bloques de código.Para delimitar listas de valores iniciales de los vectores (arrays).

[]Para declarar vectores y referenciar elementos de los mismos.

; Para terminar instrucciones.

, Para separar identificadores en declaraciones.Para encadenar expresiones (operador coma).

. Para acceder a atributos de objetos u objetos globales de clases.Para pasar mensajes a objetos.Para acceder a un subpaquete de un paquete.

Separadores

Curso de Java Tema 2 – Sintaxis básica - 11Luis Hernández YáñezCarlos Cervigón Rückauer

Tipos de datos numéricos

Tipo

byteshortintlong

floatdouble

Tamaño

8 bits16 bits32 bits64 bits

32 bits64 bits

Valor mínimo

-128-32768-2147483648< -9 x 1018

+/- 3.4 x 1038 con 7 dígitos significativos+/- 1.7 x 10308 con 15 dígitos significativos

Valor máximo

127327672147483647> 9 x 1018

Promoción de tipos

Un tipo A es de mayor rango que un tipo B si A es superconjunto de B.Las variales de tipo B siempre se pueden asignar a las de tipo A

double > float > long > int > short > byte

Page 4: Tema02

Curso de Java Tema 2 – Sintaxis básica - 12Luis Hernández YáñezCarlos Cervigón Rückauer

boolean: true false

char: caracteres (16 bits)

Clases envolventes de tipos básicos:

Integer Long Float

Double Boolean Character

Permiten manipular los tipos primitivos como objetos

Tipos de datos no numéricos

Curso de Java Tema 2 – Sintaxis básica - 13Luis Hernández YáñezCarlos Cervigón Rückauer

Numéricos: como en otros lenguajes.Para que una constante sea long y no int, se añade una L (29L).Para que una constante sea float y no double, se añade una F.

Literales de carácter: entre comillas simples ('a').Ciertos caracteres especiales se pueden representar utilizandosecuencias de escape:

\n para un salto de línea (\u000A).

\t para un tabulador (\u0009).

\b para un retroceso (\u0008).

\r para un retorno de carro (\u000D).

Literales de cadenas de caracteres: entre comillas dobles

"Hola mundo"

Literales

Curso de Java Tema 2 – Sintaxis básica - 14Luis Hernández YáñezCarlos Cervigón Rückauer

tipo nombre;

tipo nombre = expresión; // inicialización

tipo nombre1, nombre2,...;

tipo nombre1 = exp1, nombre2 = exp2, ...;

long suma = 234;

int altura = 23, ancho = 45;

double resultado = 0.0;

float area = 23 * 45;

boolean encontrado = false;

char nl = '\n';

Variables: declaración

Variables.java

Curso de Java Tema 2 – Sintaxis básica - 15Luis Hernández YáñezCarlos Cervigón Rückauer

Variables compuestas por más de una palabra:iniciales en mayúscula menos la primera (nombreDato).

Variables globales de la clase: si no se inicializan explícitamente, se les asigna un valor por defecto.

Variables locales de los métodos: deben inicializarse siempre de forma explícita.

El modificador final

Impide que se altere el valor de la variable (constante):final int ANCHURA_MAXIMA = 120;final double PI = 3.1416;final int ABRIR_ARCHIVO = 1;

Por convenio, las constantes se escriben en mayúsculas.

Variables: consideraciones

Page 5: Tema02

Curso de Java Tema 2 – Sintaxis básica - 16Luis Hernández YáñezCarlos Cervigón Rückauer

Accesibles en toda la clase.

Se declaran en la sección de declaraciones globales de la clase.

Se declaran como static (de clase) y final (inmodificables),asignándoles el valor en la declaración.

public class Pruebas {static final double PI = 3.14159265;public static void main (String[] args) {

System.out.println(PI);}

}

Constantes de clase

Curso de Java Tema 2 – Sintaxis básica - 17Luis Hernández YáñezCarlos Cervigón Rückauer

Las llaves delimitan bloques de código: { ... }

Los bloques están anidados unos dentro de otros(a excepción del bloque correspondiente a la clase entera).

Las reglas de ámbito (alcance) y visibilidad de los identificadores son las habituales:

El ámbito es el bloque en el que está definido(junto con todos los bloques que contenga).

La visibilidad es menor que el ámbito si en bloques interioresse declaran otros identificadores iguales.Nota: Java permite que haya variables locales de los métodos con igual nombre que atributos de la clase (los ocultan), pero no permite que dentro de los métodos se use dos veces un mismo identificador.

Por defecto, las variables se crean cuando se entra en su ámbito y se destruyen cuando se sale de él.

Bloques y ámbito de los identificadores

Curso de Java Tema 2 – Sintaxis básica - 18Luis Hernández YáñezCarlos Cervigón Rückauer

Operador de asignación =variable = expresión;

Operadores aritméticosUnarios: + - ++ (incremento) -- (decremento)

x = y++; // Se asigna y a x; luego se incrementa yx = ++y; // Se incrementa y; luego se asigna y a x

Binarios: + - * / % (módulo)

Ternario: ? (x < y) ? x : y (si x < y, entonces x, si no y)

Abreviaturasx += y; equivale a x = x + y;x -= y; equivale a x = x - y;x *= y; equivale a x = x * y;x /= y; equivale a x = x / y;x %= y; equivale a x = x % y;

Operadores

Area.java

Curso de Java Tema 2 – Sintaxis básica - 19Luis Hernández YáñezCarlos Cervigón Rückauer

Operadores relacionales == != < <= > >=

Operadores lógicos (booleanos) Evaluación perezosa

! Negación (NOT)&& Conjunción (AND) (& para evaluación no perezosa)|| Disyunción (OR) (| para evaluación no perezosa)^ O exclusiva (XOR)

Conversiones de tipos: los moldes (casts)

La promoción de tipos es automática (de menor a mayor).

Las conversiones de tipos mayores a tipos menores se debe hacer explícita por medio de moldes: el tipo deseado entre paréntesis.

(tipo) expresión

El molde precede a lo que se quiere convertir.

Operadores

Casting.java

Page 6: Tema02

Curso de Java Tema 2 – Sintaxis básica - 20Luis Hernández YáñezCarlos Cervigón Rückauer

Mayor moldes++ -- (prefijos)!

* / %

+ -

< <= > >=

== !=

&

^

|

&&

||

Menor = += -= *= /= %=

Operadores: precedencia

Los paréntesisnos permitenpasar por altola precedencia

Curso de Java Tema 2 – Sintaxis básica - 21Luis Hernández YáñezCarlos Cervigón Rückauer

Java no proporciona métodos directos para leer datos del teclado.Proporciona métodos para leer líneas.

Una clase MyInput para leer números y cadenas del teclado:

Entrada/salida básica

MyInput.java

...public class MyInput{

public static String readString() { ... }public static int readInt() { ... }public static double readDouble() { ... }public static byte readByte() { ... }public static short readShort() { ... }public static long readLong() { ... }public static float readFloat() { ... }

}

Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.

Curso de Java Tema 2 – Sintaxis básica - 22Luis Hernández YáñezCarlos Cervigón Rückauer

Desarrollar un programa en una clase denominada AreaCirculoque pida el radio de un círculo y muestre el área del mismo.

Ejercicios

Curso de Java Tema 2 – Sintaxis básica - 23Luis Hernández YáñezCarlos Cervigón Rückauer

Desarrollar un programa, con una clase que se denomine CalculoHipoteca, que permita calcular los pagos mensual y total de un crédito hipotecario. Pedirá la tasa de interés anual (porcentaje), el número de años y la cantidad a prestar.

donde tasaInteresMensual está normalizada (entre 0 y 1).

AB Math.pow(A,B);

Si quieres que no secambie de línea cuando imprimas en la pantalla:System.out.print();

Ejercicios

12)1(

11 ×+−

×=

añossM ensualtasaIntere

sM ensualtasaInterecantidadlpagoM ensua

Page 7: Tema02

Curso de Java Tema 2 – Sintaxis básica - 24Luis Hernández YáñezCarlos Cervigón Rückauer

La clase Math proporciona dos constantes (Math.E y Math.PI) y muchos métodos (de clase) útiles para operaciones matemáticas. Es una clase del lenguaje (java.lang) y por eso se importa automáticamente.

Algunos de los métodos de la clase son:

Math.abs(num) Math.acos(num) Math.atan(num)Math.cos(num) Math.exp(num) Math.log(num)

Math.max(a,b) Math.min(a,b) Math.pow(a,b)

Math.random() Math.round(num) Math.sin(num)

Math.sqrt(num) Math.tan(num)

Math.toDegrees(num) Math.toRadians(num)

Práctica:Rehacer los dos ejercicios anteriores para que el área del círculo sea más precisa y los resultados se muestren con dos decimales.

Una clase muy útil para números: Math

AreaCirculo2 CalculoHipoteca2

Curso de Java Tema 2 – Sintaxis básica - 25Luis Hernández YáñezCarlos Cervigón Rückauer

Instrucciones de selección condicional:

Bifurcación: if if-else

Selección múltiple: switch

Instrucciones de bucles:

Número de iteraciones predeterminado: for

Bucles condicionales: while do-while

Instrucciones de paso de control: break continue

Instrucciones de control del flujo

Curso de Java Tema 2 – Sintaxis básica - 26Luis Hernández YáñezCarlos Cervigón Rückauer

Para la bifurcación condicional disponemos de la típica estructura if.

Veamos sus distintas variaciones:if(condición) instrucción;

if(condición) instrucción-if;else instrucción-else;

if(condición) { secuencia-de-instrucciones;

}

if(condición) { secuencia-de-instrucciones-if;

}else {

secuencia-de-instrucciones-else;}

Selección condicional: bifurcación

condicióntrue

Instruccióno bloque if

false

Instruccióno bloque else

Curso de Java Tema 2 – Sintaxis básica - 27Luis Hernández YáñezCarlos Cervigón Rückauer

if-else anidados: cada else se asocia al if anterior más cercano.

if(i == j) {if(j == k)

System.out.println("i igual a k");} // Llaves para que el else se asocie al primer ifelse {

System.out.println("i no es igual a j"); }

Escalera if-else-if:

if(n == 1 ) { // Bloque 1}else if(n == 2) { // Bloque 2}else { // Si todo falla, Bloque 3 }

Selección condicional: bifurcación

Page 8: Tema02

Curso de Java Tema 2 – Sintaxis básica - 28Luis Hernández YáñezCarlos Cervigón Rückauer

– Modificar el programa de cálculo de pagos de hipotecas, de forma que el interés anual dependa del número de años del préstamo:

7,25% hasta 15 años (exclusive)8,5% hasta 20 años (exclusive)9,75% hasta 25 años (exclusive)11% hasta 30 años

Además, los préstamos no pueden durar menos de 10 años ni más de 30.

Nota: para forzar la finalización del programa se puede usar System.exit(0). A menudo evita tener que anidar demasiadas bifurcaciones condicionales.

– Crear un programa que pida tres números (num1, num2 y num3)y los ordene, de forma que num1 contenga el mayor, num2contenga el intermedio y num3 contenga el menor.

Ejercicios

CalculoHipoteca3

Ordena

Curso de Java Tema 2 – Sintaxis básica - 29Luis Hernández YáñezCarlos Cervigón Rückauer

Si tenemos que disponer más de dos ramas de ejecución y la elegida depende del valor de una variable o una expresión, entonces debemos elegir la instrucción switch.

La sintaxis básica es la siguiente:switch(expresión) {

case valor1:instrucciones1[break;]

case valor2:instrucciones2[break;]

...[ default:

por-defecto ]}

Selección condicional: ramificación múltiple

[...] : opcional

exp==val1false

exp==val2 instrucciones2 true

trueexp==valN

...false

false

true instrucciones1

instruccionesN

por-defectoLa instrucción vacía existe

Curso de Java Tema 2 – Sintaxis básica - 30Luis Hernández YáñezCarlos Cervigón Rückauer

switch(mes) {case 1: case 3: case 5:case 7: case 8: case 10:case 12:

numeroDias = 31;break;

case 4: case 6: case 9:case 11:

numeroDias = 30;break;

default:numeroDias = 28;

}

Selección condicional: ramificación múltiple

Curso de Java Tema 2 – Sintaxis básica - 31Luis Hernández YáñezCarlos Cervigón Rückauer

Para ejecutar un determinado número de veces una instrucción o un bloque de código disponemos de la típica instrucción for:

for(inicialización;condición;incremento)instrucción;

for(inicialización;condición;incremento) {secuencia-de-instrucciones

}

La sección de inicialización sirve para establecer la situación inicial; habitualmente se trata simplemente de la asignación de un valor inicial a una variable de control de bucle.

La sección de condición indica si debe proseguir la repetición;mientras sea cierta (true) el bucle continuará.

La sección de incremento sirve para establecer la nueva situaciónde la siguiente iteración; habitualmente se incrementa la variable.

Bucles: la instrucción for

Page 9: Tema02

Curso de Java Tema 2 – Sintaxis básica - 32Luis Hernández YáñezCarlos Cervigón Rückauer

for(contador = 1; contador <= ciclos; contador++)instrucción;

Bucles: la instrucción for

true

instrucción

contador<= ciclos

contador = 1

false

contador++

Curso de Java Tema 2 – Sintaxis básica - 33Luis Hernández YáñezCarlos Cervigón Rückauer

Bucles: la instrucción for

TestMulTable.java

...// Display the number titleSystem.out.print(" | ");for(int j = 1; j <= 9; j++) System.out.print(" " + j);System.out.println(" ");

// Print table bodyfor(int i = 1; i <= 9; i++) {

System.out.print(i+" | ");for(int j = 1; j <= 9; j++) { // j de otro bloque

// Display the product and align properlyif(i * j < 10) System.out.print(" " + i * j);else System.out.print(" " + i * j);

}System.out.println();

}...

Reproducido de “Introduction to Java”, Y. Daniel Liang, Prentice Hall 2001.

Curso de Java Tema 2 – Sintaxis básica - 34Luis Hernández YáñezCarlos Cervigón Rückauer

– Crear un programa que pida un número y muestre una pirámide como la siguiente (para el caso en el que el número sea 8):

11 2 1

1 2 3 2 11 2 3 4 3 2 1

1 2 3 4 5 4 3 2 11 2 3 4 5 6 5 4 3 2 1

1 2 3 4 5 6 7 6 5 4 3 2 11 2 3 4 5 6 7 8 7 6 5 4 3 2 1

– Sabiendo que el valor de π se puede aproximar mediante la siguiente fórmula:

π = 4 x (1 – 1/3 + 1/5 – 1/7 + 1/9 – 1/11 + 1/13 ...)

Crear un programa que pida al usuario un número de iteraciones y calcule el valor de π con ese número de aproximaciones.

Ejercicios

Piramide

CalculoPI

Curso de Java Tema 2 – Sintaxis básica - 35Luis Hernández YáñezCarlos Cervigón Rückauer

La instrucción while es una de las dos que están disponibles para bucles no determinados, aquellos que no tienen establecido de antemano un número fijo de iteraciones. La continuidad del bucledepende de alguna condición. Mientras (while) que la condición sea cierta, se sigue iterando; en el momento en que la condición se vuelva falsa, el bucle termina.while(condición) instrucción;

while(condición) {instrucciones

}

Bucles: la instrucción while

falsecondición

true

instrucción

Page 10: Tema02

Curso de Java Tema 2 – Sintaxis básica - 36Luis Hernández YáñezCarlos Cervigón Rückauer

La instrucción do...while es la otra instrucción disponible para bucles no determinados. La diferencia con el bucle while se encuentra en que la condición se comprueba al final, después de haber ejecutado el bloque. Así, siempre se realiza al menos una iteración del bucle (con el while puede no haber iteración alguna).do {

instrucciones} while(condición)

Se ejecutan las instruccioneshasta que la condiciónse haga falsa.

Bucles: la instrucción do...while

false

true

instrucciones

condición

Curso de Java Tema 2 – Sintaxis básica - 37Luis Hernández YáñezCarlos Cervigón Rückauer

La instrucción break, además de servir para interrumpir la ejecución del código en los casos de los switch, sirve para interrumpir la ejecución de un bucle while o do...while(dar por terminado el bucle, saliendo de él de forma inmediata).La instrucción continue sirve para interrumpir la ejecución de la iteración actual de un bucle while o do...while, pasando por alto el resto del código del bucle que haya a continuación yforzando a que siga el bucle con la siguiente iteración.int i = 0; float suma = 0;do {

int num = MyInput.readInt();if(num == 0) break;if(num < 0) continue;suma += 1 / num;i++;

} while(i < 5);

break y continue

¿Qué error hayen este ejemplo?

ContinueBreak.java

Curso de Java Tema 2 – Sintaxis básica - 38Luis Hernández YáñezCarlos Cervigón Rückauer

– Convertir el siguiente bucle for en un while y en un do-while:

long suma = 0;for(int i = 0; i <= 1000; i++) suma += i;

– ¿Cuál es la salida del siguiente código?int num = 1000;while(true) {

if(num < 9) break;num -= 9;

}System.out.println("num = " + num);

– ¿Y la de este otro?int num = 1000;while(true) {

if(num < 9) continue;num -= 9;

}System.out.println("num = " + num);

Ejercicios

Curso de Java Tema 2 – Sintaxis básica - 39Luis Hernández YáñezCarlos Cervigón Rückauer

Los métodos de las clases son las unidades funcionales de Java.Son similares a las funciones de otros lenguajes.

modificadores: indican cómo (dónde) se puede invocar el método.De momento, simplemente static.

tipo: tipo de dato que devuelve el método (void si nada).

parámetros: declaraciones separadas por comas.

Métodos

[modificadores] tipo nombre (parámetros){// Cuerpo del método

}

Cabecera

Page 11: Tema02

Curso de Java Tema 2 – Sintaxis básica - 40Luis Hernández YáñezCarlos Cervigón Rückauer

static int max(int num1, int num2){

int result;if(num1 > num2) result = num1;else result = num2;return result;

}

Para devolver valores se usa la instrucción return.

El método termina al ejecutar una instrucción returno al llegar a la llave de cierre.static int max(int num1, int num2) {

if(num1 > num2) return num1;else return num2;

}

Métodos

Cada parámetrocon su tipo.

int num1, num2

Si el método no esde tipo void, debeterminar siemprecon un return.

Signatura

Se puede forzar el fin de un método void con una instrucción return;

Curso de Java Tema 2 – Sintaxis básica - 41Luis Hernández YáñezCarlos Cervigón Rückauer

int mayor = max(3, 4);int num1, num2;...mayor = max(num1, num2);System.out.println(12 * max(num1, num2) – 3);max(num1, num2); // válido, pero se pierde el resultado

Los métodos de tipo void sólo se pueden invocarcomo instrucciones independientes:static void algo(...) {

...}

algo(...);

Métodos: invocación

Curso de Java Tema 2 – Sintaxis básica - 42Luis Hernández YáñezCarlos Cervigón Rückauer

Los métodos static se pueden invocar directamente (con sunombre) en los demás métodos de su misma clase:public class MayorMenor {

public static void main(String[] args){int num1, num2, mayor, menor;...mayor = max(num1, num2);menor = min(num1, num2);

}static int max(int num1, int num2) {if(num1 > num2) return num1;else return num2;

}static int min(int num1, int num2) {if(num1 < num2) return num1;else return num2;

}}

Métodos: invocación

MayorMenor.java

Paso de parámetrosPOR VALOR.

Curso de Java Tema 2 – Sintaxis básica - 43Luis Hernández YáñezCarlos Cervigón Rückauer

– Modificar el programa MayorMenor para que muestre el mayory el menor de cuatro números.

– Crear un programa que pida al usuario un número entero largoy muestre la suma de los dígitos del número.Usará un método que se encargue de realizar dicha suma.

– Crear un programa que muestre los 100 primeros números primos.Usará un método esPrimo() que indique si un número es o no primo. Mostrará diez números primos por línea (y alineados en columnas).

Ejercicios

MayorMenor2

SumaDigitos

Primos

Page 12: Tema02

Curso de Java Tema 2 – Sintaxis básica - 44Luis Hernández YáñezCarlos Cervigón Rückauer

Los métodos se pueden sobrecargar: varios métodos con igual nombre pero diferente signatura.public class X {

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

}static int max(int num1, int num2) { ... }static long max(long num1, long num2) { ... }static float max(float num1, float num2) { ... }static double max(double num1, double num2) { ... }

}

Se sabe cuál usar por el tipo de los argumentos.

Métodos: sobrecarga

Sobrecarga.java

Curso de Java Tema 2 – Sintaxis básica - 45Luis Hernández YáñezCarlos Cervigón Rückauer

También llamada recursión, es la posibilidad de que un método se invoque a sí mismo.public class Factorial {

public static void main(String[] args){long num;System.out.print("Introduce el numero cuyo

factorial quieres calcular: ");num = MyInput.readLong();System.out.println("El factorial de " + num + " es " + factorial(num));

}static long factorial(long num) {if(num == 1) return 1; // Caso basereturn num * factorial(num - 1);// Cada vez más cerca del caso base

}}

Métodos: recursividad

Factorial.java

Curso de Java Tema 2 – Sintaxis básica - 46Luis Hernández YáñezCarlos Cervigón Rückauer

– Crear un programa que calcule números de Fibonacci.Pedirá el número del que se quiere calcular su Fibonacci.

F(0) = 0F(1) = 1F(N) = F(N-2) + F(N-1) si N > 1

– Crear un programa que indique los movimientos que hay que realizar para resolver el problema de las torres de Hanoi.

Se pedirá el número de discos que se quieren mover.

Cada pedestal está identificado por una letra (A, B y C).La torre está inicialmente en el A y se quiere llevar al C.

Para mover una torre de discos de un pedestal X a otro pedestal Y, el primer movimiento es mover el disco superior de la torre al tercer pedestal, que se usa como auxiliar.

Ejercicios

Fibonacci

Hanoi

Curso de Java Tema 2 – Sintaxis básica - 47Luis Hernández YáñezCarlos Cervigón Rückauer

Desarrollar un programa que permita manipular fechas.

El día, el mes y el año serán variables de clase (static)(se podrán acceder en cualquier método de la clase).

Los métodos que se desea que tenga el programa son:

leer(): leerá del teclado el día, el mes y el año de la fecha.

valida(): comprobará si la fecha leída es correcta(entre el 1-1-1900 y el 31-12-2050); si no es válida,la ajustará para que lo sea. Se llamará al final de leer().

mostrarCorta(): mostrará la fecha en formato corto(por ejemplo, 02-09-2003).

bisiesto(): dirá si el año de la fecha es bisiesto.

diasMes(mes): devolverá el número de días del mesque se le pasa para el año de la fecha.

Ejercicio de refuerzo

. . .

Page 13: Tema02

Curso de Java Tema 2 – Sintaxis básica - 48Luis Hernández YáñezCarlos Cervigón Rückauer

diasTranscurridos(): devolverá el número de días transcurridos desde el 1-1-1900 hasta la fecha.

diaSemana(): devolverá el día de la semana de la fecha(0 para domingo, 1 para lunes, ..., 6 para sábado).El 1 de enero de 1900 fue domingo.

mostrarLarga(): mostrará la fecha en formato largo(por ejemplo, martes 2 de septiembre de 2003).

fechaTras(dias): establecerá la fecha que correspondea haber pasado esos días desde el 1-1-1900.

siguiente(): pasará al día siguiente.

El método main() servirá para probar los demás métodos.

Ejercicio de refuerzo

Fecha