Ejercicio Cartas


package com.trifulcas.cartas;

public abstract class Carta {
	private String palo;

	private int numero;

	
	public Carta(String palo, int numero) {
		this.palo = palo;
		this.numero = numero;
	}

	protected String getPalo() {
		return palo;
	}

	protected void setPalo(String palo) {
		this.palo = palo;
	}

	public int getNumero() {
		return numero;
	}

	protected void setNumero(int numero) {
		this.numero = numero;
	}
	
	public abstract int getValor();

	@Override
	public String toString() {
		return getNumero()+" de "+getPalo();
	}
	
}


package com.trifulcas.cartas;

public class Espanyola extends Carta {

	
	public Espanyola(String palo, int numero) {
		super(palo, numero);
		// TODO Auto-generated constructor stub
	}

	@Override
	public int getValor() {
		return getNumero()<10?getNumero():10;
	}

}


package com.trifulcas.cartas;

public class Francesa extends Carta {

	
	public Francesa(String palo, int numero) {
		super(palo, numero);
		// TODO Auto-generated constructor stub
	}

	@Override
	public int getValor() {
		// TODO Auto-generated method stub
		return getNumero();
	}

}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Collections;

public abstract class Baraja {
	protected ArrayList<Carta> baraja = new ArrayList<>();
	
	public Baraja() {
		/*
		baraja.add(new Espanyola("oros",1));
		baraja.add(new Espanyola("oros",2));
		baraja.add(new Espanyola("oros",3));
		baraja.add(new Espanyola("oros",4));
		baraja.add(new Espanyola("copas",7));
		*/
	}
	public void desordenar() {
		Collections.shuffle(baraja);
	}

	public Carta repartir() {
		if (baraja.isEmpty()) {
			return null;
		} else {
			return baraja.removeFirst();
		}
	}
	@Override
	public String toString() {
		return "Baraja [baraja=" + baraja + "]";
	}

	public abstract void crearMazo();
}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Arrays;

public class BarajaEspanyola extends Baraja {
	
	@Override
	public void crearMazo() {
		ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,10,11,12));
		ArrayList<String> palos=new ArrayList<>(Arrays.asList("Oros","Copas","Espadas","Bastos"));
		
		baraja.clear();
		for(int numero: numeros) {
			for(String palo: palos) {
				baraja.add(new Espanyola(palo,numero));
			}
		}
		
	}

}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Arrays;

public class BarajaFrancesa extends Baraja {
	
	@Override
	public void crearMazo() {
		ArrayList<Integer> numeros=new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13));
		ArrayList<String> palos=new ArrayList<>(Arrays.asList("Picas","Tréboles","Corazones","Diamantes"));
		
		baraja.clear();
		for(int numero: numeros) {
			for(String palo: palos) {
				baraja.add(new Francesa(palo,numero));
			}
		}
		
	}

}


package com.trifulcas.cartas;

import java.util.ArrayList;

public class Jugador {
	private String nombre;
	private ArrayList<Carta> mano;
	public Jugador(String nombre) {
		super();
		this.nombre = nombre;
		mano=new ArrayList<>();
	}
	protected String getNombre() {
		return nombre;
	}
	protected void setNombre(String nombre) {
		this.nombre = nombre;
	}
	protected ArrayList<Carta> getMano() {
		return mano;
	}
	protected void setMano(ArrayList<Carta> mano) {
		this.mano = mano;
	}
	protected void setMano(Carta carta) {
		this.mano.add(carta);
	}
	@Override
	public String toString() {
		return "Jugador [nombre=" + nombre + ", mano=" + mano + "]";
	}
	
	
	
}

package com.trifulcas.cartas;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Poquer {
	ArrayList<Jugador> jugadores;
	BarajaFrancesa baraja;
	
	public Poquer(ArrayList<Jugador> jugadores) throws Exception {
		if (jugadores.size()>10 || jugadores.size()<2) {
			throw new Exception("Número de jugadores incorrecto");
		}
		this.jugadores=jugadores;
		baraja=new BarajaFrancesa();
		baraja.crearMazo();
	}
	
	public Jugador jugar() {
		baraja.desordenar();
		for(Jugador j:jugadores) {
			for(int i=0;i<5;i++) {
				j.setMano(baraja.repartir());
			}
		}
		return getGanador();
	}
	public Jugador getGanador() {
		// poker: 4 cartas iguales 
		// full: 3 cartas iguales y dos iguales
		// trio: 3 cartas iguales
		// doble pareja: 2 y 2
		// pareja: 2 cartas iguales
		for (Jugador j:jugadores) {
			System.out.println(j);
			System.out.println(contarCartas(j.getMano()));
		}
		return jugadores.get(0);
		
	}
	public HashMap<Integer,Integer> contarCartas(ArrayList<Carta> cartas){
		HashMap<Integer,Integer> res=new HashMap<Integer,Integer>();
		
		for(Carta c:cartas) {
			res.put(c.getValor(), Collections.frequency(cartas.stream().map(Carta::getValor).toList(), c.getValor()));
		}
		
		return res;
	}
}
package com.trifulcas.cartas;

