Ayuda con programa java

Iniciado por Asking4java, 1 Febrero 2018, 14:31 PM

0 Miembros y 1 Visitante están viendo este tema.

Asking4java

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:
Código (java) [Seleccionar]
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();

String nombre;
int edad;
String sexo;
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:
Código (java) [Seleccionar]
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;
String teclado;

do {
try {
System.out.println(msg);
teclado = entrada.nextLine();
valor = Integer.parseInt(teclado);
loop = false;
} catch (Exception e) {
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;
String teclado;

do {
try {
System.out.println(msg);
teclado = entrada.nextLine();
valor = Float.parseFloat(teclado);
loop = false;
} catch (Exception e) {
System.out.println("El valor introducido debe ser un numero decimal!!!");
}
} while (loop);
return valor;
}

public String obtenerString(String msg) {
System.out.println(msg);
return entrada.nextLine();
}

public char obtenerChar(String msg) {
System.out.println(msg);
return entrada.nextLine().charAt(0);
}

}


Persona:
Código (java) [Seleccionar]
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 String nombre;
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;
}

public Persona(String nombre,int edad,String sexo){
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 ;
}

public String toString(){

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.

rub'n

#1

tus 2 primeros constructores están con valores por default a cero , null etc, y quizás por ahí el detalle, aunque aun no se exactamente el issue que tu ves, por tu descripción del mismo.

Ajustando ambos constructores me imagino que quieres que solo se llene una persona por ti, y los demás de manera aleatoria, si es así ? entonces esos 2 constructores deberían llenarse de manera Aleatoria.



Código (java) [Seleccionar]

public Persona(){
 nombre   = getRandomNomb();
 edad   = getRandomAge();
 DNI   = generaDNI();
 letraDNI = generaLetraDNI();
 sexo   = DEFAULT_SEX;
 peso   = getRandomWeight();
 altura   = getRandomHeight();
}

public Persona(String nombre, int edad, String sexo){
 this.nombre = getRandomNomb();
 this.edad = getRandomAge();
 DNI = generaDNI();
 letraDNI = generaLetraDNI();
 this.sexo = comprobarSexo(sexo.charAt(0));
 peso = getRandomWeight();
 altura = getRandomHeight();
}


Código (java) [Seleccionar]


import java.security.SecureRandom;
import java.text.DecimalFormat;

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 static final String NOMBRES[] = {"Pedro","Asking4java","Raul","Asking4java","rubn"};

       private static final Float MIN = 5.0f;//peso minimo
       private static final Float MAX = 150.0f; //peso max

       private static final SecureRandom SR = new SecureRandom();
       private static final DecimalFormat dosDigi = new DecimalFormat("#.##");

       private String nombre;
       private int edad;
       private int DNI;
       private char letraDNI;
       private char sexo;
       private float peso;
       private float altura;
       private static Integer count = 0;

       public Persona(){
           nombre = getRandomNomb();
           edad = getRandomAge();
           DNI = generaDNI();
           letraDNI= generaLetraDNI();
           sexo = DEFAULT_SEX;
           peso = getRandomWeight();
           altura = getRandomHeight();
       }

       public Persona(String nombre, int edad, String sexo){
           this.nombre = getRandomNomb();
           this.edad = getRandomAge();
           DNI = generaDNI();
           letraDNI = generaLetraDNI();
           this.sexo = comprobarSexo(sexo.charAt(0));
           peso = getRandomWeight();
           altura = getRandomHeight();
       }

       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 = peso / (int)Math.pow(this.altura,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 ;
       }

       public String toString(){

           return "Los datos de la persona "+( ++ count )+" 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);
       }

       //add Random names
       private String getRandomNomb() {
           return NOMBRES[SR.nextInt(NOMBRES.length)];
       }
       //add Random ages
       private Integer getRandomAge() {
           return 4 + SR.nextInt(50);
       }
       //add Random weight
       private Float getRandomWeight() {
           final Float w = SR.nextFloat() * (MAX - MIN) + MIN;
           return Float.valueOf(dosDigi.format(w).replace(",","."));
       }
       //add Random fake height
       private Float getRandomHeight() {
           //formateo 2 decimales
           final Float a = 1 + SR.nextFloat();
           return Float.valueOf(dosDigi.format(a).replace(",","."));
       }
}



Otra cosa para calcular el indice de masa muscular, distinto a la linea 50 de tu clase Persona, tenia un 100 no c xq


(IMC = peso [kg]/ estatura ^ 2 )
Código (java) [Seleccionar]

public int calcularIMC(){
           float imc = peso / (int)Math.pow(this.altura,2);
           if (imc>=25) return SOBREPESO;
           else if (imc<18.5) return INFRAPESO;
           else return PESOIDEAL;
}


Código (java) [Seleccionar]


import javax.swing.*;
import java.awt.*;

public class TestExec {

   public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
       UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

       // Definimos variables y constantes
       final int SOBREPESO = 1;
       final int INFRAPESO = -1;
       final int PESOIDEAL = 0;

       TextArea textArea = new TextArea();
       EntradaScanner entrada= new EntradaScanner();

       String nombre;
       int edad;
       String sexo;
       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("-------------------------");
       final String pp1 = p1.toString();
       final String pp2 = p2.toString();
       final String pp3 = p3.toString();

       System.out.println(pp1);
       System.out.println(pp2);
       System.out.println(pp3);

       final StringBuilder sb = new StringBuilder();
       sb.append(pp1).append("\n");
       sb.append(pp2).append("\n");
       sb.append(pp3).append("\n");
       textArea.setText(sb.toString());
       textArea.setEditable(false);
       JOptionPane.showMessageDialog(null,textArea,"Info",JOptionPane.INFORMATION_MESSAGE);
   }
}




Output

Código (java) [Seleccionar]

Obtencion de datos
------------------
Dame el nombre de la persona:
Ruben
Dame la edad de Ruben
20
Dime el sexo de Ruben
H
Dime el peso de Ruben
70
Dame la altura para Ruben
1.80

Creando las personas
--------------------
Persona 1 creada!
Persona 2 creada!
Persona 3 creada!

Mostrando relacion de pesos
---------------------------
El peso de la persona 1 es: INFRAPESO
El peso de la persona 2 es: SOBREPESO
El peso de la persona 3 es: PESOIDEAL

Mostrando mayorias de edad
--------------------------
La persona 1 es: Mayor de edad
La persona 2 es: Menor de edad
La persona 3 es: Mayor de edad

Mostrando todos los datos
-------------------------
Los datos de la persona 1 son:
Nombre: Asking4java
Edad: 42
DNI : 46699932-L
Sexo: Hombre
Peso: 6.25
Altura: 1.28

Los datos de la persona 2 son:
Nombre: Pedro
Edad: 10
DNI : 42140392-E
Sexo: Hombre
Peso: 119.02
Altura: 1.14

Los datos de la persona 3 son:
Nombre: Ruben
Edad: 20
DNI : 47758856-T
Sexo: Hombre
Peso: 70.0
Altura: 1.8


Process finished with exit code 0






Y otra cosa me gusta el Bodybuilding y la formula de calcular el IMC no lo es todo hay otros factores como % de grasa corporal, que indican que una persona con mayor IMC de 25 estéticamente no se vea mal, dado que tiene mas musculo que grasa, e inclusive también este saludable.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Asking4java

Gracias, al final conseguí solucionarlo. Implemente algunas ideas que me dejaste y añadí nuevas cosas y conseguí realizarlo.