/*
 * "Grundkurs Programmieren in Java - Band 1 (4. Auflage, 2007)"
 * 2001-2007, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 14.1 (Version 4.0)
 * (c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 * Methoden zum Spiegeln von int-Feldern -
 * einmal mit und einmal ohne Seiten-Effekte
 *
 */

enum Geschlecht { MAENNLICH, WEIBLICH, SAECHLICH; }

enum Fall {
  NOMINATIV, GENITIV, DATIV, AKKUSATIV;
  
  private final static String[] ARTIKEL = {
    "der", "die", "das",
    "des", "der", "des",
    "dem", "der", "dem",
    "den", "die", "das",
    "ein", "eine", "ein",
    "eines", "einer", "eines",
    "einem", "einer", "einem",
    "einen", "eine", "ein"
  };
  
  public String getBestimmterArtikel(Geschlecht geschlecht) {
    return ARTIKEL[geschlecht.ordinal() + this.ordinal() * 3];
  }

  public String getUnbestimmterArtikel(Geschlecht geschlecht) {
    return ARTIKEL[12 + geschlecht.ordinal() + this.ordinal() * 3];
  }
}

class Nom {
  private Geschlecht geschlecht;
  private String name;
  
  public Nom(Geschlecht geschlecht,String name) {
    this.geschlecht = geschlecht;
    this.name = name;
  }
  
  public String mitArtikel(Fall fall,boolean bestimmt) {
    final String artikel =
      (bestimmt ? fall.getBestimmterArtikel(geschlecht) :
        fall.getUnbestimmterArtikel(geschlecht));
    return 
      artikel + " " + name;
  }  
}
