Autor Tema: Java proyecto ingresar calificaciones de alumnos duda if else no funciona bien  (Leído 2031 veces)

danielvr

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, debo escribir esto en java, llevo todo, solo que tengo una duda, que es:

Cuando escribo una calificación no válida, es decir, mayor a 10 o menor a 0, el  programa que ejecuto me sale 2 avisos, el if que es mayor a 7 y el de introducir una calificación válida, es decir, cuando digo una calificación menor a 0 o mayor a 10 salen 2 avisos, ya sea reprobado o aprobado y el de introducir una calificación válida ¿Alguien me puede ayudar a corregir?

Ejercicio a resolver

Escribir un programa en el que el usuario ingrese desde el teclado una calificación entre 0 y 10, si no está en el rango volver a pedirla. Una vez que se escriba una calificación válida se deberá escribir “Reprobado” si esta es menor o igual a 7 y “Aprobado” si es mayor.


Este es mi código

Código: [Seleccionar]
import javax.swing.JOptionPane;
public class Ejerciciociclos1 {
     public static void main(String[] args) {
        // TODO code application logic here
       
      float cont=0,nota=0, calificacion=0;
       
        while(cont<1){
       
            nota=Float.parseFloat(JOptionPane.showInputDialog("Ingresar Nota"));
            if( cont==2){ //solo cuando se ingresa
            }     
            if( nota >7);
            {
             System.out.println("Aprobado");
                         }   
         if ( nota <=7);
         {
                System.out.println("Reprobado");
        }
         
        calificacion= nota;
                {
         if (calificacion>10) {
              JOptionPane.showMessageDialog(null, "Introduzca una calificación valida entre 0 y 10 ");
         }
         }
         
            calificacion= nota;
       
        if(calificacion>=7)
            JOptionPane.showMessageDialog(null, "Esta Aprobado");
        else
            JOptionPane.showMessageDialog(null, "Esta Reprobado");
        }
        }
     }

« Última modificación: 15 de Enero 2022, 20:31 por Ogramar »

danielvr

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re: Problema Java if y else
« Respuesta #1 en: 18 de Julio 2021, 05:35 »
Citar
import javax.swing.JOptionPane;
public class Ejerciciociclos1 {
     public static void main(String[] args) {
        // TODO code application logic here
       
      float cont=0, calificacion=0;
       
        while(cont<1){
       
            calificacion=Float.parseFloat(JOptionPane.showInputDialog("Ingresar Nota"));
           
                {
         if (calificacion>10) {
              JOptionPane.showMessageDialog(null, "Introduzca una calificación valida entre 0 y 10 ");
         }
         }
         
        if(calificacion>=7)
            JOptionPane.showMessageDialog(null, "Esta Aprobado");
        else
            JOptionPane.showMessageDialog(null, "Esta Reprobado");
        }
        }
     }

Ya corregi unas cosas, no se si este bien usado el while y aun tengo duda de como hacer que el numero que sea menor a 0 y mayor a 10 me salga el mensaje de Introduce un numero valido
« Última modificación: 18 de Julio 2021, 06:54 por danielvr »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re: Problema Java if y else
« Respuesta #2 en: 18 de Julio 2021, 11:06 »
Hola.

Para hacer que se repita la petición hasta que el usuario introduzca un valor dentro del rango admitido, sí, hay que usar while.
Pero hay que poner una condición de repetición que sea lógica.

Tu has puesto una variable "contador" que mientras sea menor que 1, se repita.
Eso puede funcionar, siempre y cuando luego modifiques el valor de "contador" para evitar que el bucle sea infinito.

Pero no es "lógico", porque no estamos contando nada.
Imagina que otra persona lee tu código, sin tener el enunciado así que no sabe cuáles son las condiciones impuestas al programa.

Si ve una variable "contadora", y ve que el valor de ese contador influye en la condición del bucle... pensará que este programa debería estar "contando" algo, pero no es así.
¿Entiendes lo que quiero decir?

Nuestros programas han de ser lo más entendible posible para otras personas, e incluso para ti.
Porque a lo mejor dentro de 6 meses, que quizás ya has olvidado este ejercicio, te encuentras con este código... y tu mismo puedes quedarte confuso y preguntándote por qué pusiste un contador como condición del bucle... si no se está contando nada.


Para lograr que el programa sea entendible, hay que intentar transmitir al código el mismo proceso mental que hacemos en nuestra cabeza.

Es decir, la lógica que seguimos en la cabeza es:

Citar
* Pido una nota
* ¿Está FUERA del rango admitido?
    - SÍ/TRUE: Pues vuelvo a pedirla sin computar nada
    - NO/FALSE: Pues dejo de pedirla y la computo

De ahí podemos deducir cuál sería la condición idónea para el bucle WHILE: que se repita mientras nota fuera de rango sea cierto (true)

Esto lo podemos representar con una variable boolean y dándole el nombre adecuado.

Código: [Seleccionar]
public class Calificaciones {

public static void main(String[] args) {

float calificacion = 0;
boolean fueraDeRango = true;

while(fueraDeRango){ //Mientras la nota esté fuera de rango, se repetirá el bucle

calificacion=Float.parseFloat(JOptionPane.showInputDialog("Ingresar Nota"));

if (calificacion > 10 || calificacion < 0)
JOptionPane.showMessageDialog(null, "Introduzca una calificación valida entre 0 y 10 ");
else {
fueraDeRango = false; //La nota es valida, está DENTRO de rango, ya no se repetirá el bucle
if(calificacion <= 7)
JOptionPane.showMessageDialog(null, "Esta Reprobado");
else
JOptionPane.showMessageDialog(null, "Esta Aprobado");
}
}
}
}

¿Ves? Ahí no estamos usando ningún "contador" que pueda llevar a confusión.
Solo con leerlo ya se adivina la lógica que sigue el programa.

Por cierto, ahí también se ve como controlar correctamente si está dentro del rango o no.
De nuevo, es casi como escribir lo que tenemos en la cabeza.

Si la nota es mayor que 10 ó es menor que 0
    avisamos que la nota está fuera de rango


Código: [Seleccionar]
if (calificacion > 10 || calificacion < 0)
JOptionPane.showMessageDialog(null, "Introduzca una calificación valida entre 0 y 10 ");

Pregunta si algo no ha quedado claro.

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