Autor Tema: Ejercicio de Excepciones para revisar que no acaba de funcionar  (Leído 1330 veces)

drate

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 24
    • Ver Perfil
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;
   }




Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re: Ejercicio de Excepciones para revisar que no acaba de funcionar
« Respuesta #1 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.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".