2017-03-22 5 views
0
for(int i=0; i<= field.length; i++){ 
    String[] field = allFields.split(","); 
    String field1 = "$"+field[i]; 
    BsonField includeFields = Accumulators.first(field[i], field1); 
    includeList.add(includeFields); 
} 
    group = Aggregates.group(groupByField,includeList); 

ここでallFieldsには選択したい列(「ID、NAME」)があります。Mongodbのインデックスアウトバウンドでのセクションアウト

なぜ私はindexoutofboundsexceptionを与えていますか?

+0

フィールドのi値がフィールドの長さ – radhakrishnan

+0

を超えていないことを、includeFields 'name = 'ID'、value = Expression {name = '$ first'、expression = $ ID}'で印刷するようにしました。この@radhakrishnanの例外です。 – svm

+0

'i'はどこに定義されていますか? – Veeram

答えて

0

将来の訪問者のための参照 fooという配列が10個のアイテムを含むとします。私たちは、次のコード?:

for(int i = 0;i<=foo.length;i++){ 
    //some code that uses foo[i] here 
} 

を使用して反復処理しようとすると、答えはfooはあなたがいるのでfoo[0] to foo[9] を使用してそれらにアクセスできることを意味します10個の要素を 含ま前simple.Asが言われてIndexOutOfBoundsException 理由で何が起こる 配列インデックスは0から始まりますfoo[9]は配列の最後の要素(10番目の要素)を含んでいます '

forループではどうなりますか?

繰り返し実行するときは、常にi<=foo.lengthにチェックを入れてください。 iの値が9の場合、式i<=foo.length(which means i<=10)trueと評価されます。これは、forループが最後に実行されることを意味します。ループ内でループが発生すると、存在しないfoo[10]にアクセスしようとします。 IndexOutOfBoundsException

ですから、配列を反復処理したいときに常にi<foo.length

だから、あなたもあなたの問題を解決し、それを考え出したとして、使用がこのであることを覚えておいてください:

for(int i=0; i< field.length; i++){ 
    String[] field = allFields.split(","); 
    String field1 = "$"+field[i]; 
    BsonField includeFields = Accumulators.first(field[i], field1); 
    includeList.add(includeFields); 
}