Ejemplo clase y constructores

package com.trifulcas.clases;

public class Producto {
	public String referencia;
	public double precio;
	public double iva;
	public double descuento;
	
	
	public double PVP() {
		// La palabra clave this hace referencia al valor
		// de la propiedad del objeto en el que estamos
		return this.precio*(1+this.iva);
	}
	// Función descuento que nos devuelva el precio menos un 10%
	public double descuento() {
		return this.PVP()*(1-this.descuento);
	}
	// Toda clase puede tener un constructor
	// Se llama cuando instanciamos la clase, al hacer new
	// Si pongo un parámetro en elconstructor
	// Obligo a que cuando se instancie pongan ese valor
	public Producto(String referencia) {
		// ¿Qué ponemos dentro de un constructor?
		// Todas aquellas inicializaciones que necesite nuestra clase
		// Si nuestra clase necesita algunos valores por defecto
		// También los ponemos aquí
		this.referencia=referencia;
		this.iva=.21;
		this.descuento=.1;
	}
	
}

package com.trifulcas.clases;

public class ProbarClases {

	public static void main(String[] args) {
		// Al tener un constructor con parámetro
		// Se lo tengo que pasar al instanciarlo
		Producto tarta=new Producto("Tarta chupiguay");
		Producto cupcake=new Producto("Magdalena con ínfulas");

		// Esto ahora da error porque es obligatorio pasar la referencia
		//Producto foo=new Producto();
		
		tarta.precio=100;
		
		cupcake.precio=10;
		
		System.out.println(tarta.referencia);
		System.out.println(tarta.PVP());
		System.out.println(tarta.descuento());
		System.out.println(PVP(tarta.precio));
		System.out.println(cupcake.PVP());
		
	}
	public static double PVP(double precio) {
		return precio*1.21;
	}

}

Ejemplos de clases

package com.trifulcas.saludo;

public class EjemplosClases {

	public static void main(String[] args) {
		// Para instanciar una clase creo una variable de ese tipo
		// Y con la palabra clave new INSTANCIO la clase
		Alumno ana=new Alumno();
		
		ana.nombre="Ana Pi";
		
		Alumno pep=new Alumno();
		
		pep.nombre="Pepe Bou";
		
		Alumno[] alumnos=new Alumno[4];
		alumnos[0]=new Alumno();
		alumnos[0].nombre="Eva";
		
		for(int i=0;i<4;i++) {
			alumnos[i]=new Alumno();
			alumnos[i].nombre="Alumno "+i;
		}
		// Esto no lo puedo hacer porque Alumno es una CLASE
		// Es decir, una definición, no un objeto
		// Alumno.nombre="Juan";

		Empleado eva=new Empleado();
		eva.nombre="Eva Pou";
	}
	
	// Definiendo las propiedades y funciones de la clase Alumno
	public static class Alumno{
		public String nombre;
	}

}

package com.trifulcas.saludo;

public class Empleado {
	public String nombre;
}

Recursividad

package com.trifulcas.saludo;

public class Recursividad {
	public static void main(String[] args) {
		System.out.println(factorial(5));
		System.out.println(fibonacci(5));
		System.out.println(fibonacci(8));
	}

	// Una función recursiva es una función que se llama a sí misma
	// Factorial: multiplicación desde el 1 hasta el número
	// Factorial: N! -> N*(N-1)! 1!->1
	// factorial(5)-->5*factorial(4)
	// factorial(4)-->4*factorial(3)
	// factorial(3)-->3*factorial(2)
	// factorial(2)-->2*factorial(1)
	// factorial(1)-->1
	public static int factorial(int num) {
		if (num <= 1) {
			return 1;
		} else {
			return num * factorial(num - 1);
		}
	}
	
	/*
	 * Las reglas para definir una función recursiva son dos
	 * a) Tener un caso base, es decir habrá un momento en el que la función
	 * devuelve un valor fijo.
	 * b) Descomponer el problema en la misma función pero de valores más pequeños
	 */
	
	/*
	 * Sucesión de fibonacci. Empezamos con 1,1 y cada número es la suma de los dos anteriores
	 * 1,1,2,3,5,8,13,21,34,....
	 * Obtener el elemento N de la sucesión de fibonacci
	 * Si N es 1 o 2 --> 1
	 * El elemento N es igual a suma de fib(N-1) + fib(N-2)
	 */
	public static int fibonacci(int posicion) {
		if(posicion<=2) {
			return 1;
		} else {
			return fibonacci(posicion-1)+fibonacci(posicion-2);
		}
	}
}

Ámbito (scope) de variables

https://www.w3schools.com/java/java_scope.asp

package com.trifulcas.saludo;

public class Ambito {

	public static void main(String[] args) {
		// x está definida para todo el bloque, incluyendo subbloques
		int x=0;
		
		for(int i=0;i<10;i++) {
			// i y nombre sólo están definidas dentro de este bloque
			String nombre="Juan";
			System.out.println(i);
			System.out.println(nombre);
			System.out.println(x);
		}
		// x existe
		System.out.println(x);
		// Pero i y nombre no porque se ha cerrado el bloque en el que
		// estaban definidas
		System.out.println(i);
		System.out.println(nombre);

	}

}

Ejercicios arrays

Cread un programa que nos pida 5 números, los almacene en un array y después nos pida un número y nos diga cuantos valores del array son mayores o iguales a ese número.

Cread un programa que nos pida seis nombres de alumnos y los guarde en un array. Después nos pedirá un nombre y nos dirá si ese nombre está en el array o no.

Cread un programa que cree un array bidimensional de 3×3 y que nos ponga el valor 1 en la diagonal principal:
1 0 0
0 1 0
0 0 1

Con el programa que ya hay en trifulcas de las notas y los alumnos que nos pida los datos y luego nos diga cual es la nota máxima de todos los alumnos y qué alumno lo tiene.

package com.trifulcas.saludo;

import java.util.Scanner;

public class Ejercicio4 {

	public static void main(String[] args) {
		int[] numeros = new int[5];
		Scanner in = new Scanner(System.in);
		for (int i = 0; i < 5; i++) {
			System.out.println("Introduce el número " + (i + 1));
			numeros[i]=in.nextInt();
		}
		System.out.println("Introduce el número a comprobar");
		int numero=in.nextInt();
		int cont=0;
		for(int i=0;i<numeros.length;i++) {
			if(numeros[i]>=numero) {
				cont++;
			}
		}
		System.out.println("Hay "+cont+" numeros mayores o iguales que "+numero);
		System.out.println("Hay "+mayores(numeros,numero)+" numeros mayores o iguales que "+numero);
		in.close();
	}
	
	public static int mayores(int[] numeros, int numero) {
		int cont=0;
		for(int n:numeros) {
			if (n>=numero) {
				cont++;
			}
		}
		return cont;
	}

}

package com.trifulcas.saludo;

import java.util.Scanner;

public class Ejercicio4b {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		int[] numeros=pedirNumeros(5,in);
		int numero=pedirNumero(in);
		System.out.println("Hay "+mayores(numeros,numero)+" mayores que "+numero);
		in.close();
	}
	
	public static int[] pedirNumeros(int tam,Scanner in) {
		int[] numeros=new int[tam];
		for (int i = 0; i < 5; i++) {
			System.out.println("Introduce el número " + (i + 1));
			numeros[i]=in.nextInt();
		}
		return numeros;
	}
	public static int pedirNumero(Scanner in) {
		System.out.println("Introduce el número ");
		int numero=in.nextInt();
		
		return numero;
	}
	public static int mayores(int[] numeros, int numero) {
		int cont=0;
		for(int n:numeros) {
			if (n>=numero) {
				cont++;
			}
		}
		return cont;
	}
}

package com.trifulcas.saludo;

import java.util.Scanner;

public class Ejercicio5 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String[] alumnos = new String[6];
		for (int i = 0; i < 6; i++) {
			System.out.println("Introduce el alumno " + (i + 1));
			alumnos[i] = in.nextLine();
		}
		System.out.println("Introduce el alumno a buscar");
		String alumno = in.nextLine();
		boolean esta = false;
		for (String el : alumnos) {
			// Para comparar dos strings
			if (alumno.equals(el)) {
				esta = true;
			}
		}
		System.out.println("El alumno "+alumno+(esta?"":" no ")+" está en la lista");
		in.close();
	}

}

package com.trifulcas.saludo;

public class Ejercicio6 {

	public static void main(String[] args) {
		int[][] tabla = new int[3][3];

		// Recorrer todo el array bidimensional
		// Y cuando se cumpla la condición poner un 1
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if (i == j) {
					tabla[i][j] = 1;
				}
			}
		}

		for (int i = 0; i < 3; i++) {
			tabla[i][i] = 1;
		}
		int[][] otra=diagonal(5);
		mostrar(otra);
	}
	public static int[][] diagonal(int tam){
		int[][] tabla=new int[tam][tam];
		for (int i = 0; i < tam; i++) {
			tabla[i][i] = 1;
		}
		return tabla;
	}
	static void mostrar(int[][] tabla) {
		// Es otro bucle anidado porque tengo dos dimensiones
		for (int i = 0; i < tabla.length; i++) {
			for (int j = 0; j < tabla[i].length; j++) {
				System.out.print(tabla[i][j] + " | ");
			}
			System.out.println();
		}
	}
}

