// In diesem Programm gibt es gleich mehrere Probleme, // und der Wertebereich von int ist nur eins davon... import java.math.*; import java.io.*; // Für FileWriter Klasse. public class Fakultaet { // Das ist die eigentliche Berechnungsroutine static int berechne(int i) { if(i <= 1) return 1; return i * berechne(i-1); } // Das ist die "genaue" Version static BigInteger fakultaet_2(int i) { if (i <= 1) return BigInteger.ONE; return BigInteger.valueOf(i).multiply(fakultaet_2(i-1)); } static void test(int von, int bis) { // Da man auf der Konsole ggf. schnell den // Überblick verliert, lassen wir uns eine // Protokoll-Datei erzeugen. try { // Öffnen der Datei kann scheitern FileWriter fw = new FileWriter("protokoll.txt"); int vorgaenger = -1; for(int i=von; i<=bis; i++) { boolean fehler = false; int wert = berechne(i); BigInteger erwartet = fakultaet_2(i); if(vorgaenger > wert) { String msg="FEHLER: berechne(" + i + ")=" + wert + " < vorgaenger=" + vorgaenger; System.out.println(msg); fw.write(msg + "\n"); fehler = true; } vorgaenger = wert; if(!BigInteger.valueOf(wert).equals(erwartet)) { String msg = "FEHLER: berechne(" + i + ")=" + wert + " Erwartet: " + erwartet; System.out.println(msg); fw.write(msg + "\n"); fehler = true; } if(!fehler) { String msg = "OK: berechne(" + i + ")=" + wert; System.out.println(msg); fw.write(msg + "\n"); } } } catch (IOException e) {} } public static void main(String[] args) { /*************** weg ***********************\ int eingabe = Eingabe.readInt("Bitte eine ganze Zahl eingeben: "); System.out.print(eingabe); System.out.print("! = "); System.out.println(berechne(eingabe)); \**************** weg **********************/ int von = -1, bis = 1000; System.out.println("Lasse Testschleife für berechne(i) laufen " + "von i=" + von + " bis i=" + bis); test(von,bis); } }