import java.util.ArrayList;

public class ProbarCartas {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		Baraja miBaraja=new BarajaFrancesa();
		miBaraja.crearMazo();
		System.out.println(miBaraja);
		Carta c=miBaraja.repartir()	;
		Jugador j=new Jugador("Ana");
		System.out.println(j);
		System.out.println(c);
		System.out.println(miBaraja);
		miBaraja.desordenar()	;
		ArrayList<Jugador> jugadores=new ArrayList<>();
		jugadores.add(j);
		jugadores.add(new Jugador("Eva"));
		try {
			Poquer test=new Poquer(jugadores);
			test.jugar();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(miBaraja);
	}

}


Ejercicios Interfaces

package com.trifulcas.Interfaces;

public interface ISaludo {
	public String saludar();
}

package com.trifulcas.Interfaces;

public interface IDespedida {
	public String adios();
}

package com.trifulcas.Interfaces;

public class Amigo1 implements ISaludo {

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Ola k ase???";
	}

}

package com.trifulcas.Interfaces;

public class Amigo2 implements IDespedida{

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Adios con el corazón";
	}

}

package com.trifulcas.Interfaces;

public class Amigo1 implements ISaludo {

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Ola k ase???";
	}

}

package com.trifulcas.Interfaces;

public class Amigo2 implements IDespedida{

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Adios con el corazón";
	}

}

package com.trifulcas.Interfaces;

public class Amigo3 implements ISaludo, IDespedida {

	@Override
	public String adios() {
		// TODO Auto-generated method stub
		return "Hasta luego Lucas";
	}

	@Override
	public String saludar() {
		// TODO Auto-generated method stub
		return "Como están los máquinas?";
	}

}

package com.trifulcas.Interfaces;

public interface ITotal {
	public int total();
}

package com.trifulcas.Interfaces;

import java.util.ArrayList;

import com.trifulcas.cartas.Carta;

public class Notas implements ITotal {
	private ArrayList<Integer> notas;
	
	public Notas() {
		notas=new ArrayList<>();
	}
	
	public int addNumero(int nota) {
		notas.add(nota);
		return notas.size();
	}

	@Override
	public int total() {
		int total=0;
		for(int nota:notas) {
			total+=nota;
		}
		return total;
	}
}

package com.trifulcas.Interfaces;

import java.util.ArrayList;

public class Alumno implements ITotal, ISaludo {
	public ArrayList<String> alumnos;
	
	public Alumno() {
		alumnos=new ArrayList<>();
	}

	@Override
	public String saludar() {
		
		return "Hola "+(alumnos.size()>0?alumnos.get(0):"");
	}

	@Override
	public int total() {
		// TODO Auto-generated method stub
		return alumnos.size();
	}
}

package com.trifulcas.Interfaces;

public interface IFigura {
	public void dibujar();
}

package com.trifulcas.Interfaces;

public interface IFigura2D extends IFigura {
	public double area();
}


package com.trifulcas.Interfaces;

public interface IFigura3D extends IFigura2D{
	public double volumen();
}


package com.trifulcas.Interfaces;

public class Cuadrado implements IFigura2D {
	private double lado;
	
	protected double getLado() {
		return lado;
	}
	protected void setLado(double lado) {
		this.lado = lado;
	}
	public Cuadrado(double lado) {
		this.lado=lado;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return lado*lado;
	}

	@Override
	public void dibujar() {
		System.out.println("Cuadrado");

	}

}

Cartas Java

package com.trifulcas.cartas;

public abstract class Carta {
	private String palo;

	private int numero;

	protected String getPalo() {
		return palo;
	}

	protected void setPalo(String palo) {
		this.palo = palo;
	}

	public int getNumero() {
		return numero;
	}

	protected void setNumero(int numero) {
		this.numero = numero;
	}
	
	public abstract int getValor();

