2016-04-22 11 views
0

私は60個の値を持つ配列を持っています。次のボタンをクリックすると、番号60まで昇順で配列のすべての値が循環します。再び。配列が正しくループしていない - Java

私も以前のボタンがあるので、上に行く代わりに値を下げることができます。私が最初の配列値[0]の前のボタンを押すと、私のアプリケーションがクラッシュし、私はなぜそれがわかりません。

public String nextFact() { 
    i++; 
    if(i >= facts.length) { 
     i = 0; 
    } 
    return facts[i]; 
} 

public String previousFact() { 
    i--; 
    if(i < 0) { 
     i = facts.length; 
    } 
    return facts[i]; 
} 
+1

あなたは '私は= facts.lengthと思う理由を説明することができます。[i]は事実' 'と、'正しいですか?つまり、配列の長さは有効なインデックスではないことは明らかです。なぜなら、 'nextFact'ではその数を避けているからですが、' previousFact'ではそうでないと思いますか? – Tom

答えて

2

有効な配列インデックスは0からfacts.length - 1までの範囲ので、あなたは、facts.lengthiを変更するときは、ArrayIndexOutOfBoundsExceptionを得ている:

は、ここに私のコードです。 ifacts.length - 1に設定します。

if(i < 0) { 
    i = facts.length - 1; 
} 

長さ以上の折り返しコードは正常に動作しているはずです。

+0

私は試してみましたが、以前にヒットしたときでもクラッシュします。 –

0

配列のサイズはarray.lengthです。したがって、最後のインデックスはarray.length-1になります。前の関数では、array.lengthをiに代入します。これはarrayのmax indexより大きいインデックスであるため、クラッシュします。 indexoutofboundエラーも発生しているはずです。

あなたはこれでその行を置き換える必要があります。

i = facts.length - 1; 
+0

私は試しましたが、前回ヒットしたときでもクラッシュします。 –

+0

あなたは何を得ていますか? – denis

関連する問題