Estoy tratando de hacer una actividad con excepciones en la que tengo una clase persona que guarda los datos de nombre, apellidos, email, código postal, etc.
Esta misma clase al mismo tiempo es usada por otra clase que será la que cree las personas en esta clase tengo un método que lanza la excepción creada en otro objeto anteriormente.
Clase de la excepcion InvalidInputException
public final class InvalidInputException extends Exception {
/**
*
*/
private static final long serialVersionUID = 1L;
private String messageErrorList[];
public InvalidInputException(String[] errorList) {
}
public String[] getMessageErrorList() {
return messageErrorList;
}
public void setMessageErrorList(String[] messageErrorList) {
this.messageErrorList = messageErrorList;
}
}
Metodo de la clase para crear personas
Scanner lector = new Scanner(System.in);
private ArrayList<String> errorList;
Act18Validator validar = new Act18Validator();
public AlumnesFactory(Scanner lector, Act18Validator validar) {
this.lector = lector;
this.errorList = new ArrayList<>();
this.validar = validar;
}
public Alumne create() throws InvalidInputException {
String name = this.getFirstName();
String surname =this.getSurname();
String age = this.getAge();
String dni = this.getDni();
String zip = this.getZip();
String email = this.getEmail();
if(this.siHayErrores()){
throw new InvalidInputException(this.getErrorList());
}
Alumne personas = new Alumne(name, surname,age, dni, zip, email);
return personas;
}
Tengo que añadir que tengo otra clase creada llamada validator que con expresiones regulares valida cada tipo de dato insertado. Esta clase se crea como objeto en clase para crear personas y luego despues del metodo create() se va llamando en cada pregunta en los metodos como esto de aqui bajo:
private String getEmail(String email) {
System.out.println("Cual es su email?");
email = lector.nextLine();
if (!validator.mail(email)) {
setErrorList("El email introducido no es valido");
}
return email;
}
Y tres metodos para guardar los errores producidos.
private void setErrorList(String errorList) {
this.errorList.add(errorList);
}
private String [] getErrorList() {
return this.errorList.toArray(new String[errorList.size()]);
}
private boolean siHayErrores(){
return !this.errorList.isEmpty();
}
Cuando lanzo mi programa desde mi clase Main:
public class App {
public static void main(String[] args) {
Act18Validator validar = new Act18Validator();
Scanner scanner = new Scanner(System.in);
AlumnesFactory persona = new AlumnesFactory(scanner, validar);
try {
persona.create();
}
catch(InvalidInputException e) {
System.out.println("Errores contabilizados: ");
showErrorList(e.getMessageErrorList());
}
}
public static void showErrorList(String [] e) {
for (Object fallo: e){
System.out.println(fallo);
}
}
}
Si no hay errores funciona correctamente, pero al detectar algún error me salta
Exception in thread "main" java.lang.NullPointerException
Situado aqui segun se el error lo da 'e' porq esta null pero nose como arreglarlo:
public static void showErrorList(String [] e) {
for (Object fallo: e){
System.out.println(fallo);
}
}
Lo que tengo que hacer es que cuando se lance una excepción me contabilice el error es decir si hago 3 errores me contabilizara 3 errores y me los enseñará por pantalla al terminar la ronda de preguntas. Me estoy volviendo loca buscando el error, ya que soy nueva con esto de tratar excepciones y no se donde estoy fallando alguien tiene alguna idea?
Si se necesita ampliar el código lo añado sin problema pero iba a ser muy extenso.
Muchísimas gracias de antemano.