我知道它被問了很多次,但我仍然無法理解我的錯誤之前的put方法..的NullPointerException在HashMap中
這只是一個正常的代碼我寫計數陣列中的重複次數(: )這可能是做這是一個非常長的方法,請提出一個更小的方式也如果你能想到的)
public int find(int[] sequence)
{
Arrays.sort(sequence);
int temp=0,count=0,j=0;
HashMap<Integer,Integer> data = new HashMap<Integer,Integer>();
for(int i:sequence){
Integer c = new Integer(count);
Integer d = new Integer(j);
if(i!=temp) {
if(count!=0) data.put(c,d);
count++;
j=1;
temp=i;
}
else j++;
}
count++;//This one causes the error
//System.out.println(count);
Integer c = new Integer(count);
Integer d = new Integer(j);
data.put(c,d);
long ans = TheSwapsDivTwo.factorial(sequence.length);
for(int i=1;i<=data.size();i++){
ans /= TheSwapsDivTwo.factorial(data.get(i).intValue());
System.out.println(data.get(i));
}
return (int)ans;
}
public static long factorial(int n) {
long fact = 1; // this will be the result
for (long i = 1; i <= n; i++) {
fact *= i;
}
return fact;
}
在for
循環的put
方法不會產生任何錯誤,但它確實爲實施在循環之外。
錯誤是這樣的:
java.lang.NullPointerException
at TheSwapsDivTwo.find(TheSwapsDivTwo.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.topcoder.services.tester.java.TestProcess$Runner.run(TestProcess.java:386)
附:算上++造成的錯誤......真是愚蠢..循環正想出界..
我懷疑你找到正確的路線。首先,'HashMap'允許空鍵和值。其次,如果HashMap拋出異常,你會在堆棧跟蹤中看到它的方法。 – AlexR
我沒有有意刪除空鍵,它只是代碼的一部分.. –
我可以建議一個更小的方法因子的方法...public static longial(int n){ \t \t if(n == 1) \t \t \t return 1; \t \t return n * factorial(n-1); \t} –