Programmation java

Bonjour,

je dois faire un mini programme qui calcule une moyenne de 4 notes avec une boucle, ça doit être tout simple.

Pour le moment j'ai fait ça, qu'est-ce qu'il y a de faux ? (je suis débutant, je viens de commencer la prog java)

Scanner readline = new Scanner(System.in);

double moyenne, note1=0.0, note2=0.0, note3=0.0, note4=0.0;

do
{

System.out.println("Entrez la note 1 : ");
note1 = readline.nextDouble();
System.out.println("Entrez la note 2 : ");
note2 = readline.nextDouble();
System.out.println("Entrez la note 3 : ");
note3 = readline.nextDouble();
System.out.println("Entrez la note 4 : ");
note4 = readline.nextDouble();
moyenne = ((note1 + note2 + note3 + note4)/4);
}

while (moyenne < 6 && moyenne >= 0);

System.out.printf("La moyenne est de " + moyenne);
Configuration: Windows Vista
Firefox 3.5.3

7 réponses

  1. Bonjour,
    quand tu le compiles il te dit quoi? que ça marche? c'est en le lançant que tu peux voir si ça fonctionne ;)
    Sinon pour ta condition de boucle, tu considères que tant que la moyenne est entre 0 et 6 tu continues? pourquoi cette condition?
    Je ne comprends pas trop l'utilité de la boucle, à moins qu'il faille calculer plusieurs fois de suite une moyenne de 4 notes. Mais alors il n'y a que pour le calcul de la dernière moyenne que sa valeur est affichée.

    Donc soit tu tires la boucle, et le programme permet de calculer la moyenne de 4 notes et l'affiche.
    Soit, on laisse la boucle et on peut calculer plusieurs fois de suite une moyenne de 4 notes (dans ce cas, il faut changer la condition de la boucle car une moyenne peut être entre 0 et 6 sans pour autant nécessiter une nouvelle itération de la boucle, et il faut également mettre le println dans la boucle pour l'imprimer à chaque fois qu'une moyenne est calculée).
    Soit on garde la boucle, on calcule que une seule fois une moyenne de 4 notes, et dans ce cas, on fait une boucle qui fait 4 itérations, et on met que un scanner de Double dans la boucle et on met une phrase plus générale genre:

    double note;
    for (int i = 0; i<4; i++)
    {
    System.out.println("Valeur de la " + i + "e note: ");
    note += readline.nextDouble();
    }
    double moyenne = note/4.0;
    System.out.println("moyenne : " + moyenne);

    C'est peut-être pas tout à fait correct mais c'est une idée en gros

    J'espère avoir pu t'aider. Si tu as d'autres questions n'hésite pas!
    1. je pense que la boucle est pour recommencer son programme tant que la moyenne est valide probablement.

      Mais c'est plus joli de remplir 4 variables qui ont le même rôle avec un tableau et un for plutot que 4 variables note1 note2 note 3 note4 c'est sûr ;)
  2. je comprend pas le :

    note += readline.nextDouble();

    ca veut dire quoi "+=" ??

    merci
    1. a += 3;

      est un raccourci pour

      a = a + 3;

      (autrement dit on incrémente la valeur de a par 3)
    2. @pacorabanixpardon pour la majuscule au début >< mauvais réflexe
  3. donc dans ce cas la ça voudrait dire

    note = note + readline.nextDouble()

    pourquoi tu additionne le scanner ? j'arrive pas à comprendre dsl..
    1. J'additionne la valeur entrée par l'utilisateur.
      Donc par exemple la première fois l'utilisateur entre 5 , puis 7, puis 1, puis 6.
      Ce que fait cette ligne c'est qu'il fait: note = note + 5; c'est à dire: 0+5 donc il ya 5 dans la variable note, ensuite on a le 7 qui est tapé donc: note = note +7; c'est à dire 5+7 il y a donc 12 dans la variable, et ainsi de suite jusqu'à ce qu'on a la somme de chaque note entrée. après on peut diviser par 4 pour avoir la moyenne.

      Je ne sais pas trop comment expliquer autrement. Tu as compris ou pas? :s
      1. en fait il est troublé par le "
        + readline.nextDouble() 
        ".

        on n'ajoute pas readline. On ajoute "le résultat de la fonction membre (méthode) nextDouble() appliquée à l'objet de type Scanner "readline". Comme si tu faisais :
        a= readline.nextDouble();
        note += a;


        mais en condensé
    2. Salut,

      readline return un String.

      Il faut remplacer readline.nextDouble(); par:

      String entree = (readline.next());
      double note1 = Double.parseDouble(entree);
      .....
      ....

      Mais je ne comprend pas ce que tu veux faire avec

      do
      {
      .....
      }while (moyenne < 6 && moyenne >= 0);

      Ce ne serait pas plutôt la note entrée que tu voudrais dans les limites 0 à 5 ? (ou 0 à 20 ou ...)

      Cordialement,

      Dan
      1. danimo, la méthode Scanner.nextDouble() retourne un double contrairement à ce que tu pourrais penser.

        La preuve dans la doc :
        double	nextDouble() 
                  Scans the next token of the input as a double.

        https://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html

        Il faut cependant faire attention aux exceptions pouvant être lancées par cette méthode dans le cadre d'un programme destiné à la production :

        Throws:
        InputMismatchException - if the next token does not match the Float regular expression, or is out of range
        NoSuchElementException - if the input is exhausted
        IllegalStateException - if this scanner is closed