class CompteurModulo { 
/** 0 <= etat < modulo */ 
  private int etat = 0; 
  
/** 1 < limite < 2^31 */ 
  private int limite; 
  
/** Constructeur qui permet seulement d'initialiser la valeur limite. 
 * @param limite de l'état, 1 < limite < 2^31-1 */ 
  CompteurModulo(int limite) { 
 	assert(limite > 1) : "1 < limite < 2^31";
 	// comme limite est un int, il ne peut de toutes façons pas être 
 	// supérieur à 2^31-1, donc pas besoin de le vérifier  
  	this.limite = limite; 
  } 
 
 
 /** Constructeur qui permet d'initialiser la valeur limite et l'état 
  * @param limite de l'état, 1 < limite < 2^31-1
  * @param etat valeur initiale de l'état, 0 <= etat < limite  */ 
  CompteurModulo(int etat, int limite) { 
	this(limite); // appel au premier constructeur
	assert((etat >= 0) && (etat < limite)) : "0 <= etat < limite";  
	this.etat = etat; 
  }
  
  /** @return la valeur courante de l'état */
  int getEtat() {
   	 return this.etat;
  }
   
  void incrementer() {
   	 if (etat < (limite - 1)) { 
   	   // état inférieur stricte à limite-1 
   	   this.etat += 1; 
   	 } else { 
   	   // état égal à la valeur limite limite-1 
   	   this.etat = 0; 
   	 }
  }
}