https://github.com/juanpablofuentes/Java/tree/master/PiedraPapelTijera
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Ejercicios Files
public class Alumno { // El public es un modificador de acceso // Quiere decir que cualquiera puede acceder al valor public String nombre; // Tenemos tres sabores de protección // public, protected y private private ArrayList<Integer> notas; // Los parámetros que queremos poner al crear la clase public Alumno(String nombre) { // Las cosas que queremos que se ejecuten // cuando creamos la clase // this.nombre es el nombre del objeto // nombre es el parámetro que le pasamos this.nombre = nombre; notas = new ArrayList<Integer>(); } public Alumno() { // Llamando a la sobrecarga del constructor this("anonimo"); } public int ponNota(int nota) { // Me aseguro de que mis notas están entre 0 10 if (nota > 0 && nota <= 10) { notas.add(nota); } return notas.size(); } public double media() { double total = 0; // Desde dentro de la clase si que puedo acceder for (int nota : notas) { total += nota; } return total / this.notas.size(); } }
public static void main(String[] args) { ArrayList<Alumno> alumnos=importar("archivo.txt"); System.out.println(estadoCarpeta("c:\\pepe")); ArrayList<String> nombres = new ArrayList<>(); Scanner sc = new Scanner(System.in); for (int i = 0; i < 5; i++) { System.out.println("Introduce nombre " + i); nombres.add(sc.next()); } Path path = Paths.get("nombres.txt"); try { Files.write(path, nombres, StandardOpenOption.CREATE); } catch (IOException e) { System.out.println(e.getMessage()); } } public static int estadoCarpeta(String ruta) { Path path = Paths.get(ruta); if (!Files.isDirectory(path)) { return -1; } try { List<Path> ficheros = Files.list(path).collect(Collectors.toList()); if (ficheros.size() == 0) { return 0; } // TODO: Crear un método aparte for (Path fichero : ficheros) { if (Files.isDirectory(fichero)) { return 2; } } return 1; } catch (IOException e) { System.out.println(e.getMessage()); return -1; } } public static ArrayList<Alumno> importar(String ruta) { List<String> contenido; // Leer fichero Path path = Paths.get(ruta); try { contenido = Files.readAllLines(path); } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } // Crear arraylist /* * Nombre;nota Ana;5;6;7 Pep;3;3 Eva;5;5 */ ArrayList<Alumno> alumnos= new ArrayList<Alumno>(); for(int i=1;i<contenido.size();i++) { String[] elementos=contenido.get(i).split(";"); Alumno temp=new Alumno(elementos[0]); for(int j=1;j<elementos.length;j++) { temp.ponNota(Integer.parseInt(elementos[j])); } alumnos.add(temp); } return alumnos; }
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 + "]"; } public void logFichero(String ruta) { ArrayList<String> resultado = new ArrayList<>(); // Un arraylist con los datos que quiero escribir resultado.add("Nombre jugador: " + this.getNombre()); resultado.add("Cartas:"); for (Carta carta : mano) { resultado.add(carta.toString()); } // Escribir los datos try { Path path = Paths.get(ruta); if (!Files.exists(path)) { Files.createFile(path); } if (Files.isWritable(path)) { Files.write(path, resultado, StandardOpenOption.TRUNCATE_EXISTING); }else { // TODO: Lanzar excepción System.out.println("No se puede escribir"); } } catch (IOException e) { System.out.println(e.getMessage()); } } }
public static void main(String[] args) { Jugador ana=new Jugador("Ana Pi"); ana.setMano(new Espanyola("oros",12)); ana.setMano(new Espanyola("espadas",6)); ana.setMano(new Espanyola("copas",8)); ana.setMano(new Espanyola("oros",10)); ana.logFichero("cartas_ana.txt"); }
File, Files y Path
public static void main(String[] args) { File carpeta = new File("c:\\xampp"); exploreDirectory(carpeta); } public static void exploreDirectory(File directory) { // Obtiene una lista de los archivos y directorios contenidos en el directorio File[] files = directory.listFiles(); // Recorre cada archivo o directorio for (File file : files) { if (file.isFile()) { // Si es un archivo, imprime su nombre System.out.println(file.getName()); } else if (file.isDirectory()) { // Si es un directorio, llama recursivamente al método exploreDirectory(file); } } } Path path = Paths.get("C:/pepe/ejemplo.jpeg"); System.out.println(path.getFileName()); System.out.println(path.getName(0)); System.out.println(path.getParent()); System.out.println(path.getRoot()); path = Paths.get("archivo.txt"); System.out.println(path.getFileName()); System.out.println(path.getName(0)); System.out.println(path.getParent()); System.out.println(path.toAbsolutePath()); public static void main(String[] args) throws IOException { Path path = Paths.get("c:\\pepe\\archivo.txt"); String cadena="o muy bien\n"; Files.writeString(path, cadena,StandardOpenOption.APPEND ); ArrayList<String> texto=new ArrayList<>(Arrays.asList("adios","hola","que tal")); Files.write(path, texto, StandardCharsets.ISO_8859_1,StandardOpenOption.TRUNCATE_EXISTING); try { List<String> contenido = Files.readAllLines(path); for(String linea:contenido) { System.out.println(linea); } } catch (IOException e) { System.out.println(e); } } public static void main(String[] args) { Path path = Paths.get("c:\\pepe\\archivo2.txt"); ArrayList<String> texto=new ArrayList<>(Arrays.asList("adios","hola","qué tal")); try { Files.write(path, texto, StandardCharsets.ISO_8859_1,StandardOpenOption.CREATE_NEW); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { Path path = Paths.get("c:\\pepe\\archivo.txt"); List<String> contenido=Files.readAllLines(path,StandardCharsets.ISO_8859_1); for(String linea:contenido) { System.out.println(linea); } }catch(Exception ex) { System.out.println(ex.getMessage()); } }
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; } }