Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Compiler-FehlerWarum bekomme ich fehler angezeigt??
Hallo,
wir sollten ein Programm schreiben, welches Fibonaccizahlen einmal rekursiv und einmal iterativ berechnet. Mein Programm ist soweit richtig und Eclipse zeigt auch keine Fehler mehr an, jedoch sagt mir das Onlineabgabesystem folgendes:
java.lang.AssertionError: Falsches Ergebnis: expected:<3> but was:<2>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:743)
at org.junit.Assert.assertEquals(Assert.java:118)
at org.junit.Assert.assertEquals(Assert.java:555)
at fibonacci.TestFibonacciFunctionPublic.test(TestFibonacciFunctionPublic.java:48)
at fibonacci.TestFibonacciFunctionPublic.testFunction(TestFibonacciFunctionPublic.java:28)
Leider weiß ich dennoch nicht, was ich wo falsch gemacht habe. Zur Orientierung hier mein Programm:
Java:
package algorithms;
public class Fibonacci { // Rekursive Berechnung der Fibonaccizahlen
public static int fibRek(int n) {
if (n <= 0) // fuer negative Zahlen und 0 gib 0 zurueck!
return 1;
else if (n == 1)
return 1;
else
return fibRek(n - 2) + fibRek(n - 1);
}
public static int fibIter(int n) {
if (n <= 0) // fuer negative Zahlen und 0 gib 0 zurueck!
return 1;
else if (n == 1)
return 1;
else {
int a = 0; // hat am Anfang der Schleife den Wert Fib(i-2).
int b = 1; // hat am Anfang der Schleife den Wert Fib(i-1).
int i = 2;
while (i <= n) { // Schleife fuer alle Werte von 2 bis n.
int j = b; // Wert von Fib(i-1).
int k = a + b; // Wert von Fib(i).
a = j; // Vorbereitung fuer den naechsten Durchgang.
b = k; // Vorbereitung fuer den naechsten Durchgang.
i++;
}
return b;
}
}
public static void main(String[] args) {
// Ausgabe:
System.out.println("Rekursive Ausgabe der 9. Fibonacci-Zahl: "
+ fibRek(9));
System.out.println("Iterative Ausgabe der 11. Fibonacci Zahl: "
+ fibIter(11));
}
}
[/Java]
Nur kurz zu dem Fehler, das liegt daran, wie dein Onlineabgabesystem gestrickt ist. Dieses läd wohl dein Programm und ruft fibIter und fibRek auf, um die Ergebnisse zu testen. Könnte z.B. so aussehen:
Java:
public static boolean checkErgebnisse() {
for(int i = 0; i < 10; i++) { // Die ersten 10 reichen.
int e = musterlösungFib(i);
assert algorithmus.Fibonacci.fibRek(i) == e && algorithmus.Fibonacci.fibIter(i) == e;
}
}
public static int musterlösungFib(int i) {
return ...;
}
Assert geht nun davon aus, dass die Ergebnisse deiner Methoden und der Musterlösungen gleich sind. Wenn sie das nicht sind =>
[c]java.lang.AssertionError: Falsches Ergebnis: expected:<3> but was:<2>[/c]
Hierbei geht es um die 3. Fibonacci-Zahl.
Richtig wäre: 1 + 2 = 3
Dein Algorithmus liefert: 2
=> Fehler