/**************************** f.java *****************************************/
import AlgoTools.IO;

/** Sichtbarkeit von Variablen- und Methodennamen                            */

public class f {                          // Klasse f

  public static int f;                    // klassenbezogene Variable f

  public static void f(){                 // Klassenmethode f (null-stellig)   
    f = 42;                               // referiert klassenbezogene Variable
  }
  
public static int f(int n) {              // Klassenmethode f (einstellig)
    int g=1;                              // lokale Variable f
f.f = 42;
// verdeckt klassenbezogenes f 
    for (int i=1; i<=n; i++) g = g*i;     // berechnet Fakultaet 
    return g;
  }

  public static int f(int x, int y){      // Klassenmethode f (zweistellig)
    while (x != y)                        // berechnet ggt von x und y
      if (x>y) x = x-y; else y=y-x; 
    return x;
  }

  public static void setze(int k){        // Klassenmethode setze
    f = k;
  }
  
  public static int hole() {              // Klassenmethode hole
    return f;
  }

  public static void main(String[] argv){
    int f=5;                              // lokale Varibale f
    f();                                  // Aufruf von nullstelligem f
    f = f(f);                             // Aufruf von einstelligem f 
    f = f(f,f);                           // Aufruf von zweistelligem f
    setze(42);                            // deponiere in Klassenvariable 
    IO.println(hole());                   // hole von Klassenvariable
  }
}