	@Override
	public String toString() {
		return getNumero()+" de "+getPalo();
	}
	
}


package com.trifulcas.cartas;

public class Espanyola extends Carta {

	
	@Override
	public int getValor() {
		return getNumero()<10?getNumero():10;
	}

}

package com.trifulcas.cartas;

public class Francesa extends Carta {

	@Override
	public int getValor() {
		// TODO Auto-generated method stub
		return getNumero();
	}

}


package com.trifulcas.cartas;

import java.util.ArrayList;

public class Baraja {
	private ArrayList<Carta> baraja=new ArrayList<>();
	
	public int addCarta(Carta carta) {
		baraja.add(carta);
		return baraja.size();
	}
	public int totalValor() {
		int total=0;
		for(Carta c:baraja) {
			total+=c.getValor();
		}
		return total;
	}
}

package com.trifulcas.cartas;

public class ProbarCartas {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Francesa f= new Francesa();
		f.setPalo("Picas");
		f.setNumero(8);
		System.out.println(f);
		
		Baraja miBaraja=new Baraja();
		
		miBaraja.addCarta(f);
		Espanyola e=new Espanyola();
		e.setPalo("Oros");
		e.setNumero(12);
		miBaraja.addCarta(e);
		
		System.out.println(miBaraja.totalValor());
	}

}

Clases Figuras

package com.trifulcas.figuras;

public abstract class Figura {
	private String nombre;
	
	public abstract void dibujar();

	protected String getNombre() {
		return nombre;
	}

	protected void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	
}

package com.trifulcas.figuras;

public abstract class Figura2D extends Figura {
	public abstract double area();
}

package com.trifulcas.figuras;

public abstract class Figura3D extends Figura2D{

	public abstract double volumen();
}

package com.trifulcas.figuras;

public class Cuadrado extends Figura2D {
	private double lado;
	
	protected double getLado() {
		return lado;
	}
	protected void setLado(double lado) {
		this.lado = lado;
	}
	public Cuadrado(double lado) {
		this.lado=lado;
	}
	@Override
	public double area() {
		// TODO Auto-generated method stub
		return lado*lado;
	}

	@Override
	public void dibujar() {
		System.out.println("Cuadrado");

	}

}

package com.trifulcas.figuras;

public class Circulo extends Figura2D {
	private double radio;
	
	
	protected double getRadio() {
		return radio;
	}

	protected void setRadio(double radio) {
		this.radio = radio;
	}

	public Circulo(double radio) {
		
		this.radio = radio;
	}

	@Override
	public double area() {
		return Math.PI*radio*radio;
	}

	@Override
	public void dibujar() {
		System.out.println("Círculo");

	}

}

package com.trifulcas.figuras;

public class Cubo extends Figura3D {
	private double lado;

	protected double getLado() {
		return lado;
	}

	protected void setLado(double lado) {
		this.lado = lado;
	}

	public Cubo(double lado) {
		this.lado = lado;
	}

	@Override
	public double volumen() {
		return Math.pow(lado, 3);
	}

	@Override
	public double area() {
		// Se puede hacer más sencillo pero así también
		// Ojo que acoplamos cubo a cuadrado
		Cuadrado c=new Cuadrado(lado);
		return c.area() * 6;
	}

	@Override
	public void dibujar() {
		System.out.println("Cubo");
	}

}

package com.trifulcas.figuras;

public class Esfera extends Figura3D {
private double radio;
	
	
	protected double getRadio() {
		return radio;
	}

	protected void setRadio(double radio) {
		this.radio = radio;
	}

	public Esfera(double radio) {
		
		this.radio = radio;
	}

	@Override
	public double volumen() {
		return 4/3*Math.PI*Math.pow(radio, 3);
	}

	@Override
	public double area() {
		return 4*Math.PI*Math.pow(radio, 2);
	}

	@Override
	public void dibujar() {
		// TODO Auto-generated method stub

	}

}
Cuadrado c=new Cuadrado(2);
		System.out.println(c.area());
		
		Circulo ci=new Circulo(1);
		System.out.println(ci.area());
		
		Cubo cu=new Cubo(2);
		System.out.println(cu.area());
		System.out.println(cu.volumen());
		
		Esfera e=new Esfera(1);
		System.out.println(e.area());
		System.out.println(e.volumen());


 

Y más ejemplos interfaces


public interface IGirar {
	public void izquierda();
	public void derecha();
}

public interface IAvanzar {
	public void adelante();
	public void atras();
}

public interface IVertical {
	public void arriba();
	public void abajo();
}

