2017-11-28 16 views
-1

1つのチュートリアルで作業しています。配列のインデックスを減少または増加させるメソッドロジックを実装することを決定しました。どういうわけか、それはまだ私の配列の外に出ています。なぜそれが起こっているのですか?updateQuestionTrue/updateQuestionFalseのロジックがエラーを起こす理由を理解できません

mTrueButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     Toast toast = Toast.makeText(getApplicationContext(),"You are right!", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
     toast.show(); 

     mTextView = (TextView) findViewById(R.id.question_text_view); 
     mTextView.setText(mQuestionBank[mIndex].getQuestionId()); 
     updateQuestionTrue(); 

    } 
}); 

mFalseButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     Toast toast = Toast.makeText(getApplicationContext(),"Nope...", Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
     toast.show(); 

     mTextView = (TextView) findViewById(R.id.question_text_view); 
     mTextView.setText(mQuestionBank[mIndex].getQuestionId()); 
     updateQuestionFalse(); 

    } 
}); 

ここで間違ったロジック方法です。あなたは私のことを説明することができます、なぜ私の配列のサイズ外に行くのですか?それはmQuestionBank.lengthさもなければ等しくなるときに0からupdateQuestionTrue()セットmIndexが、updateQuestionFalse()mQuestionBank.length - 1からmIndexそれはそうでなければこのように0未満であろうときに、それがループ意志を設定する必要が同じよう

private void updateQuestionTrue() { 
    mIndex++; 
    if(mIndex == mQuestionBank.length) { 
      mIndex = 0; 
    } 
} 

private int updateQuestionFalse() { 
    mIndex--; 
    if(mIndex == 0) { 
     mQuestionBank[0].getQuestionId(); 
    } 
    return 0; 

}

+2

を試すことができますか?それは 'mIndex'が0より下になるのを止めていません。 – Blorgbeard

+1

mIndex == 0おそらく一度値を減らすのをやめます... –

+1

mIndexが0より下になるのを止めるべきですが、 == 0、それは0で初期化され、最初の質問を配列 –

答えて

0

インデックスの長さがアレイの長さに基づいて常に有効であることを確認してください。あなたは `updateQuestionFalse`を行うことになっている何次

private void updateQuestionTrue() { 
    if(mIndex + 1 >= mQuestionBank.length) { 
     mIndex = 0; 
    } 
    else 
     mIndex++; 
} 

private int updateQuestionFalse() { 
    if(mIndex - 1 <= 0) { 
     //mIndex = mQuestionBank.length - 1; //too loop back around 
     mIndex = 0; //or to keep the index at 0 once you are as far back as possible 
    } 
    else 
     mIndex--; 

    return mIndex; 
} 

あなたはまた、私の個人的な好みを使用することができ、三項演算子

private void updateQuestionTrue() { 
    mIndex = mIndex + 1 >= mQuestionBank.length ? 0 : ++mIndex; 
} 

private int updateQuestionFalse() { 
    return (mIndex = mIndex - 1 <= 0 ? 0 : --mIndex); 
} 
+0

それは私の配列の外に出ないように私を助けました。長さ。ありがとうございました。 –

+0

あなたは歓迎します、将来のコーディングの取り組みに幸運を祈る! @AlexanderGolovinov –

0

スタートの前に戻ったときに終了します。終了するときにループを開始するのと同じです。

あなたのコードではmQuestionBank[0].getQuestionId();が何をするのか分かりません。

関連する問題