package com.trifulcas.saludo;

import java.util.Scanner;

public class Ejercicio7 {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		// Pido el número de alumnos (alto de mi tabla multidimensional)
		System.out.println("Introduce el número de alumnos");
		int alumnos = in.nextInt();
		// Pido el número de notas (ancho de mi tabla multidimensional)
		System.out.println("Introduce el número de notas por alumno");
		int numero = in.nextInt();
		// Creo un array multidimensional con los datos que me han dado
		int[][] notas = new int[alumnos][numero];

		// Para pedir los datos tengo que usar un bucle anidado
		// El primero (i) es de los alumnos
		// El segundo (j) es de las notas
		// La combinación (i,j) son las coordenadas de mi array bidimensional
		for (int i = 0; i < alumnos; i++) {
			System.out.println("Introduce las notas del alumno " + (i + 1));
			for (int j = 0; j < numero; j++) {
				System.out.println("Introduce la nota " + (j + 1));
				// Guardo la nota en la coordenada adecuada
				notas[i][j] = in.nextInt();

			}
		}
		mostrar(notas);
		int mayor = notas[0][0]; // Esto es una triquiñuela para evitar coger mínimos como el '0'
		int alumno = 0;
		for (int i = 0; i < alumnos; i++) {
			for (int j = 0; j < numero; j++) {
				if (mayor < notas[i][j]) {
					mayor = notas[i][j];
					alumno=i;
				}
			}
		}
		System.out.println("La nota más alta es " + mayor+" y es del alumno "+(alumno+1));
	}

	static void mostrar(int[][] tabla) {
		// Es otro bucle anidado porque tengo dos dimensiones
		for (int i = 0; i < tabla.length; i++) {
			for (int j = 0; j < tabla[i].length; j++) {
				System.out.print(tabla[i][j] + " | ");
			}
			System.out.println();
		}
	}
}

Ojo: Los arrays se pasan como referencia

https://books.trinket.io/thinkjava2/chapter7.html#sec89

package com.trifulcas.saludo;

public class Referencia {

	public static void main(String[] args) {
		int[] num= {1,2,3,4};
		mostrar(num);
		int[] doble=doble(num);
		mostrar(doble);
		mostrar(num);
		doble[0]=27;
		mostrar(num);
		int[] otroDoble=dobleOk(num);
		mostrar(num);
		mostrar(otroDoble);
		
	}
	static int[] doble(int[] tabla) {
		for(int i=0;i<tabla.length;i++) {
			tabla[i]*=2;
		}
		return tabla;
	}
	static int[] dobleOk(int[] tabla) {
		int[] copia=new int[tabla.length];
		for(int i=0;i<tabla.length;i++) {
			copia[i]=tabla[i]*2;
		}
		return copia;
	}
	static void mostrar(int[] tabla) {
		for(int elemento:tabla) {
			System.out.println(elemento);
		}
	}
}

Ejemplos

Pedir un tamaño y pedir el número de notras


	public static void main(String[] args) {
		
		Scanner in = new Scanner(System.in);
		System.out.println("Introduce el tamaño");
		int tam=in.nextInt();
		int[] notas=new int[tam];
		for(int i=0;i<tam;i++) {
			System.out.println("Introduce la nota "+(i+1));
			notas[i]=in.nextInt();
		}
		mostrar(notas);
	}
	static void mostrar(int[] tabla) {
		for(int el:tabla) {
			System.out.print(el+" | ");
		}
		System.out.println();
	}

Nos piden refactorizarlo para que sean alumnos y notas:


package com.trifulcas.saludo;

import java.util.Scanner;

public class EjemploMulti {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		// Pido el número de alumnos (alto de mi tabla multidimensional)
		System.out.println("Introduce el número de alumnos");
		int alumnos = in.nextInt();
		// Pido el número de notas (ancho de mi tabla multidimensional)
		System.out.println("Introduce el número de notas por alumno");
		int numero = in.nextInt();
		// Creo un array multidimensional con los datos que me han dado
		int[][] notas = new int[alumnos][numero];
		
