public class Compte {
  private static long découvertMax = 1000;
  private static int numéroSuivant = 1;

  public static void setDécouvertMax(long val) {
    assert (val >= 0);
    découvertMax = val;
  }

  public static long getDécouvertMax() {
    return découvertMax;
  }

  private int numéro;
  private long solde;

  public Compte(long val) {
    assert (val >= 0);
    numéro = numéroSuivant;
    ++numéroSuivant;
    solde = val;
  }

  public void déposer(long val) {
    assert (val > 0);
    solde += val;
  }

  public boolean retraitPossible(long val) {
    return val > 0 && solde - val >= -découvertMax;
  }

  public void retirer(long val) {
    assert (retraitPossible(val));
    solde -= val;
  }

  @Override
  public String toString() {
    String s = "le compte n°" + numéro + " est ";
    if (solde >= 0)
      s += "crédité de " + solde;
    else
      s += "à découvert de " + (-solde);
    return s + "€";
  }

  public static void main(String[] args) {
    Compte c = new Compte(0);
    c.déposer(1234);
    System.out.println(c);
    c.retirer(1734);
    System.out.println(c);
  }
}
