Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: drate en 30 de Junio 2023, 20:21

Título: Ejercicio de Excepciones para revisar que no acaba de funcionar
Publicado por: drate en 30 de Junio 2023, 20:21
Buenas tardes. Subo enunciado y código de ejercicio de Excepciones que no acabo de resolver. Muchas gracias, un saludo.

Un equipo de programadores desea participar en una maratón de programación. El equipo tiene los siguientes atributos:
• Nombre del equipo.
• Universidad que está representando al equipo.
• Lenguaje de programación que va a utilizar el equipo en la competencia.
• Tamaño del equipo.
Se requiere un constructor que inicialice los atributos del equipo. El equipo está conformado por varios programadores, mínimo dos
y máximo tres. Cada programador posee nombre y apellidos. Se requieren además los siguientes métodos:
• Un método para determinar si el equipo está completo.
• Un método para añadir programadores al equipo. Si el equipo está lleno se debe imprimir la excepción correspondiente.
• Un método para validar los atributos nombre y apellidos de un programador para que reciban datos que sean solo texto. Si se
reciben datos numéricos se debe generar la excepción correspondiente. Además, no se permiten que los campos String tengan
una longitud igual o superior a 20 caracteres.
• En un método main se debe crear un equipo solicitando sus datos por teclado y se validan los nombres y apellidos de los
programadores

public class EquipoDeProgramadores {
   private String nombreEquipo;
   private String universidad;
   private String lenguajeProgramacion;
   private int tamanoEquipo;
   private String[] programadores = new String[2];

   public String[] getProgramadores() {
      return programadores;
   }

   public EquipoDeProgramadores() {

   }

   public EquipoDeProgramadores(String nombreEquipo, String universidad, String lenguajeProgramacion,
         int tamanoEquipo) {

      this.nombreEquipo = nombreEquipo;
      this.universidad = universidad;
      this.lenguajeProgramacion = lenguajeProgramacion;
      this.tamanoEquipo = tamanoEquipo;
      for (int i = 0; i < programadores.length; i++) {
         programadores = null;
      }

   }

   public boolean estaLleno(String[] programadores) {
      return programadores[2] != null;
   }

   public void anadirProgramador(String nombre) {
      int i = 0;
      try {

         validarNombre(nombre);

         while (i <= 2) {
            if (programadores == null) {
               programadores = nombre;
               break;
            } else {
               i++;
            }
         }

      } catch (Exception e) {
         System.out.println("formato de nombre incorrecto.");
      }

   }

   public boolean comprobar() throws Exception {
   
      if (estaLleno(programadores)) {
      
         throw new Exception("el equipo esta lleno");

      } else
         return true;
   }

   public boolean validarNombre(String componente) {

      try {
         verificarEntrada(componente);

      } catch (Exception e) {
         System.out.println("El nombre introducido no tiene el formato correcto.");
         return false;
      }
      return true;
   }

   public boolean verificarEntrada(String componente) throws Exception {

      for (int j = 0; j < componente.length(); j++) {
         char r = componente.charAt(j);
         if ('0' <= r && r <= '9') {
            throw new Exception("el dato introducio no es un nombre válido");

         }

      }
      if (componente.length() > 20) {
         throw new Exception("longitud del nombre excedida");

      }
      return true;
   }

   public void setNombreEquipo(String nombreEquipo) {
      this.nombreEquipo = nombreEquipo;
   }

   public void setUniversidad(String universidad) {
      this.universidad = universidad;
   }

   public void setLenguajeProgramacion(String lenguajeProgramacion) {
      this.lenguajeProgramacion = lenguajeProgramacion;
   }

   public void setTamanoEquipo(int tamanoEquipo) {
      this.tamanoEquipo = tamanoEquipo;
   }

   public String getNombreEquipo() {
      return nombreEquipo;
   }

   public String getUniversidad() {
      return universidad;
   }

   public String getLenguajeProgramacion() {
      return lenguajeProgramacion;
   }

   public int getTamanoEquipo() {
      return tamanoEquipo;
   }

