Hallo, ich habe ein Problem mit dem folgenden Code (nutze Eclipse, soll eigentlich die 300-ste Fibonacci-Zahl ausgeben). Und zwar erzeugt er folgende java.lang.NullPointerException:
Exception in thread "main" java.lang.NullPointerException
Edit: Ich habe schon das Forum nach ähnlichen Problemen durchsucht und auch schon Google angestrengt. In fast allen Fällen lag es, anders als bei mir, daran, dass das Objekt nicht mit new initialisiert wurde.
Exception in thread "main" java.lang.NullPointerException
at fibonacci.PhiFuncs.mulphi(Fibonacci.java:21)
at fibonacci.PhiFuncs.potphi(Fibonacci.java:35)
at fibonacci.PhiFuncs.fib(Fibonacci.java:44)
at fibonacci.Fibonacci.main(Fibonacci.java:7)
Anscheinend tritt der erste Fehler in mulphi() auf. Kann mir irgendjemand helfen, die Exception zu vermeiden (d. h. den Code so zu verbessern, dass sie nicht mehr auftritt)?at fibonacci.PhiFuncs.potphi(Fibonacci.java:35)
at fibonacci.PhiFuncs.fib(Fibonacci.java:44)
at fibonacci.Fibonacci.main(Fibonacci.java:7)
Java:
package fibonacci;
import java.math.BigInteger;
public class Fibonacci {
public static void main(String[] args) {
int n=300;
System.out.println(PhiFuncs.fib(n));
}
}
class PhiFuncs {
public static BigInteger[] addphi(BigInteger[] a, BigInteger[] b) {
BigInteger[] retval = new BigInteger[2];
retval[0] = a[0].add(b[0]);
retval[1] = a[1].add(b[1]);
return retval;
}
public static BigInteger[] mulphi(BigInteger[] a, BigInteger[] b) {
BigInteger[] retval = new BigInteger[2];
retval[0] = a[0].multiply(b[0]).add(a[1].multiply(b[1]));
retval[1] = a[0].multiply(b[1]).add(a[1].multiply(b[0])).add(a[1].multiply(b[2]));
return retval;
}
public static BigInteger[] potphi(BigInteger[] a, int b) {
BigInteger[] retval = new BigInteger[2];
if (b == 0) {
retval[0] = BigInteger.ONE;
retval[1] = BigInteger.ZERO;
} else {
if (b % 2 == 1) {
return mulphi(potphi(a, (b-1)), a);
} else {
return potphi(mulphi(a, a), (b / 2));
}
}
return retval;
}
public static BigInteger fib(int a) {
BigInteger[] retval_ = new BigInteger[2];
BigInteger[] initvals = new BigInteger[2];
retval_ = potphi(initvals, a);
BigInteger retval = retval_[1];
return retval;
}
}
Edit: Ich habe schon das Forum nach ähnlichen Problemen durchsucht und auch schon Google angestrengt. In fast allen Fällen lag es, anders als bei mir, daran, dass das Objekt nicht mit new initialisiert wurde.
Zuletzt bearbeitet: