programmation Java (école d'ingénieur) · Chapitre 6 · Application directe du cours
Moyenne saisie au clavier
Chaînes de caractères et entrées · niveau 2
Énoncé
Écrire un programme qui demande un nombre de notes, puis les notes, et affiche leur moyenne avec deux décimales et la meilleure note. Si l'utilisateur tape autre chose qu'un nombre, le programme doit le signaler et redemander, sans s'arrêter. On écrira une méthode static double lireDecimal(Scanner sc, String invite).
Corrigé
import java.util.Scanner;
public class MoyenneSaisie {
/** Lit un nombre décimal, en redemandant tant que la saisie est invalide. */
static double lireDecimal(Scanner sc, String invite) {
System.out.print(invite);
while (!sc.hasNextDouble()) {
System.out.print("« " + sc.next() + " » n'est pas un nombre. " + invite);
}
return sc.nextDouble();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = (int) lireDecimal(sc, "Nombre de notes : ");
double somme = 0, max = -1;
for (int i = 1; i <= n; i++) {
double note = lireDecimal(sc, "Note " + i + " : ");
somme += note;
if (note > max) max = note;
}
System.out.printf("Moyenne : %.2f, meilleure note : %.1f%n", somme / n, max);
}
}
Une exécution :
Nombre de notes : 3
Note 1 : 12.5
Note 2 : douze
« douze » n'est pas un nombre. Note 2 : 14
Note 3 : 9.75
Moyenne : 12.08, meilleure note : 14.0
La méthode reçoit le Scanner en paramètre : on n'en crée qu'un. Le sc.next() dans la boucle consomme le mot refusé ; sans lui, la boucle ne s'arrêterait jamais. Le maximum part de , plus petit que toute note possible. Il faudrait encore refuser , sans quoi la moyenne divise par zéro (et affiche NaN).
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.