Ay! siempre se me queda una cara de tonto cuando veo que la solución era tan sencilla xD
Muchas gracias Lorenzo!! al final se me ha quedado así, he cambiado bastantes cosas, sobre todo en el método para generar el DNI. Creo que ya queda poco, ahora tengo problemas con el método comprobarSexo() ya que me pide que por defecto sea H si el valor introducido no es correcto, pero tal y como lo tengo no funciona porque si pongo J imprime J.
Y por otro lado, algo no funciona en el método calcularIMC() porque siempre me da 1, y no se muy bien como utilizar el boolean para el esMayorDeEdad() y que al invocar el método me salga algo por pantalla. En general es que todavía no entiendo bien el funcionamiento del return creo yo, mañana le daré un vistazo más detenidamente.
Clase Persona:
package persona;
public class Persona {
private String nombre;
private int edad;
private final String DNI;
private char sexo;
private double peso;
private double altura;
public Persona() {
nombre = "";
edad = 0;
DNI= generaDNI();
sexo = comprobarSexo();
peso = 0.0;
altura = 0.0;
}
public Persona(String nombre, int edad, char sexo) {
this.nombre = nombre;
this.edad = edad;
this.DNI= generaDNI();
this.sexo = sexo;
this.peso = 0.0;
this.altura = 0.0;
}
public Persona(String nombre, int edad, String DNI, char sexo, double peso, double altura) {
this.nombre = nombre;
this.edad = edad;
this.DNI = generaDNI();
this.sexo = sexo;
this.peso = peso;
this.altura = altura;
}
public void calcularIMC() {
final int DEBAJO_PESO_IDEAL = -1;
final int PESO_IDEAL = 0;
final int SOBREPESO = 1;
double imc;
imc = peso / altura * altura;
if (imc < 18.5) {
System.out.println(DEBAJO_PESO_IDEAL);
} else if (imc >= 18.5 && imc <= 25) {
System.out.println(PESO_IDEAL);
} else {
System.out.println(SOBREPESO);
}
}
public boolean esMayorDeEdad() {
if (edad >= 18){
return true;
}
else{
return false;
}
}
private char comprobarSexo() {
if (sexo != 'H' || sexo != 'M') {
sexo = 'H';
}
return sexo;
}
public String toString() {
return nombre+"/"+edad+"/"+DNI+"/"+sexo+"/"+peso+"/"+altura;
}
private String generaDNI() {
double numero;
int numero2;
int dnirandom=0;
char letra;
String juegoCaracteres;
String nif;
for (int i = 0; i < 8; i++) {
numero = Math.floor(Math.random() * (0 - 9) + 9);
numero2 = (int) numero;
dnirandom = dnirandom*10+numero2;
}
juegoCaracteres="TRWAGMYFPDXBNJZSQVHLCKET";
int modulo = dnirandom % 23;
letra = juegoCaracteres.charAt(modulo);
nif = (""+dnirandom+letra+"");
return nif;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setEdad(int edad) {
this.edad = edad;
}
public void setSexo(char sexo) {
this.sexo = sexo;
}
public void setPeso(double peso) {
this.peso = peso;
}
public void setAltura(double altura) {
this.altura = altura;
}
}
Clase Ejecutable:
package persona;
import java.util.Scanner;
public class Ejecutable {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Introduce tu nombre: ");
String n = scanner.next();
System.out.println("Introduce tu edad: ");
int ed = scanner.nextInt();
System.out.println("Introduce tu sexo (H o M): ");
char sx = scanner.next().charAt(0);
System.out.println("Introduce tu peso: ");
double p = scanner.nextDouble();
System.out.println("Introduce tu altura: ");
double al = scanner.nextDouble();
Persona o1 = new Persona (n, ed, "", sx, p, al);
Persona o2 = new Persona(n, ed, sx);
Persona o3 = new Persona();
o1.calcularIMC();
o1.esMayorDeEdad();
o2.calcularIMC();
o2.esMayorDeEdad();
o3.setNombre("Fulano");
o3.setEdad(28);
o3.setSexo('J');
o3.setPeso(70);
o3.setAltura(1.88);
o3.calcularIMC();
o3.esMayorDeEdad();
System.out.println(o1);
System.out.println(o2);
System.out.println(o3);
}
}