Java - Necesito ayuda con este ejercicio, por favor

 
Vista:

Necesito ayuda con este ejercicio, por favor

Publicado por jennyGabi (2 intervenciones) el 03/10/2022 19:32:58
6. Pide al usuario la nota y muestra en pantalla la calificacion:
0-2: CACA
2.1-4 RECU
4.1 - 5 CASI
5.1-7 ok
7.1-8.5 notable
8.5 - 9.5 excelente
+9.5 repelente

Si la nota és superior a 10 o inferior a 0:
Esta nota no es valida.


Yo he hecho esto, donde estan los fallos, por favor.

import java.util.Scanner;

public class qualification {

public static void main(String[] args) {
System.out.println("write the note obtained:");
Scanner scanner = new Scanner(System.in);
double Quali = Double.parseDouble(scanner.nextLine());

String qualification1 = "CACA";
String qualification2 = "RECU";
String qualification3 = "CASI";
String qualification4 = "OK";
String qualification5 = "NOTABLE";
String qualification6 = "EXCELENTE";
String qualification7 = "REPELENTE";

while (Quali < 0 || Quali > 10) {
System.out.println("write the note obtained:");
scanner = new Scanner(System.in);
Quali = Double.parseDouble(scanner.nextLine());
}

int qualification;
if (qualification >= 0 || qualification <= 2)
System.out.println("Your note is:" + qualification1);

else if (qualification > 2 || qualification <= 4)
System.out.println("Your note is: " + qualification2);

else if (qualification > 4 || qualification <= 5)
System.out.println("Your note is: " + qualification3);

else if (qualification > 5 || qualification <= 7)
System.out.println("Your note is: " + qualification4);

else if (qualification > 7 || qualification <= (8.5))
System.out.println("Your note is:" + qualification5);

else if (qualification > 8.5 || qualification >= (9.5);
System.out.println("Your note is: " + qualification6);

else System.out.println("Your note is: " + qualification7);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Necesito ayuda con este ejercicio, por favor

Publicado por Kabuto (1381 intervenciones) el 04/10/2022 01:16:02
Al comenzar el programa y declarar variables, la inicialización del double no la hagas llamando al Scanner, pues entonces el programa va a esperar a que sea el usuario el que el de un valor inicial:
1
2
3
4
public static void main(String[] args) {
System.out.println("write the note obtained:");
Scanner scanner = new Scanner(System.in);
double Quali = Double.parseDouble(scanner.nextLine());

En lugar de eso, dale un valor inicial tú directamente.
Podría ser valor 0, pero en este caso concreto dicho valor haría que NO entrasemos en el bucle WHILE donde se va a pedir los datos al usuario.
Entonces, mejor inicializarlo con otro valor que SÍ garantice que entraremos en el bucle, por ejemplo -1

1
2
3
4
public static void main(String[] args) {
 
		Scanner scanner = new Scanner(System.in);
		double Quali = -1; //Inicializamos con un valor que sirva para entrar en el próximo WHILE

En el bucle, no es necesario reiniciar el objeto Scanner en cada iteración:
1
2
3
4
5
while (Quali < 0 || Quali > 10) {
			System.out.println("write the note obtained:");
			scanner = new Scanner(System.in);
			Quali = Double.parseDouble(scanner.nextLine());
		}
Basta con pedir la calificación y ya está:
1
2
3
4
while (Quali < 0 || Quali > 10) {
			System.out.println("write the note obtained:");
			Quali = Double.parseDouble(scanner.nextLine());
		}


Y ahora viene el principal problema.
Tú has pedido la calificación al usuario y la has guardado en la variable Quali

Pero luego para evaluar la calificación, estás usando otra variable donde nadie ha introducido nada:
1
2
3
4
5
6
7
8
9
int qualification;
		if (qualification >= 0 || qualification <= 2)
			System.out.println("Your note is:" + qualification1);
 
		else if (qualification > 2 || qualification <= 4)
			System.out.println("Your note is: " + qualification2);
 
		else if (qualification > 4 || qualification <= 5)
			System.out.println("Your note is: " + qualification3);

Es a Quali a quien tienes que evaluar:
1
2
3
4
5
6
7
8
if (Quali >= 0 || Quali <= 2)
			System.out.println("Your note is:" + qualification1);
 
		else if (Quali > 2 || Quali <= 4)
			System.out.println("Your note is: " + qualification2);
 
		else if (Quali > 4 || Quali <= 5)
			System.out.println("Your note is: " + qualification3);

Con estos cambios, el programa ya sí se ejecuta, sin embargo, las evaluaciones no son correctas.

Si probamos con una calificación de 3, nos dice que es CACA, cuando no es esa la evaluación correspondiente:
1
2
3
write the note obtained:
3
Your note is:CACA
¿Por qué?

Veamos el primer IF
1
if (Quali >= 0 || Quali <= 2)
Dice: Si Quali es mayor o igual que 0 OR Quali es menor o igual que 2

Cuando usamos OR, basta con que se cumpla UNA de esas dos condiciones para que la expresión sea VERDADERA.
Y resulta que el valor 3 sí cumple una de esas condiciones, pues es mayor o igual que 0

De hecho, cualquier valor mayor que 0 va a cumplir esa condición: el 4, el 5 el 6... el 10...
Todas las notas van a dar como resultado CACA.

En lugar de usar un OR, hay que usar un AND
1
if (Quali >= 0 && Quali <= 2)
Si Quali es mayor o igual que 0 AND Quali es menor o igual que 2

Aquí, para que la expresión sea verdadera, han de cumplirse las DOS condiciones.

¿El valor 3 es mayor o igual que 0? SI
¿Y es menor o igual que 2? NO

Por tanto, esta expresión ahora sería FALSE y el programa pasará a evaluar la siguiente expresión:

1
else if (Quali > 2 && Quali <= 4)
¿El valor 3 es mayor que 2? SI
¿Y es menor o igual que 4? SI

Esta expresión será VERDADERA, que es la que realmente le corresponde al valor 3.

Te dejo el programa escrito con todos los cambios aplicados.
Espero que se hayan entendido las explicaciones. Si no es así, pregunta y repregunta tanto como necesites.

No te conformes con tener el programa corregido, tu aspiración ha de ser llegar a comprenderlo.

Un saludo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class Qualification {
 
	public static void main(String[] args) {
 
		//Declaración variables
		Scanner scanner = new Scanner(System.in);
		double Quali = -1; //Inicializamos con un valor que sirva para entrar en el próximo WHILE
		String qualification1 = "CACA";
		String qualification2 = "RECU";
		String qualification3 = "CASI";
		String qualification4 = "OK";
		String qualification5 = "NOTABLE";
		String qualification6 = "EXCELENTE";
		String qualification7 = "REPELENTE";
 
		//Solicitamos calificación
		while (Quali < 0 || Quali > 10) {
			System.out.println("write the note obtained:");
			Quali = Double.parseDouble(scanner.nextLine());
		}
 
		//Analizamos calificación
		if (Quali >= 0 && Quali <= 2)
			System.out.println("Your note is:" + qualification1);
 
		else if (Quali > 2 && Quali <= 4)
			System.out.println("Your note is: " + qualification2);
 
		else if (Quali > 4 && Quali <= 5)
			System.out.println("Your note is: " + qualification3);
 
		else if (Quali > 5 && Quali <= 7)
			System.out.println("Your note is: " + qualification4);
 
		else if (Quali > 7 && Quali <= (8.5))
			System.out.println("Your note is:" + qualification5);
 
		else if (Quali > 8.5 && Quali >= (9.5))
				System.out.println("Your note is: " + qualification6);
 
		else System.out.println("Your note is: " + qualification7);
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Necesito ayuda con este ejercicio, por favor

Publicado por jennyGabi (2 intervenciones) el 05/10/2022 20:46:18
Hola, Kabuto muchas gracias por tu grandiosa explicación y por detallarlo tan bien, de momento lo he entendido todo, pero luego el profesor nos explico para que lo hicieramos con funciones y ha quedado asi:

public static void main(String[] args) throws Exception {
double grade=askForGrade();
checkIsGradeValid(grade);
printGrade(grade);
}

public static void main(String[] args) throws Exception {
double grade=askForGrade();
checkIsGradeValid(grade);
printGrade(grade);
}

private static void checkIsGradeValid(double grade) throws Exception {
if(grade<0 || grade>10){
throw new Exception();
}
}

private static void printGrade(double grade) {
if (grade <= 2) System.out.println("CACA");
else if (grade <= 4) System.out.println("RECU");
else if (grade <= 5) System.out.println("CASI");
else if (grade <= 7) System.out.println("OK");
else if (grade <= 8.5) System.out.println("NOTABLE");
else if (grade <= 9.5) System.out.println("EXCEL·LENT");
else System.out.println("EXCEL·LENT");
}

private static double askForGrade() {
System.out.println("Introdueix la nota: ");
Scanner sc = new Scanner(System.in);
return Double.parseDouble(sc.nextLine());
}


Un abrazo y gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar