Curso de Java | Métodos

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Son funciones aplicadas a objetos.

Una función es un subprograma que realiza una tarea específica y devuelve un valor

¿Para que sirven?

Imagina que queremos dar la bienvenida a un usuario a nuestra aplicación y explicarle las normas de uso. Podríamos hacer un console log con el siguiente código:

System.out.println('Hola Jorge, bienvenido a esta aplicación de consola. Estamos muy contentos de que quieras comenzar a usarla a pesar de ser una aplicación sustancialmente limitada ya que a parte de saludarte y soltarte este rollo, no hace mucho más');

Si quisieramos utilizar esta función para dar la bienvenida a la aplicación a toda una clase con 20 alumnos, tendríamos que repetir este código 20 veces. Sin embargo, si lo encápsulamos en un método, lo que repetiremos 20 veces será la llamada al método, quedando un código mucho más conciso y versátil (si quiero cambiar el saludo, lo hago una vez y no 20).

void saludarAlumno(String nombreAlumno){
   System.out.println("Hola " + nombreAlumno + ", bienvenido a esta aplicación de consola. Estamos muy contentos de que quieras comenzar a usarla a pesar de ser una aplicación sustancialmente limitada ya que a parte de saludarte y soltarte este rollo, no hace mucho más");
}

main.saludarAlumno("Jorge");
main.saludarAlumno("Roberto");
main.saludarAlumno("Laura");

Método que no devuelve nada (void), sin parámetros

public class Inicio{

	public void saludar(){
		System.out.println("Buenas tardes!");
	}

	public static void main(String[] args) {
		Inicio i;
		i = new Inicio();
		i.saludar();
	}
}

Ejercicio

  1. Crear un método llamado miau que no reciba ningún parámetro de entrada y muestre una traza con el texto «miauuuu«.
  2. Llamar al método miau, desde el public static void main, utilizando una instancia de la clase a la que pertenece.

Método que no devuelve nada (void), con parámetros

public class Inicio{

	public void saludar(String nombre){
		System.out.println("Buenas tardes " + nombre + "!");
	}

	public static void main(String[] args) {
		Inicio i= new Inicio();
		i.saludar("Juan");
	}
}

Ejercicios con métodos

Resolveremos los siguientes ejercicios definiendo una función con parámetros de entrada y que siempre devolverá un valor que procesaremos en la clase main.

1. Crear y llamar a un método que reciba como parámetro de entrada un valor booleano y muestre «Sí, eso es cierto» si el valor es true, y «No, eso es falso» si el valor es false.

2. Crear y llamar a un método que recibe un número y calcula su cubo.

3. Crear y llamar a un método que recibe la velocidad en Km/hora y la muestre en metros/hora.

4. Crear y llamar a un método que recibe el ancho y el alto de un rectángulo y calcula su perímetro.
Perímetro: 2*ancho + 2*alto
Cuando una función recibe varios parámetros, estos irán separados por coma. Ejemplo:

public void calculaPerimetro(int alto, int ancho);

5. Crear y llamar a un método que recibe la base y la altura de un triángulo y calcula su área.
Area triángulo = base*altura/2

6. Utilizando estas dos funciones:

  • calculaPerimetro(int radio);
    Perímetro de la circunferencia = 2*PI*Radio
  • calculaArea(int radio);
    Area de la circunferencia = PI*Radio2

Leer por teclado el valor del radio de una circunferencia y mostrar por pantalla su perímetro y area.

7. Repetir el ejercicio de la calculadora utilizando funciones para las operaciones aritméticas. Debemos declarar 4 funciones con dos parámetros de entrada cada una: suma(int a, int b), resta(int a, int b,), multiplicacion(int a, int b), division(int a, int b).

Métodos que devuelven algo

función php
Nativos de Java
String valor = lector.readLine();

//Esta línea da error porque no podemos almacenar en una variable lo que devuelve el método println, ya que no devuelve nada	
String valor2 = System.out.println("hola");
Desarrollados por nosotros
public class Inicio{
	public String saludar(String parametroEntrada){
		String respuesta = "Buenas tardes " + parametroEntrada;
		return respuesta;
	}
	public static void main(String[] args) {
		Inicio i= new Inicio();
		String valorDevuelto = i.saludar("Juan");
		System.out.println(valorDevuelto);
	}
}