		// Para pedir los datos tengo que usar un bucle anidado
		// El primero (i) es de los alumnos
		// El segundo (j) es de las notas
		// La combinación (i,j) son las coordenadas de mi array bidimensional
		for (int i = 0; i < alumnos; i++) {
			System.out.println("Introduce las notas del alumno " + (i + 1));
			for (int j = 0; j < numero; j++) {
				System.out.println("Introduce las nota " + (j + 1));
				// Guardo la nota en la coordenada adecuada
				notas[i][j] = in.nextInt();

			}
		}
		mostrar(notas);
	}

	static void mostrar(int[][] tabla) {
		// Es otro bucle anidado porque tengo dos dimensiones
		for (int i = 0; i < tabla.length; i++) {
			for (int j = 0; j < tabla[i].length; j++) {
				System.out.print(tabla[i][j] + " | ");
			}
			System.out.println();
		}
	}

}


package com.trifulcas.saludo;

import java.util.Scanner;

public class EjemploMulti {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		// Pido el número de alumnos (alto de mi tabla multidimensional)
		System.out.println("Introduce el número de alumnos");
		int alumnos = in.nextInt();
		// Pido el número de notas (ancho de mi tabla multidimensional)
		System.out.println("Introduce el número de notas por alumno");
		int numero = in.nextInt();
		// Creo un array multidimensional con los datos que me han dado
		int[][] notas = new int[alumnos][numero];

		// Para pedir los datos tengo que usar un bucle anidado
		// El primero (i) es de los alumnos
		// El segundo (j) es de las notas
		// La combinación (i,j) son las coordenadas de mi array bidimensional
		for (int i = 0; i < alumnos; i++) {
			System.out.println("Introduce las notas del alumno " + (i + 1));
			for (int j = 0; j < numero; j++) {
				System.out.println("Introduce las nota " + (j + 1));
				// Guardo la nota en la coordenada adecuada
				notas[i][j] = in.nextInt();

			}
		}
		mostrar(notas);

		// Para cada alumno la nota más alta
		for (int i = 0; i < alumnos; i++) {
			System.out.print("La nota más alta del alumno " + (i + 1) + " es: ");
			int alta = 0;
			for (int j = 0; j < numero; j++) {
				if (alta < notas[i][j]) {
					alta = notas[i][j];
				}
				// alta=Math.max(alta,notas[i][j])
			}
			System.out.println(alta);
		}

		// Para cada alumno la media
		for (int i = 0; i < alumnos; i++) {
			System.out.print("La media de notas del alumno " + (i + 1) + " es: ");
			int suma = 0;
			for (int j = 0; j < numero; j++) {
				suma+=notas[i][j];
			}
			System.out.println(suma/numero);
		}
	}

	static void mostrar(int[][] tabla) {
		// Es otro bucle anidado porque tengo dos dimensiones
		for (int i = 0; i < tabla.length; i++) {
			for (int j = 0; j < tabla[i].length; j++) {
				System.out.print(tabla[i][j] + " | ");
			}
			System.out.println();
		}
	}

}

Utilizando funciones:


package com.trifulcas.saludo;

import java.util.Scanner;

public class EjemploMulti {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		// Pido el número de alumnos (alto de mi tabla multidimensional)
		System.out.println("Introduce el número de alumnos");
		int alumnos = in.nextInt();
		// Pido el número de notas (ancho de mi tabla multidimensional)
		System.out.println("Introduce el número de notas por alumno");
		int numero = in.nextInt();
		// Creo un array multidimensional con los datos que me han dado
		int[][] notas = new int[alumnos][numero];

		// Para pedir los datos tengo que usar un bucle anidado
		// El primero (i) es de los alumnos
		// El segundo (j) es de las notas
		// La combinación (i,j) son las coordenadas de mi array bidimensional
		for (int i = 0; i < alumnos; i++) {
			System.out.println("Introduce las notas del alumno " + (i + 1));
			for (int j = 0; j < numero; j++) {
				System.out.println("Introduce las nota " + (j + 1));
				// Guardo la nota en la coordenada adecuada
				notas[i][j] = in.nextInt();

			}
		}
		mostrar(notas);

		// Para cada alumno la nota más alta
		for (int i = 0; i < alumnos; i++) {
			System.out.print("La nota más alta del alumno " + (i + 1) + " es: ");
			System.out.println(mayor(notas[i]));
		}