public class Tren implements IAvanzar {

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}


public class Coche implements IAvanzar, IGirar {

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}

public class Torreta implements IGirar {

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

}

public class Helicoptero implements IAvanzar, IGirar, IVertical {

	@Override
	public void arriba() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void abajo() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void izquierda() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void derecha() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void adelante() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void atras() {
		// TODO Auto-generated method stub
		
	}

}

Ejemplos Interfaces

public interface IVolar {
	public void volar();
}

public interface INadar {
	public void nadar();
}

public interface ICorrer {
	public void correr();
}

public interface IActivo {
	public boolean esActivo();
}

public interface ISaludo {
	public void hola();
	public void adios();
}

public class Delfin implements INadar, IActivo{

	@Override
	public void nadar() {
		System.out.println("Soy un delfín nadando en el inmenso mar");
		
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return true;
	}

}

public class Pato implements IVolar, ICorrer, INadar, IActivo{

	@Override
	public void nadar() {
		System.out.println("Pato Nadando");
		
	}

	@Override
	public void correr() {
		System.out.println("Corriendo");
		
	}

	@Override
	public void volar() {
		System.out.println("Volando");
		
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return true;
	}

}

public class Submarino implements INadar, IActivo {

	@Override
	public void nadar() {
		System.out.println("Inmersión!!");
	}

	@Override
	public boolean esActivo() {
		// TODO Auto-generated method stub
		return false;
	}

}


	public static void main(String[] args) {
		// El mismo polimorfismo que teniamos con la herencia
		// Lo tenemos con los interfaces

		ArrayList<INadar> cosas = new ArrayList<>();
		comprobar(new Delfin());
		comprobar(new Pato());
		comprobar(new Submarino());

		List<String> alumnos = new ArrayList<String>();

		Saludos pepe=new Saludos();
		pepe.hola();
		ISaludo ana=new Saludos();
		ana.adios();
	}

	public static void comprobar(IActivo elemento) {
		if (elemento.esActivo()) {
			System.out.println("A tope con la actividad");
		}
	}

Ejemplo Abstracta

public abstract class FiguraGeometrica {

	private int lados;

	public int getLados() {
		return lados;
	}

	public void setLados(int lados) {
		this.lados = lados;
	}
	
	public void yuju() {
		for(int i=0;i<10;i++) {
			System.out.println("¡YUJU!!");
		}
	}
	// Como un contrato en el que las clases derivadas
	// Se comprometen a implementarlos
	public abstract double perimetro();
	public abstract double area();
	
}

public class Cuadrado extends FiguraGeometrica {

	@Override
	public double perimetro() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public double area() {
		// TODO Auto-generated method stub
		return 0;
	}

	

}


public class Rectangulo extends FiguraGeometrica {
	private double ancho;
	private double alto;

	public Rectangulo(double ancho, double alto) {
		this.ancho = ancho;
		this.alto = alto;
	}

	public Rectangulo(double ancho) {
		this(ancho,1);
	}

	public Rectangulo() {
		this(1);
	}

	public double getAncho() {
		return ancho;
	}

	public void setAncho(double ancho) {
		this.ancho = ancho;
	}

	public double getAlto() {
		return alto;
	}

	public void setAlto(double alto) {
		this.alto = alto;
	}

	public double perimetro() {
		return ancho * 2 + alto * 2;
	}

	public double area() {
		return ancho * alto;
	}

	public boolean oblongo() {
		return ancho > alto;
	}

}

Ejemplos polimorfismo


public class Empleado {
	private String nombre;
	protected int sueldo;
	
	// getters y setters
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public void setSueldo(int sueldo) {
		if (sueldo>900 && sueldo <10000) {
			this.sueldo = sueldo;
		}
		
	}
	public double sueldoNeto() {
		return sueldo*.87;
	}
	
	@Override
	public String toString() {
		return "Empleado [nombre=" + nombre + ", sueldo=" + sueldo + "]";
	}
	
}


public class Comercial extends Empleado {
	private double comision;
	private int ventas;
	
	public double getComision() {
		return comision;
	}
	public void setComision(double comision) {
		this.comision = comision;
	}
	public int getVentas() {
		return ventas;
	}
	public void setVentas(int ventas) {
		this.ventas = ventas;
	}
	@Override
	public double sueldoNeto() {
		return super.sueldoNeto()+ventas*comision;
	}
	
	
	
}