Aclaraciones mega importantes:

El valor que devuelve un método debe ser almacenado en la misma línea en la que llamas al método.

Este código:

String v = i.saludar("Juan");

No significa: v es igual a saludar(«Juan»). Porque entonces v sería una función y v es un valor concreto.

Significa: v es igual a lo que devuelve saludar(«Juan»).

Preguntas que debes saber responder para todas las funciones que hagas

1. ¿En qué línea hemos definido el método?
2. ¿En qué línea hemos llamado al método?
3. ¿Cuantos parámetros de entrada tiene el método?
4. ¿Cómo se llaman los parámetros de entrada del método?
5. ¿El método devuelve algo?
6. ¿Dónde estamos almacenando el valor devuelto por el método?

1. public class Main {
2. int calcularSuma( int numero1, int numero2) {
3. int resultado = numero1 + numero2;
4. return resultado;
5. }
6. public static void main(String[]args){
7. Main m = new Main();
8. int result = m.calcularSuma(3,4);
9. }

Ejercicios: return

Ejercicios sencillos

1. ¿Qué valor de x se mostrará en la consola?

public class Main {
	public String hello() {
		return "Hi!";
	}

	public static void main(String[] args) {
		Main m = new Main();
		String x = m.hello();
		System.out.println(x); 
	}
}
"Hi!"

2. ¿Qué valor de x se mostrará en la consola?

public class Main {
	public String reply(String phrase) {
		  return phrase;
	}

	public static void main(String[] args) {
		Main m = new Main();
		String x = m.reply("How do you do?");
	}
}
"How do you do?"

3. ¿Qué valor de x se mostrará en la consola?

public class Main {
	public String whereIs(String name) {
		return "Dónde esta " + name + "?";
	}

	public static void main(String[] args) {
		Main m = new Main();
		String x = m.whereIs("Jacky");
		System.out.println(x);
	}
}
x = "Dónde esta Jacky?"

4. Escribe una función echo que devuelva el valor que recibe como parámetro.

m.echo("Greta");

debería devolver «Greta» y

m.echo("CO2");

debería devolver «CO2».

5. Escribe una función saludar que reciba una parámetro y devuelva el texto «Hola <parametro>!»

Por ejemplo,

saludar("Ada");

Debería devolver «Hola Ada!»

saludar("Grace");

Debería devolver «Hola Grace!»

6. Añade los operadores booleanos correctos para que la siguiente función tenga sentido.

public String testGreaterThan(int val) {
  if (val) {  // Cambia esta línea
    return "Por encima de 100";
  }

  if (val) {  // Cambia esta línea
    return "Por encima de 10";
  }

  return "10 o menos";
}

7. Añade los operadores booleanos correctos para que la siguiente función tenga sentido.

public String testGreaterOrEqual(int val) {
  if (val) {  // Cambia esta línea
    return "20 or más";
  }

  if (val) {  // Cambia esta línea
    return "10 o más";
  }

  return "menos de 10";
}

8. Añade los operadores booleanos correctos para que la siguiente función tenga sentido.

public String testLessThan(int val) {
  if (val) {  // Cambia esta línea
    return "Por debajo de 25";
  }

  if (val) {  // Cambia esta línea
    return "Por debajo de 55";
  }

  return "55 o más";
}

9. Añade los operadores booleanos correctos para que la siguiente función tenga sentido.

public String testLessOrEqual(int val) {
  if (val) {  // Cambia esta línea
    return "Menor o igual a 12";
  }

  if (val) {  // Cambia esta línea
    return "Menor o igual a 24";
  }

  return "More Than 24";
}

10. Modificar el siguiente método para que devuelva Inside si val está entre 10 y 20 (inclusive) y Outside en caso contrario.

public String testLogicalOr(int val) {
  if (val) { // Cambia esta línea
    return "Inside";
  }else {
    return "Outside";
  }
}

11. Añade el operador de igual para que la siguiente función devuelva Equal cuando val sea 12.

public String testEqual(int val) {
  if (val) { // Cambia esta línea
    return "Equal";
  }
  return "Not Equal";
}

12. Combina las sentencias if en un único bloque de tipo if/else.

public String testElse(int val) {
  String result = "";

  if (val > 5) {
    result = "Mayor que 5";
  }

  if (val <= 5) {
    result = "5 más pequeño";
  }

  return result;
}

13. Combina las sentencias en un único bloque de tipo if/elseif/else.

public String testElse(int val) {
  String result = "";

  if (val > 5) {
    result = "Bigger than 5";
  }

  if (val < 5) {
    result = "Smaller than 5";
  }

  if (val == 5) {
    result = "Equal to 5";
  }

  return result;
}

14. ¿Qué valor tendrá x después de ejecutar el siguiente código?

public class Main {
	public String hola(String nombre) {
		return "Hi " + nombre + "!";
	}

	public static void main(String[] args) {
		Main m = new Main();
		String h1 = m.hola("Selva");
		String h2 = m.hola("Pola");
		String x = h1 +  " "+ h2;
	}
}
x = "Hi Selva! Hi Pola!";

15. ¿Qué valor tendrá x después de la ejecución del siguiente código?

public class Main {
	public String duplica(String nombre) {
		return nombre + " and " + nombre;
	}

	public static void main(String[] args) {
		Main m = new Main();
		String x = m.duplica("Roy");
	}
}
x = "Roy and Roy"

16. Cambia el orden de los bloques para que la función devuelva el valor correcto en todos los casos:

public String orderMyLogic(int val) {
  if (val < 10) {
    return "Menos que 10";
  } else if (val < 5) {
    return "Menos que 5";
  } else {
    return "Mayor o igual a 10";
  }
}

17. Completar la función para que se cumplan las siguientes condiciones:

public String testSize(int num) {
  return "Change Me"; // Quita esta línea y escribe el código fuente de la solución en su lugar
}
num < 5 → return "Tiny";
num < 10 → return "Small";
num < 15 → return "Medium";
num < 20 → return "Large";
num >= 20 → return "Huge";

18. Escribe una función nand que tome como parámetros de entrada dos valores booleanos. Si ambos valores son true, el resultado debería ser falso. En cualquier otro caso, debería devolver true.

Por ejemplo, la llamada

m.nand(true, true);

debería devolver false.

Las llamadas:

m.nand(true, false);
m.nand(false, true);
m.nand(false, false);

deberían devolver true.

19. Escribe una función nor que tome como parámetros de entrada dos valores booleanos. Si ambos valores son false, el resultado debería ser true. En cualquier otro caso, el valor devuelto debería ser false.

Por ejemplo, la llamada a la función

m.nor(false, false);

debería devolver true.

Las llamadas:

m.nor(true, false);
m.nor(false, true);
m.nor(true, true);

deberían devolver false.

20. Escribe una función xor que tome dos valores booleanos. Si ambos valores son diferentes, el resultado debería ser true. Si ambos valores son iguales, el resultado debería ser false.

Por ejemplo, las llamadas:

m.xor(true, false);
m.xor(false, true);

deberían devolver true.

Las llamadas

m.xor(true, true);
m.xor(false, false);

deberían devolver false.

Bloque de ejercicios

Hacer los ejercicios siguientes, que ya hicimos sin utilizar return, pero ahora añadiendo un return a las funciones y utilizando el valor que estas devuelven.

1. Crear y llamar a un método que recibe un número y devuelva su cubo. Mostrar por consola el valor devuelto.

2. Crear y llamar a un método que recibe la velocidad en Km/hora y la la devuelva en metros/hora. Mostrar por consola el valor devuelto.

3. Crear y llamar a un método que recibe el ancho y el alto de un rectángulo y devuelva su perímetro. Mostrar por consola el valor devuelto.
Perímetro: 2*ancho + 2*alto
Cuando una función recibe varios parámetros, estos irán separados por coma. Ejemplo:

calculaPerimetro(int alto, int ancho);

4. Crear y llamar a un método que recibe la base y la altura de un triángulo y devuelva su área. Mostrar por consola el valor devuelto.
Area triángulo = base*altura/2

5. Repetir el ejercicio de la calculadora utilizando funciones para las operaciones aritméticas. Debemos declarar 4 funciones con dos parámetros de entrada cada una: suma(int a, int b), resta(int a, int b,), multiplicacion(int a, int b), division(int a, int b).

if(op.equals("+")){
   int result = suma(n1, n2);
   System.out.println(result);
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.