   public void getProgramadores(String[] programadores) {
      this.programadores = programadores;
   }



Título: Re: Ejercicio de Excepciones para revisar que no acaba de funcionar
Publicado por: Kabuto en 01 de Julio 2023, 14:15
Creo que la intención del enunciado es que además de una clase "equipo", hagamos también una clase "programador".
Además, de esta forma es más fácil organizar las ideas porque podemos separar las distintas tareas que piden en varias clases.

La clase Programador básicamente solo tiene dos atributos, nombre y apellidos.
Pero sí podemos hacer que sea ella quien valide si los datos que reciba por constructor cumplen los requisitos. Si no los cumple, lanzará excepción.
De esta forma, será imposible construir un Programador si no recibe unos datos válidos.
Código: [Seleccionar]
public class Programador {

private String nombre;
private String apellidos;

public Programador(String nombre, String apellidos) throws Exception {

if (nombre.length() >= 20)
throw new Exception("Campo NOMBRE ha de tener menos de 20 caracteres");
if (apellidos.length() >= 20)
throw new Exception("Campo APELLIDOS ha de tener menos de 20 caracteres");

if (!cadenaEsValida(nombre))
throw new Exception("Campo NOMBRE no admite caracteres numericos, solo texto.");
if (!cadenaEsValida(apellidos))
throw new Exception("Campo APELLIDOS no admite caracteres numericos, solo texto.");

this.nombre = nombre;
this.apellidos = apellidos;
}

private boolean cadenaEsValida(String cadena) {
for (int i = 0; i < cadena.length(); i++) {
char car = cadena.charAt(i);
if (car >= '0' && car <= '9')
return false;
}

return true;
}

public String getNombre() {
return nombre;
}

public String getApellidos() {
return apellidos;
}

}

Luego la clase EquipoProgramadores.
Sería muy parecida a la que estabas escribiendo tú, ya la tenías bien encaminada.
Solo que ahora el array no será de String, si no de la clase Programador
Algo que sí hay que tener en cuenta, es que este array su tamaño dependerá del atributo "tamanoEquipo"

Esta clase se encargará de lanzar excepción si intentamos agregarle un Programador cuando el array ya esté completo.
Código: [Seleccionar]
public class EquipoProgramadores {

private String nombreEquipo;
private String universidad;
private String lenguajeProgramacion;
private int tamanoEquipo;
private Programador[] programadores;

public EquipoProgramadores(String nombreEquipo, String universidad,
String lenguajeProgramacion, int tamanoEquipo) {
this.nombreEquipo = nombreEquipo;
this.universidad = universidad;
this.lenguajeProgramacion = lenguajeProgramacion;
this.tamanoEquipo = tamanoEquipo;
programadores = new Programador[tamanoEquipo];
}

public boolean equipoLleno() {
return programadores[tamanoEquipo-1] != null;
}

public void agregarProgramador(Programador prog) throws Exception {
if (equipoLleno())
throw new Exception("El EQUIPO esta lleno, no admite otro PROGRAMADOR");
else {
//Buscamos hueco libre en el array
for (int i = 0; i < tamanoEquipo; i++)
if (programadores[i] == null) {
programadores[i] = prog;
break;
}
}
}

public String getNombreEquipo() {
return nombreEquipo;
}

public String getUniversidad() {
return universidad;
}

public String getLenguajeProgramacion() {
return lenguajeProgramacion;
}

public int getTamanoEquipo() {
return tamanoEquipo;
}

public Programador[] getProgramadores() {
return programadores;
}

}

Como ves, al repartir las funcionalidades en dos clases, estas quedan más ligeras de código y más fáciles de elaborar y luego leerlas.

Ahora solo faltaría una clase main donde podamos crear un Equipo y añadirle Programadores.

Podemos hacer que primero se pidan los datos para construir el Equipo.
Una vez construido, podemos hacer un menú donde el usuario pueda elegir entre añadir Programadores y mostrar los datos del Equipo.
De esta forma, se puede ir viendo como el array recibe elementos cada vez que añadimos un nuevo miembro al Equipo
Código: [Seleccionar]
public class CrearEquipo {

private static Scanner teclado = new Scanner(System.in);
private static EquipoProgramadores equipo = null;

public static void main(String[] args) {

System.out.println("\t\tCREAR EQUIPO");
System.out.println("\t\t----- ------\n");
//Pedimos datos del EQUIPO
System.out.print("Nombre del equipo: ");
String nombreEquipo = teclado.nextLine();
System.out.print("Universidad que representa: ");
String universidad = teclado.nextLine();
System.out.print("Lenguaje programacion: ");
String lenguaje = teclado.nextLine();
int tamanio = 0;
do {
System.out.print("Miembros del equipo(min:2/max:3): ");
tamanio = Integer.parseInt(teclado.nextLine());
}while (tamanio < 2 || tamanio > 3);

//Construimos EQUIPO
equipo = new EquipoProgramadores(nombreEquipo, universidad, lenguaje, tamanio);

//Menu para añadir PROGRAMADORES y mostrar datos del EQUIPO
int opcion = 0;
do {
System.out.println("\n\t\tGESTION EQUIPO");
System.out.println("\t\t------- ------");
System.out.println("[1] -- Agregar PROGRAMADOR al EQUIPO");
System.out.println("[2] -- Mostrar datos del EQUIPO");
System.out.println("[3] -- TERMINAR PROGRAMA");
System.out.print("Opcion: ");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
nuevoProgramador();
break;
case 2:
mostrarEquipo(equipo);
break;
case 3:
break;
default:
System.out.println("Opcion incorrecta");
}
}while(opcion != 3);
}

private static void nuevoProgramador() {
//Creamos un PROGRAMADOR
Programador nuevo = null;
do {
System.out.println("\n\t\tNUEVO PROGRAMADOR");
System.out.println("\t\t----- -----------\n");
System.out.print("Nombre: ");
String nombre = teclado.nextLine();
System.out.print("Apellidos: ");
String apellidos = teclado.nextLine();
try {
nuevo = new Programador(nombre, apellidos);
}
catch(Exception ex) {
System.out.println("ERROR: " + ex.getMessage());
}
}while(nuevo == null);

//Añadimos al EQUIPO
try {
equipo.agregarProgramador(nuevo);
}
catch(Exception ex) {
System.out.println("ERROR: " + ex.getMessage());
}

}

private static void mostrarEquipo(EquipoProgramadores equipo) {
System.out.println("\n\t\tDATOS DEL EQUIPO");
System.out.println("\t\t----- --- ------\n");
System.out.println("Nombre: " + equipo.getNombreEquipo());
System.out.println("Universidad: " + equipo.getUniversidad());
System.out.println("Lenguaje: " + equipo.getLenguajeProgramacion());
System.out.println("Cantidad de miembros: " + equipo.getTamanoEquipo());
System.out.println("\t\tMIEMBROS");
System.out.println("\t\t--------");
for (Programador prog: equipo.getProgramadores()) {
if (prog == null)
System.out.println("--> Miembro no registrado");
else
System.out.println("--> " + prog.getNombre() + " " + prog.getApellidos());
}
}

}

