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.
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
ProgramadorAlgo 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.
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
Equipopublic 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.
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.