Autor Tema: algoritmo que resuelva el problema a través de un diagrama de flujo Java código  (Leído 1952 veces)

Cesar0691

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Hola, tengo que hacer este ejercicio pero no sé por qué no puedo seguir adelante.

Especifica el algoritmo que resuelva el problema a través de un diagrama de flujo.
Con base en el diagrama de flujo, escribe un programa en Java que pida al usuario que introduzca su edad y su género (M para masculino y F para femenino).
Con base en el año de nacimiento determina a qué generación pertenece (apóyate en la tabla de generaciones que se describe en la parte inferior).
Una vez realizadas las operaciones necesarias, imprime en pantalla un texto como el siguiente:
 

Usted nació en el año ___, usted es un ____ que pertenece a la generación ___.

Generación Inicio Fin

Del Silencio 1925 1945

Baby boomers 1946 1964

Generación X 1965 1979

Milennials 1980 2000

Generación Z 2000 En adelante.



Y esto es lo que llevo:


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

public class Generacion {

public static void main(String[] args) {
// TODO Esbozo de método generado automáticamente
Scanner entrada = new Scanner(System.in);
System.out.println("Proporcione año de nacimiento:");
int año = entrada.nextInt();
System.out.println("Proporcione Genero:");
int genero = entrada.nextInt();

if (año <= 1945) {
System.out.println("Usted nacio en el"+(año), "usted es un"+(genero)"que pertenece a la generacion Del Silencio");
}


}   


}

Pero al momento de hacer la prueba me sale mal :(
« Última modificación: 12 de Abril 2022, 19:47 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 983
    • Ver Perfil
Re: Ayuda no se que estoy haciendo mal
« Respuesta #1 en: 27 de Mayo 2021, 01:49 »
EL género es una letra: M o F.
No debes guardarlo como int:
Código: [Seleccionar]
System.out.println("Proporcione Genero:");
int genero = entrada.nextInt();

Si no como String, o como char

Código: [Seleccionar]
System.out.println("Proporcione Genero:");
char genero = entrada.nextLine().charAt(0);

Luego, para optimizar el código:
Vas a tener que hacer varios IF e IF ELSE, no hagas un System.out con la cadena completa en cada uno de ellos.
Además, la cadena está mal construida, la coma que hay detrás de (año) tendría que ir entre comillas, justo delante de la palabra usted

Código: [Seleccionar]
      if (año <= 1945) {
         System.out.println("Usted nacio en el"+(año), "usted es un"+(genero)"que pertenece a la generacion Del Silencio");
      }

Repetir ese System.out para todos los IF que aún te faltan, es redundante.
En lugar de eso, declara una variable String llamada generacion y lo que haces en los IF, es determinar su valor. Luego tras terminar los IF, usas esa variable para construir la cadena final.

De hecho, puedes hacer lo mismo con el género, ya que no puedes mostrar directamente la M o la F que te ha de dar el usuario, porque queda feo decirle a alguien:
"Usted es una M.."
 :o (¿Que soy una M...? ¿Este programa me está llamando MIERDA..??)  ;D

Mira, algo parecido a este código que pongo.
Por cierto, fíjate en como he escrito la línea donde pido el año.
Cambio dos cosas respecto a tu código:
1 - No uso la ñ. Se puede usar y funcionará en la mayoría de los casos, pero al ser un carácter que no pertenece al alfabeto inglés, a la larga puedes encontrarte situaciones en la que te de problemas.
Así que conviene evitar la ñ y no usarla ni para nombres de variables, de clases o de métodos.
En una cadena de texto, sí se puede usar.

2 - Mucho más importante. No uso el método nextInt() para pedir el año.
Lo pido usando nextLine(), que retorna un String y automáticamente lo transformo (parseo) en un valor int.
Código: [Seleccionar]
anio = Integer.parseInt(entrada.nextLine());¿Por qué?
Porque el Scanner, el objeto que usamos para pedir datos por teclado, dará problemas si tras pedir un valor con nextInt(), queremos pedir un valor con nextLine(), que es lo que vamos a necesitar para pedir el char del género.

Es un poco largo de explicar el motivo técnico...
Simplemente recuerda que cuando hagas un programa Java, si SOLO vas a pedir valores numéricos, puedes usar nextInt() sin problemas.
Pero si en el mismo programa vas a pedir valores numéricos(int, double, float...) y también de texto(String o char), entonces mejor pedir todos los valores con el método nextLine(), y luego transformarlo a int, a double, o a lo que se necesite.

De lo contrario dará problemas. Tu mismo puedes comprobarlo si quieres, cuando ya tengas el programa terminado y funcionando. Prueba a pedir el año con nextInt() y verás como luego no te será posible pedir el género para obtener un char.

Bueno, te dejo aquí el código de como podría hacerse para que quede más optimizado.
Solo falta completar los ELSE IF para determinar la generación según el año introducido.

Código: [Seleccionar]
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);   
        //Principales variables del programa
        int anio = 0;
        String genero = "", generacion = "";
     
        System.out.println("Proporcione año de nacimiento:");
        anio = Integer.parseInt(entrada.nextLine());
     
        System.out.println("Proporcione Genero:");
        char gen = entrada.nextLine().charAt(0);
       
        //Determinamos el Genero
        if (gen == 'M' || gen == 'm')
            genero = "Masculino";
        else if (gen == 'F' || gen == 'f')
            genero = "Femenino";
        else
            genero = "Otro";
     
        //A continuacion determinamos la generacion
        if (anio <= 1945)
            generacion = "Del Silencio";
        else if (anio >= 1946 && anio <= 1964)
            generacion = "Baby Boomer";
        //faltan el resto de if else...
       
       
        //Por último, construimos cadena de mensaje final
        System.out.println("Usted nacio en el " + anio + ", usted es un " + genero + " que pertenece a la generacion " + generacion);
    }

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Cesar0691

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re: Ayuda no se que estoy haciendo mal
« Respuesta #2 en: 30 de Mayo 2021, 02:27 »
De verdad muchas gracias por tomarte el tiempo de explicarme, eres genial

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 983
    • Ver Perfil
Re: Ayuda no se que estoy haciendo mal
« Respuesta #3 en: 30 de Mayo 2021, 11:46 »
No hay de qué. Encantado de ayudar.

Si no logras completar el programa o te queda alguna pregunta pendiente, no dudes en publicarla por aquí.

Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

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".