		// Para cada alumno la media
		for (int i = 0; i < alumnos; i++) {
			System.out.print("La media de notas del alumno " + (i + 1) + " es: ");
			
			System.out.println(media(notas[i]));
		}
	}

	static void mostrar(int[][] tabla) {
		// Es otro bucle anidado porque tengo dos dimensiones
		for (int i = 0; i < tabla.length; i++) {
			for (int j = 0; j < tabla[i].length; j++) {
				System.out.print(tabla[i][j] + " | ");
			}
			System.out.println();
		}
	}
	static int mayor(int[] numeros) {
		int mayor=numeros[0];
		for(int n:numeros) {
			if (n>mayor) {
				mayor=n;
			}
		}
		return mayor;
	}
	static int media(int[] numeros) {
		int suma=0;
		for(int n:numeros) {
			suma+=n;
		}
		return suma/numeros.length;
	}

	/*
	 * notas[2][3] (2x3)
	 * 
	 * |3 | 4 | 5 | 
	 * |2 | 6 | 10 |
	 * 
	 * notas[0]=|3 | 4 | 5 | 
	 * notas[1]=|2 | 6 | 10 |
	 * 
	 * notas[0] es un array normal de una dimensión
	 * notas[1] es otro array de una dimensión
	 * int[] foo=notas[0]
	 */
	
}


Arrays Multidimensionales

public static void main(String[] args) {
		// Un array de 3 números
		int[] numeros = new int[3];

		// Un array de 3x3
		int[][] bidimensional = new int[3][3];

		// Un array de 3x3x3
		int[][][] tridimensional = new int[3][3][3];

		numeros[0] = 5;
		bidimensional[0][0] = 5;
		bidimensional[1][1] = 3;
		tridimensional[0][1][0] = 7;

		for (int i = 0; i < numeros.length; i++) {
			System.out.print(numeros[i]+" | ");
		}
		System.out.println();
		System.out.println();
		for (int i = 0; i < bidimensional.length; i++) {
			for (int j = 0; j < bidimensional[i].length; j++) {
				System.out.print(bidimensional[i][j]+" | ");
			}
			System.out.println();
		}
		System.out.println();
		System.out.println();
		// Array de dos dimensiones
		int[][] irregular= {{1,2,3},{4,5},{6,7,8,9},{10}};
		for (int i = 0; i < irregular.length; i++) {
			for (int j = 0; j < irregular[i].length; j++) {
				System.out.print(irregular[i][j]+" | ");
			}
			System.out.println();
		}
	}

Fill y sort en array

import java.util.Arrays;

public class ArraysJava {

	public static void main(String[] args) {
		String[] aulas= new String[5];
		// aulas:{...} Espacio vacío de 5 posiciones
		// Mostrar
		mostrar(aulas);
		// Nos rellena un array con el valor que le digamos
		Arrays.fill(aulas, "SIN NOMBRE");
		
		// Mostrar
		mostrar(aulas);
		//Asignar un valor individual a cada aula con el número
		for(int i=1;i<=aulas.length;i++) {
			aulas[i-1]="AULA "+i;
		}
		//Mostrar
		mostrar(aulas);
		// Cambiar el valor por índice
		aulas[2]="AUla Música";
		aulas[4]="AUla auxiliar";
		// Mostrar
		mostrar(aulas);
		
	// Ordenar aulas
		Arrays.sort(aulas);
		mostrar(aulas);
		// Sin importar mayúsculas/minúsculas
		Arrays.sort(aulas, String.CASE_INSENSITIVE_ORDER);
		mostrar(aulas);
		// Orden inverso
		Arrays.sort(aulas, Collections.reverseOrder());
		
		mostrar(aulas);
		
	}
	static void mostrar(String[] tabla) {
		for(String el:tabla) {
			System.out.println(el);
		}
	}

}

Arrays en Java

https://www.w3schools.com/java/java_arrays.asp

https://www.tutorialspoint.com/java/java_arrays.htm

package com.trifulcas.saludo;

public class ArraysJava {

	public static void main(String[] args) {
		String nombre;
		String[] nombres = { "Juan", "Eva", "Ana" };
		String[] alumnos = { "Juan", "Pepe", "Ana" };
		String[] aulas= new String[5];

		System.out.println(nombres[1]);

		// For tradicional
		for (int i = 0; i < nombres.length; i++) {
			System.out.println(nombres[i]);
		}

		// Foreach
		for (String n : nombres) {
			System.out.println(n);
		}
		System.out.println(estaEva(nombres));
		System.out.println(estaEva(alumnos));
		int[] longitudes=longitudes(alumnos);
		for (int a : longitudes) {
			System.out.println(a);
		}
	}

	public static boolean estaEva(String[] nombres) {
		for (String n : nombres) {
			if (n == "Eva") {
				return true;
			}
		}
		return false;
	}

	public static int[] longitudes(String[] nombres) {
		int[] l = new int[nombres.length];
		for (int i = 0; i < nombres.length; i++) {
			l[i] = nombres[i].length();
		}
		return l;
	}

}