Stack Overflow en español Asked on February 3, 2021
Buenas tengo un ejercicio de meter nombres y notas de alumnos, y luego tengo que decir cuantos están aprobados, suspensos, media de todas las notas, decir el nombre del alumno con menor y mayor nota y por último decir quien se llama Antonio. Tengo casi todo, menos lo de sacar el nombre del alumno con mayor y menor nota.
Scanner sn = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
double nota = 0, media = 0, suma = 0, mayor_nota = 0, menor_nota = 0;
int aprobado = 0, suspenso = 0, cont = 0;
String nombre = "", posicion_mayor = "", posicion_menor = "";
for (int i = 0; i < 3; i++) {
System.out.println("Dime el nombre del alumno: ");
nombre = sc.nextLine();
System.out.println("Dime la nota de Programación del alumno: ");
nota = sn.nextDouble();
mayor_nota = 0;
menor_nota = 0;
posicion_mayor = "";
posicion_menor = "";
if(nota >= 5) {
aprobado++;
} else if (nota < 5) {
suspenso++;
}
if (nota < mayor_nota) {
mayor_nota = nota;
posicion_mayor = nombre;
}
if (nota > menor_nota) {
menor_nota = nota;
posicion_menor = nombre;
}
if (nombre.equalsIgnoreCase("antonio")) {
cont++;
}
suma = suma + nota;
media = suma / 3;
}
System.out.println(aprobado);
System.out.println(suspenso);
System.out.println("El alumno con mayor nota es: " + posicion_mayor);
System.out.println("El alumno con menor nota es: " + posicion_menor);
System.out.println("La media de las notas es: " + media);
System.out.println("Hay " + cont + " personas que se llaman Antonio.");
La operación en ambos casos es bastante simple, debes considerar lo siguiente:
Los valores de partida en ambos casos deben ser el máximo y el mínimo posibles, en tu ejemplo: mayor_nota = 0 (suponiendo que esa es la nota mínima posible) y menor_nota = 10 (suponiendo que esa es la máxima nota posible).
Al momento de decidir las condicionales serás de la siguiente manera:
if (nota >= mayor_nota) { mayor_nota = nota; posicion_mayor = nombre; }
if (nota <= menor_nota) { menor_nota = nota; posicion_menor = nombre; }
De esta manera estas asegurando que se van a considerar todos los casos ingresados.
Espero te sirva, saludos.
Answered by Jhonn Brxndon on February 3, 2021
A ver, por una parte, estás asignandole un valor preestablecido a nota_menor y nota_mayor dentro del bucle for, con lo que en cada vuelta tu nota_menor y nota_mayor pasan a valer 0 otra vez. Esta asginación la tienes que hacer antes de entrar en el bucle (o puedes hacerlo donde asignas los estados iniciales (for (int i=0, nota_menor=10, nota_mayor=0;....)
Por otro lado, no puedes asignar a "nota_menor" el valor 0, porque luego cualquier nota de cualquier alumno será mayor que esta. Lo que puedes hacer es asignar a nota_mayor el menor valor que se puede asignar a una nota (es decir, 0), y a nota_menor el mayor numero posible (es decir, 10), o mejor aún, podrias asignarles valores fuera del rango, ya que si por ejemplo, un alumno saca un 0, con la condición < no entraría dentro del condicional (siempre puedes hacer un <=). Una tercera opción, sería que, si es la primera vuelta del bucle, a nota_mayor y nota_menor le asignes la nota introducida, asi partes de un valor inicial real
if ( i == 0 ) {
nota_menor=nota;
nota_mayor=nota;
posicion_menor = nombre;
posicion_mayor = nombre;
}
else {
if (mayor_nota<nota) {
mayor_nota = nota;
posicion_mayor = nombre;
}
if (menor_nota>nota) {
menor_nota = nota;
posicion_menor = nombre;
}
Lo mismo vale para `posicion_menor y posicion_mayor, si dentro del bucle haces posicion_menor="", siempre pasará a tener ese valor en cada vuelta, y esto no es lo que buscas.
Scanner sn = new Scanner(System.in);
Scanner sc = new Scanner(System.in);
double nota = 0, media = 0, suma = 0, mayor_nota = -1, menor_nota = 11;
int aprobado = 0, suspenso = 0, cont = 0;
String nombre = "", posicion_mayor = "", posicion_menor = "";
for (int i = 0; i < 3; i++) {
System.out.println("Dime el nombre del alumno: ");
nombre = sc.nextLine();
System.out.println("Dime la nota de Programación del alumno: ");
nota = sn.nextDouble();
if(nota >= 5) {
aprobado++;
} else if (nota < 5) {
suspenso++;
}
if (mayor_nota<nota) {
mayor_nota = nota;
posicion_mayor = nombre;
}
if (menor_nota>nota) {
menor_nota = nota;
posicion_menor = nombre;
}
if (nombre.equalsIgnoreCase("antonio")) {
cont++;
}
suma = suma + nota;
}
media = suma / 3;
System.out.println(aprobado);
System.out.println(suspenso);
System.out.println("la menor es: " + menor_nota);
System.out.println("la mayor es: " +mayor_nota);
También, como te dicen en el comentario, la media tienes que calcularla fuera del bucle.
Answered by Rodrigo on February 3, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP