Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: danielvr en 18 de Julio 2021, 04:48

Título: Java proyecto ingresar calificaciones de alumnos duda if else no funciona bien
Publicado por: danielvr en 18 de Julio 2021, 04:48
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");
        }
        }
     }

Título: Re: Problema Java if y else
Publicado por: danielvr 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
Título: Re: Problema Java if y else
Publicado por: Kabuto 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.