public class Directivo extends Empleado {
	@Override
	public double sueldoNeto() {
		return super.sueldoNeto()*2;
	}
}

	ArrayList<Vehiculo> tropa=new ArrayList<>();
		
		tropa.add(new Coche()); // Un coche es un vehículo
		tropa.add(new Bicicleta()); // Esto también
		tropa.add(new Coche());
		tropa.add(new Tanque()); // Y eso también lo es
		
		for(Vehiculo v:tropa) {
			v.acelerar(); // al acelerar estoy llamando al método de cada objeto
			v.derecha();
			System.out.println(v);
		}
		
		Empleado pepe=new Empleado();
		pepe.setSueldo(1000);
		Comercial ana=new Comercial();
		ana.setSueldo(1000);
		ana.setComision(.05);
		ana.setVentas(20000);
		Directivo antonio=new Directivo();
		antonio.setSueldo(5000);
		
		ArrayList<Empleado> empresa=new ArrayList<>();
		empresa.add(pepe);
		empresa.add(ana);
		empresa.add(antonio);
		int total=0;
		for(Empleado e:empresa) {
			total+=e.sueldoNeto();
			System.out.println(e.sueldoNeto());
		}
		System.out.println(total);
		
	}

Ejercicio Vehículo


public class Vehiculo {
	private int velocidad;
	private int direccion;
	protected int velocidadMaxima;
	protected int velocidadIncremento;
	protected int direccionIncremento;
	public Vehiculo() {
		// Me está diciendo como se comporta mi clase
		velocidadMaxima=200;
		velocidadIncremento=10;
		direccionIncremento=10;
	}
	public void acelerar() {
		velocidad+=velocidadIncremento;
		if (velocidad>velocidadMaxima) {
			velocidad=velocidadMaxima;
		}
	}
	public void frenar() {
		velocidad-=velocidadIncremento;
		if (velocidad<0) {
			velocidad=0;
		}
	}
	
	public void izquierda() {
		direccion+=direccionIncremento;
		if (direccion>=360) {
			direccion-=360;
		}
	}
	public void derecha() {
		direccion-=direccionIncremento;
		if (direccion<0) {
			direccion+=360;
		}
	}
	@Override
	public String toString() {
		return "Vehiculo [velocidad=" + velocidad + ", direccion=" + direccion + "]";
	}
	
	
	
}


public class Coche extends Vehiculo {
	public Coche() {
		velocidadMaxima=150;
	}
}


public class Bicicleta extends Vehiculo {

	public Bicicleta() {
		velocidadIncremento=3;
	}
}


public class Tanque extends Vehiculo {
	public Tanque() {
		direccionIncremento=90;
	}
}

Vehiculo v=new Vehiculo();
		v.acelerar();
		v.acelerar();
		v.derecha();
		v.derecha();
		System.out.println(v);
		for(int i=0;i<50;i++) {
			v.acelerar();
			v.derecha();
			System.out.println(v);
		}
		
		Coche c= new Coche();
		for(int i=0;i<50;i++) {
			c.acelerar();
			
			System.out.println(c);
		}
		
		Bicicleta b= new Bicicleta();
		for(int i=0;i<50;i++) {
			b.acelerar();
			
			System.out.println(b);
		}
		
		Tanque t=new Tanque();
		for(int i=0;i<5;i++) {
			t.derecha();
			
			System.out.println(t);
		}

Ejercicio Ikea


public class Producto {
	protected String nombre;
	protected String familia;
	public Producto(String nombre, String familia) {
		super();
		this.nombre = nombre;
		this.familia = familia;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getFamilia() {
		return familia;
	}
	public void setFamilia(String familia) {
		this.familia = familia;
	}
	
	
}

public class Asiento extends Producto{
	protected int patas;
	
	public Asiento(String nombre, String familia, int patas) {
		super(nombre, familia);
		this.patas=patas;
	}
	
	
}

public class Sillon extends Asiento {
	private String color;
	public Sillon(String nombre, String familia) {
		super(nombre, familia, 4);
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}

	
}

public class Sofa extends Asiento {

	private String material;
	
	public Sofa(String nombre, String familia, int patas) {
		super(nombre, familia, patas);
	}

	public String getMaterial() {
		return material;
	}

	public void setMaterial(String material) {
		this.material = material;
	}

}
Producto p=new Producto("Börkjlon","Strogürl");
		Asiento a=new Asiento("Gïorlda","Weuipr",4);
		
		Sillon sillon=new Sillon("Forlidër","Forlüder");
		Sofa sofa= new Sofa("Gïorlda","Weuipr",4);