package objetos;
/**
* @author GALIA diciembre 2014 . Clase que define un objeto Persona. No se
* tienen en cuenta las excepciones, ni la validación de los datos
* introducidos
*/
public class Persona {
/* Constantes. */
private final static char SEXO_POR_DEFECTO = 'H';
final int FLACO = -1;
final int IDEAL = 0;
final int GORDITO = 1;
/* Atributos privados. */
private String nombre;
private String DNI;
private int edad;
private char sexo;
private double peso;
private double altura;
/**
* Constructor por defecto
*/
/*
* la palabra clave this referencia a la instancia actual.Distingue los
* atributos de los parámetros y variables locales dentro de la
* implementación de un método.
*/
public Persona() {
this("", 0, SEXO_POR_DEFECTO, 0, 0);
/* inicializa los atributos por defecto,el DNI lo devuelve un método */
}
/**
* Constructor con 3 parámetros
*
* @param nombre
* @param edad
* @param sexo
*/
public Persona(String nombre, int edad, char sexo) {
this(nombre, edad, sexo, 0, 0);
}
/**
* Constructor con 5 parámetros
*
* @param nombre
* @param edad
* @param sexo
* @param peso
* @param altura
*/
public Persona(String nombre, int edad, char sexo, double peso,
double altura) {
this.nombre = nombre;
this.edad = edad;
this.peso = peso;
this.altura = altura;
generarDni();
comprobarSexo(sexo);
}
/* Métodos privados,lo exige el enunciado */
private void comprobarSexo(char sexo) {
// Si el sexo no es una H o una M, por defecto es H
if (sexo != 'H' && sexo != 'M') {
this.sexo = 'H';
} else {
this.sexo = sexo;
}
}
private void generarDni() {
final int divisor = 23;
// Generamos un número de 8 dígitos
int numeroDNI = ((int) Math.floor(Math.random()
* (100000000 - 10000000) + 10000000));
int resultado = numeroDNI - (numeroDNI / divisor * divisor);
// Calculamos la letra del DNI
char letraDNI = generaLetraDNI(resultado);
// Pasamos el DNI a String
DNI = Integer.toString(numeroDNI) + letraDNI;
}
private char generaLetraDNI(int resultado) {
char letras[] = { 'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D',
'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E' };
return letras[resultado];
}
/* Métodos públicos, de acceso a los atributos,setters y getters */
/**
* Modifica el nombre de la persona
*
* @param nombre
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* Modifica la edad de la persona
*
* @param edad
*/
public void setEdad(int edad) {
this.edad = edad;
}
/**
* Modifica el sexo de la persona, comprueba que es correcto
*
* @param sexo
*/
public void setSexo(char sexo) {
this.sexo = sexo;
}
/**
* Modifica el peso de la persona
*
* @param peso
*/
public void setPeso(double peso) {
this.peso = peso;
}
/**
* Modifica la altura de la persona
*
* @param altura
*/
public void setAltura(double altura) {
this.altura = altura;
}
/**
* Calcula el índice de masa corporal
*
* @return código numérico(la constante)
*
* -1: la persona esta por debajo de su peso ideal 0: la persona
* esta en su peso ideal 1: la persona esta por encima de su peso
* ideal
*/
public int calcularIMC() {
// Calculamos el peso de la persona
double pesoAhora = peso / (Math.pow(altura, 2));
// elevamos la altura(base) a cuadrado, exponente 2()
// Según el peso, devuelve un código
if (pesoAhora >= 20 && pesoAhora <= 25) {
return IDEAL;
} else if (pesoAhora < 20) {
return FLACO;
} else {
return GORDITO;
}
}
/**
* Indica si la persona es mayor de edad
*
* @return true si es mayor de edad y false es menor de edad
*/
public boolean esMayor() {
boolean mayor = false;
if (edad >= 18) {
mayor = true;
}
return mayor;
}
/**
* Devuelve información del objeto
*
* @return cadena con toda la información
*/
/*
* (sin Javadoc)
*
* @see java.lang.Object#toString()
*/
public String toString() {
/* Me gusta mucho el operador ternario, queda muy elegante */
String sexo = (this.sexo == 'H') ? "hombre" : "mujer";
return "Resultados:\n" + "Nombre: " + nombre + "\n" + "Sexo: " + sexo
+ "\n" + "Edad: " + edad + " años\n" + "DNI: " + DNI + "\n"
+ "Peso: " + peso + " kg\n" + "Altura: " + altura + " metros\n";
}
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.