Si hacemos una ejecución del programa, en consola vemos como se producen y capturan excepciones cuando corresponde y como el array va recibiendo elementos.
Citar
      CREAR EQUIPO
      ----- ------

Nombre del equipo: Coding Serious
Universidad que representa: Barataria
Lenguaje programacion: Jaba xD
Miembros del equipo(min:2/max:3): 4
Miembros del equipo(min:2/max:3): 3

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 2

      DATOS DEL EQUIPO
      ----- --- ------

Nombre: Coding Serious
Universidad: Barataria
Lenguaje: Jaba xD
Cantidad de miembros: 3
      MIEMBROS
      --------
--> Miembro no registrado
--> Miembro no registrado
--> Miembro no registrado

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 1

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: Perico
Apellidos: Palotes

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 2

      DATOS DEL EQUIPO
      ----- --- ------

Nombre: Coding Serious
Universidad: Barataria
Lenguaje: Jaba xD
Cantidad de miembros: 3
      MIEMBROS
      --------
--> Perico Palotes
--> Miembro no registrado
--> Miembro no registrado

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 1

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: S4r4
Apellidos: Baras
ERROR: Campo NOMBRE no admite caracteres numericos, solo texto.

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: Sara
Apellidos: Baras

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 1

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: Michael
Apellidos: Indalecio-Galecio-Santana
ERROR: Campo APELLIDOS ha de tener menos de 20 caracteres

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: Michael
Apellidos: Galecio

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 2

      DATOS DEL EQUIPO
      ----- --- ------

Nombre: Coding Serious
Universidad: Barataria
Lenguaje: Jaba xD
Cantidad de miembros: 3
      MIEMBROS
      --------
--> Perico Palotes
--> Sara Baras
--> Michael Galecio

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 1

      NUEVO PROGRAMADOR
      ----- -----------

Nombre: Elon
Apellidos: Musk
ERROR: El EQUIPO esta lleno, no admite otro PROGRAMADOR

      GESTION EQUIPO
      ------- ------
[1] -- Agregar PROGRAMADOR al EQUIPO
[2] -- Mostrar datos del EQUIPO
[3] -- TERMINAR PROGRAMA
Opcion: 3


Espero haberte sido de ayuda. Pregunta lo que necesites.

Un saludo.