俺(超素人だけど)の場合
発生箇所がわからないなら
System.out.println()使って、どこまで正常処理できてるか確認してる

たとえば
n[i]=n[i]+1;
hoge(n);
hogehoge(n[k]); とかなら

n[i]=n[i]+1; System.out.println("ここまで正常");
hoge(n);
hogehoge(n[k]);

n[i]=n[i]+1;
hoge(n); System.out.println("ここまで正常");
hogehoge(n[k]);

とずらしていって何度も繰り返してエラー箇所探す