Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - CrossoverLw

Páginas: [1]
1
Hola a todos,

estoy aprendiendo a programar por primera vez, y he elegido Java. Os voy a copiar el ejercicio que estoy tratando de realizar, y ahora os comento donde estoy atascado, que es como darme contra un muro porque por más que estoy mirando por internet no encuentro la solución.

Ejercicio:
Citar
Haz una clase llamada Persona que siga las siguientes condiciones:
  • Sus atributos son: nombre, edad, DNI, sexo(H hombre, M mujer), peso y altura. No queremos que se accedan directamente a ellos. Piensa qué modificador de acceso es el más adecuado, también su tipo. Si quieres añadir algún atributo puedes hacerlo.
  • Por defecto, todos los atributos menos el DNI serán valores por defecto según su tipo (0 números, cadena vacía para String, etc.).

Se implementarán varios constructores:
  • Un constructor por defecto.
  • Un constructor con el nombre, edad y sexo, el resto por defecto.
  • Un constructor con todos los atributos como parámetro

Los métodos que se imprelentarán son:
  • calcularIMC(): calculará si la persona está en su peso ideal (peso en kg/(altura^2 enm)), devuelve un -1 si está por debajo de su peso ideal, un 0 si está en su peso ideal y un 1 si tiene sobrepeso. Te recomiendo que uses constantes para devolver estos valores.
  • esMayorDeEdad(): indica si es mayor de edad, devuelve un booleano.
  • comprobarSexo(): comprueba que el sexo introducido es correcto. Si no es correcto, será H. No será visible al exterior.
  • toString(): devuelve toda la información del objeto, por pantalla.
  • generaDNI(): genera un número aleatorio de 8 cifras, genera a partir de este su número su letra correspondiente. Este método será invocado cuando se construya el objeto. Puedes dividir el método para que te sea más fácil. No será visible al exterior.
  • Métodos set de cada parámetro, excepto de DNI

Ahora crea una clase ejecutable que haga lo siguiente:
  • Pide por teclado el nombre, la edad, sexo, peso y altura.
  • Crea 3 objetos de la clase anterior, el primer objeto obtendrá las anteriores variables pedidas por teclado, el segundo objeto obtendrá todos los anteriores menos el peso y la altura y el último por defecto, para este último utiliza los métodos set para darle a los atributos un valor.
  • Para cada objeto, deberá comprobar si está en su peso ideal, tiene sobrepeso o por debajo de su peso ideal con un mensaje.
  • Indicar para cada objeto si es mayor de edad.
  • Por último, mostrar la información de cada objeto.

Bien, ahora os pongo el código que he llegado a escribir:

Clase Persona

Código: [Seleccionar]
import java.util.Scanner;

public class Persona {

    private String nombre;
    private int edad;
    private long dni;
    private char sexo;
    private double peso;
    private double altura;

    public Persona() { [color=red]//primer constructor por defecto, con constructor por defecto se refiere a esto? [/color]
        nombre = "";
        edad = 0;
        dni = 0; [color=red]// me pide que todo por defecto menos dni, pero no se que poner en dni, si no pongo algo me da error[/color]
        sexo = 'H';
        peso = 0.0;
        altura = 0.0;
    }

    public Persona(String nombre, int edad, char sexo) { [color=red]//segundo constructor con nombre, edad y sexo. El resto por defecto. Tampoco se si estoy haciendo un uso correcto del this.[/color]
        this.nombre = nombre;
        this.edad = edad;
        this.sexo = sexo;
        this.dni = 0;
        this.sexo = 'H';
        this.peso = 0.0;
        this.altura = 0.0;
    }

    public Persona(String nombre, int edad, long dni, char sexo, double peso, double altura) { [color=red]// Tercer constructor con todos los atributos como parámetros[/color]
        this.nombre = nombre;
        this.edad = edad;
        this.dni = dni;
        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 void comprobarSexo(char sexo) {
        if (sexo != 'H' || sexo != 'M') {
            sexo = 'H';
        }
    }

    public toString() { [color=red]//todavía no se bien como funciona este método[/color]

    }

    private void generaDNI() { [color=red]//intenté usar (int) en lugar de Math.floor para convertir decimal a entero, pero me generaba siempre la cifra 1 y la letra A, no entiendo el motivo[/color]
        double numero;
        int numero2;
        char letra;

        for (int i = 0; i < 9; i++) {
            numero = Math.floor(Math.random() * (0 - 9 + 1) + 9);
            numero2 = (int) numero;
            System.out.print(numero2);
        }
        numero = Math.floor(Math.random() * (65 - 90 + 1) + 90);
        numero2 = (int) numero;
        letra = (char) numero2;
        System.out.println(letra);
    }

    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 con el main

Código: [Seleccionar]
    public static void main(String[] args) { [color=red]//esto lo tengo que escribir dentro de una clase ejecutable[/color]
        Persona dni = new Persona(); [color=red]// solo quería comprobar que funcionaba[/color]
        dni.generaDNI();

        Scanner scanner = new Scanner(System.in); [color=red]// intenté utilizar las variables de los constructores pero no me dejaba, imagino que porque el objeto scanner no llama a ningún constructor de esta clase, así que declaré otras variables para luego incluirlas como parámetros en el objeto. Aquí me he hecho la picha un lío así que no se qué estoy haciendo.[/color]
        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); [color=red]//esto lo he visto en la red, me imagino que el método .charAt() toma la posición que escribas en el paréntesis, aunque no lo tengo muy claro[/color]
        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); [color=red]//aquí llegamos a mi principal problema, como creo un objeto con las variables anteriores pedidas por teclado, si no tengo un constructor que tenga ese número de atributos como parámetros?[/color]
    }
}

Ya no he seguido porque de aquí no paso, seguro que el lo siguientes objetos tengo más problemas, pero a lo mejor si consigo solucionar este también soluciono los siguientes.

Espero haberlo escrito con la suficiente claridad, no lo he puesto en código porque si no no podía darle color a los comentarios, o al menos, no se hacerlo. Si debo quitar el color y ponerlo en código lo modifico.

Gracias

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".