import java.util.Scanner;

class PGMoynotes {

/**
  Somme et nombre de termes d'une suite d'entiers terminée par sentinelle
  @param[out] s - somme des termes
  @param[out] nt - nombre de termes dans la somme
  @param[in] sentinelle - valeur de la sentinelle
*/

public static void traiterSuite(int[] s, int[] nt, int sentinelle)
{
  Scanner input = new Scanner(System.in);
  s[0] = 0;
  nt[0] = 0;
  int nombre;
  System.out.print("Un entier [" + sentinelle + "==fin]? ");
  nombre = input.nextInt();
  while (nombre != sentinelle)
  {
    s[0] += nombre;
    ++nt[0];
    System.out.print("Un entier [" + sentinelle + "==fin]? ");
    nombre = input.nextInt();
  }
}

/**
  Affiche les résultats
  @param[in] s - somme de la suite
  @param[in] nt - nombre de termes de la suite
*/

public static void afficherResultats(int s, int nt)
{
  if (nt != 0)
  {
    System.out.println("==> Nombre d'entiers consideres = " + nt);
    System.out.println("==> Moyenne = " + ((double)s / nt));
  }
  else
  {
    System.out.println("==> OUPS, aucune entree");
  }
}

/**
  @test
*/

public static void test1()
{
  int[] somme = new int[1], ntermes = new int[1];
  traiterSuite(somme,ntermes,-1);
  afficherResultats(somme[0],ntermes[0]);
}

/**
  Idem traiterSuite, emploi d'une structure Répéter
  @param[out] s - somme des termes
  @param[out] nt - nombre de termes dans la somme
  @param[in] sentinelle - valeur de la sentinelle
*/

public static void traiterSuite2(int[] s, int[] nt, int sentinelle)
{
  Scanner input = new Scanner(System.in);
  s[0] = 0;
  nt[0] = 0;
  int nombre;
  do {
    System.out.print("Un entier [" + sentinelle + "==fin]? ");
    nombre = input.nextInt();
    if (nombre != sentinelle)
    {
      s[0] += nombre;
      ++nt[0];
    }
  } while (!(nombre == sentinelle));
}

/**
  @test
*/

public static void test2()
{
  int[] somme = new int[1], ntermes = new int[1];
  traiterSuite2(somme,ntermes,-1);
  afficherResultats(somme[0],ntermes[0]);
}

/**
  Somme et nombre de termes d'une suite d'entiers dans un intervalle
  @param[out] s - somme des termes
  @param[out] nt - nombre de termes dans la somme
  @param[in] sentinelle - valeur de la sentinelle
  @param[in] nmin - valeur minimale
  @param[in] nmax - valeur maximale
  @pre nmin <= nmax
*/

public static void traiterSuite3(int[] s, int[] nt, int sentinelle, int nmin, int nmax)
{
  Scanner input = new Scanner(System.in);
  System.out.println("Somme d'entiers dans [" + nmin + ".." + nmax + "]");
  s[0] = 0;
  nt[0] = 0;
  int nombre;
  System.out.print("Un entier [" + sentinelle + "==fin]? ");
  nombre = input.nextInt();
  while (nombre != sentinelle)
  {
    if (nmin <= nombre && nombre <= nmax)
    {
      s[0] += nombre;
      ++nt[0];
    }
    else
    {
      System.out.println("==> OUPS, erreur!");
    }
    System.out.print("Un entier [" + sentinelle + "==fin]? ");
    nombre = input.nextInt();
  }
}

/**
  @test
*/

public static void test3()
{
  int[] somme = new int[1], ntermes = new int[1];
  traiterSuite3(somme,ntermes,-1,0,20);
  afficherResultats(somme[0],ntermes[0]);
}

/**
  Idem traiterSuite3, emploi d'une structure Repeter
  @param[out] s - somme des termes
  @param[out] nt - nombre de termes dans la somme
  @param[in] sentinelle - valeur de la sentinelle
  @param[in] nmin - valeur minimale
  @param[in] nmax - valeur maximale
  @pre nmin <= nmax
*/

public static void traiterSuite4(int[] s, int[] nt, int sentinelle, int nmin, int nmax)
{
  Scanner input = new Scanner(System.in);
  System.out.println("Somme d'entiers dans [" + nmin + ".." + nmax + "]");
  s[0] = 0;
  nt[0] = 0;
  int nombre;
  do {
    System.out.print("Un entier [" + sentinelle + "==fin]? ");
    nombre = input.nextInt();
    if (nmin <= nombre && nombre <= nmax)
    {
      s[0] += nombre;
      ++nt[0];
    }
    else if (nombre != sentinelle)
    {
      System.out.println("==> OUPS, erreur!");
    }
  } while (!(nombre == sentinelle));
}

/**
  @test
*/

public static void test4()
{
  int[] somme = new int[1], ntermes = new int[1];
  traiterSuite4(somme,ntermes,-1,0,20);
  afficherResultats(somme[0],ntermes[0]);
}

public static void main(String[] args)
{
  test1();
  test2();
  test3();
  test4();
}

}
