Buenas tengo un problema con un programa en java.
El programa solo tiene que pedirme datos de una persona y de las otras 2 personas generarlas aleatoriamente, pero en vez de eso, solo me rellena los datos de la persona que he introducido los datos y las otras 2 los deja o vacíos o copia los datos introducidos por mi.
¿Qué tendría que cambiar para que genere los datos de la persona1 y persona2 aleatoriamente?
Archivo principal:
package ejercicio1;
public class Ejercicio1 {
public static void main
(String[] args
) {
// Definimos variables y constantes
final int SOBREPESO = 1;
final int INFRAPESO = -1;
final int PESOIDEAL = 0;
Entrada entrada= new Entrada();
int edad;
float peso;
float altura;
// Obtenemos datos de la persona
System.
out.
println("Obtencion de datos"); System.
out.
println("------------------"); nombre = entrada.obtenerString("Dame el nombre de la persona:");
edad = entrada.obtenerEntero("Dame la edad de " + nombre);
sexo = entrada.obtenerString("Dime el sexo de " + nombre);
peso = entrada.obtenerFloat("Dime el peso de " + nombre);
altura = entrada.obtenerFloat("Dame la altura para " + nombre);
// Creamos las personas con los distintos constructores
System.
out.
println("\nCreando las personas"); System.
out.
println("--------------------"); Persona p1 = new Persona();
System.
out.
println("Persona 1 creada!"); Persona p2 = new Persona(nombre, edad, sexo);
System.
out.
println("Persona 2 creada!"); Persona p3 = new Persona(nombre, edad, sexo, peso, altura);
System.
out.
println("Persona 3 creada!");
//Mostramos la relacion de peso
System.
out.
println("\nMostrando relacion de pesos"); System.
out.
println("---------------------------"); System.
out.
print("El peso de la persona 1 es: ");
switch (p1.calcularIMC()) {
case SOBREPESO:
System.
out.
println("SOBREPESO"); break;
case INFRAPESO:
System.
out.
println("INFRAPESO"); break;
case PESOIDEAL:
System.
out.
println("PESOIDEAL"); break;
}
System.
out.
print("El peso de la persona 2 es: ");
switch (p2.calcularIMC()) {
case SOBREPESO:
System.
out.
println("SOBREPESO"); break;
case INFRAPESO:
System.
out.
println("INFRAPESO"); break;
case PESOIDEAL:
System.
out.
println("PESOIDEAL"); break;
}
System.
out.
print("El peso de la persona 3 es: ");
switch (p3.calcularIMC()) {
case SOBREPESO:
System.
out.
println("SOBREPESO"); break;
case INFRAPESO:
System.
out.
println("INFRAPESO"); break;
case PESOIDEAL:
System.
out.
println("PESOIDEAL"); break;
}
// Mostramos la mayoria de edad
System.
out.
println("\nMostrando mayorias de edad"); System.
out.
println("--------------------------"); System.
out.
println("La persona 1 es: " + (p1.
esMayorDeEdad() ? "Mayor de edad" : "Menor de edad")); System.
out.
println("La persona 2 es: " + (p2.
esMayorDeEdad() ? "Mayor de edad" : "Menor de edad")); System.
out.
println("La persona 3 es: " + (p3.
esMayorDeEdad() ? "Mayor de edad" : "Menor de edad"));
// Mostramos todos los datos con el metodo toString() que ha sido Override
System.
out.
println("\nMostrando todos los datos"); System.
out.
println("-------------------------"); System.
out.
println(p1.
toString()); System.
out.
println(p2.
toString()); System.
out.
println(p3.
toString()); }
}
Entrada:
package ejercicio1;
import java.util.Scanner;
public class Entrada {
private Scanner entrada
= new Scanner
(System.
in);
public int obtenerEntero
(String msg
) { boolean loop = true;
int valor=0;
do {
try {
teclado = entrada.nextLine();
loop = false;
System.
out.
println("El valor introducido debe ser un numero entero!!!"); }
} while (loop);
return valor;
}
public float obtenerFloat
(String msg
) { boolean loop = true;
float valor=0;
do {
try {
teclado = entrada.nextLine();
valor
= Float.
parseFloat(teclado
); loop = false;
System.
out.
println("El valor introducido debe ser un numero decimal!!!"); }
} while (loop);
return valor;
}
return entrada.nextLine();
}
public char obtenerChar
(String msg
) { return entrada.nextLine().charAt(0);
}
}
Persona:
package ejercicio1;
public class Persona {
private final static char DEFAULT_SEX = 'H';
private final static int SOBREPESO = 1;
private final static int INFRAPESO = -1;
private final static int PESOIDEAL = 0;
private int edad;
private int DNI;
private char letraDNI;
private char sexo;
private float peso;
private float altura;
public Persona(){
nombre = "";
edad = 0;
DNI = generaDNI();
letraDNI= generaLetraDNI();
sexo = DEFAULT_SEX;
peso = 0;
altura = 0;
}
this.nombre = nombre;
this.edad = edad;
DNI = generaDNI();
letraDNI = generaLetraDNI();
this.sexo = comprobarSexo(sexo.charAt(0));
peso = 0;
altura = 0;
}
public Persona
(String nombre,
int edad,
String sexo,
float peso,
float altura
){ this.nombre = nombre;
this.edad = edad;
this.DNI = generaDNI();
letraDNI = generaLetraDNI();
this.sexo = comprobarSexo(sexo.charAt(0));
this.peso = peso;
this.altura = altura;
}
public int calcularIMC(){
float imc
= this.
peso/(int)Math.
pow(this.
altura/100,
2); if (imc>=25) return SOBREPESO;
else if (imc<18.5) return INFRAPESO;
else return PESOIDEAL;
}
public boolean esMayorDeEdad(){
return (this.edad>=18) ? true : false ;
}
return "Los datos de la persona son:\n" +
"Nombre: " + this.nombre + "\n" +
"Edad: " + this.edad + "\n" +
"DNI : " + this.DNI + "-" + this.letraDNI + "\n" +
"Sexo: " + ( (this.sexo=='H') ? "Hombre":"Mujer" ) + "\n" +
"Peso: " + this.peso + "\n" +
"Altura: " + this.altura + "\n";
}
private char comprobarSexo(char sexo){
if(sexo=='M' || sexo=='m') return 'M';
else return 'H';
}
private int generaDNI(){
return (int)(Math.
random()*100000000); }
private char generaLetraDNI(){
String letras
= "TRWAGMYFPDXBNJZSQVHLCKE"; return letras.charAt(this.DNI%23);
}
}
Espero que puedan ayudarme.
Un saludo.