f****l 发帖数: 14 | 1 下面的程序执行的时候报错:
Exception in thread "main" java.lang.NullPointerException
at FibSequence.F(FibSequence.java:26)
at FibSequence.main(FibSequence.java:8)
请问是什么原因,应该如何改? 谢谢。
1 import java.util.*;
2 import java.math.*;
3
4 public class FibSequence
5 {
6 public static void main(String[] args)
7 {
8 System.out.println(F(8));
9 }
10
11
12 private static BigInteger[] known = new BigInteger[50];
13 static
14 {
15 for (BigInteger b : known) b = BigInteger.ZERO;
16 known[1] = BigInteger.ONE;
17 known[2] = BigInteger.ONE;
18 }
19
20
21 public static BigInteger F(int N)
22 {
23 if (N <= 0) return BigInteger.ZERO;
24 if( 1 == N ) return BigInteger.ONE;
25 if (2 == N ) return BigInteger.ONE;
26 if( known[N].compareTo(BigInteger.ZERO) != 0 ) return known[N];
27
28 return known[N] = F(N-1).add(F(N-2)).add(F(N-3));
29 // return known[N] = result;
30
31 }
32 } |
c*****u 发帖数: 562 | 2 问题在于第15行
初始化的方式不对
15行只是在不停的把临时变量b修改为ZERO
数组本身并没有改变
【在 f****l 的大作中提到】 : 下面的程序执行的时候报错: : Exception in thread "main" java.lang.NullPointerException : at FibSequence.F(FibSequence.java:26) : at FibSequence.main(FibSequence.java:8) : 请问是什么原因,应该如何改? 谢谢。 : 1 import java.util.*; : 2 import java.math.*; : 3 : 4 public class FibSequence : 5 {
|
f****l 发帖数: 14 | 3 明白了,改过之后就可以了。 谢谢你的回答。
【在 c*****u 的大作中提到】 : 问题在于第15行 : 初始化的方式不对 : 15行只是在不停的把临时变量b修改为ZERO : 数组本身并没有改变
|
r*****l 发帖数: 2859 | 4 This shows an interesting limitation that an enhanced for loop has: the
element is immutable in the loop. |
g*****g 发帖数: 34805 | 5 this is equals to
for(int i =0; i < arr.length; i++) {
int b = arr[i];
b = 1;
}
Of course the initialization won't work.
【在 r*****l 的大作中提到】 : This shows an interesting limitation that an enhanced for loop has: the : element is immutable in the loop.
|
r*****l 发帖数: 2859 | 6 And you have to use normal loop in this case.
【在 g*****g 的大作中提到】 : this is equals to : for(int i =0; i < arr.length; i++) { : int b = arr[i]; : b = 1; : } : Of course the initialization won't work.
|