2016-09-19 6 views
0

毎回異なる質問を読み込みたいです。私は次のコードを試してみましたが、最初の質問はランダムに変更されます。他のすべての質問が順番に来ます。データベースからランダムなQid(質問)を読み込んでいますか?

QuizHelper db = new QuizHelper(this); // my question bank class 
     quesList = db.getAllQuestions(); // this will fetch all quetonall questions 
     Random random = new Random(); currentQ = quesList.get(random.nextInt(quesList.size())); 

ここで完全なコードです。

public class QuestionActivity extends Activity { 
    List<Question> quesList; 

    int score = 0; 
    int qid = 0;  

    Question currentQ; 
    TextView txtQuestion, times, scored; 
    Button button1, button2, button3;  

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     QuizHelper db = new QuizHelper(this); // my question bank class 
     quesList = db.getAllQuestions(); // this will fetch all quetonall questions 
     Random random = new Random(); currentQ = quesList.get(random.nextInt(quesList.size())); 
     // currentQ = quesList.get(qid); // the current question 

     txtQuestion = (TextView) findViewById(R.id.txtQuestion); 
     // the textview in which the question will be displayed 

     // the three buttons, 
     // the idea is to set the text of three buttons with the options from question bank 
     button1 = (Button) findViewById(R.id.button1); 
     button2 = (Button) findViewById(R.id.button2); 
     button3 = (Button) findViewById(R.id.button3); 

     // the textview in which score will be displayed 
     scored = (TextView) findViewById(R.id.score); 

     // the timer 
     times = (TextView) findViewById(R.id.timers);  

     // method which will set the things up for our game 
     setQuestionView(); 
     times.setText("00:02:00"); 

     // A timer of 60 seconds to play for, with an interval of 1 second (1000 milliseconds) 
     CounterClass timer = new CounterClass(80000, 1000); 
     timer.start(); 

     // button click listeners 
     button1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       // passing the button text to other method 
       // to check whether the anser is correct or not 
       // same for all three buttons 
       getAnswer(button1.getText().toString()); 
      } 
     }); 

     button2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button2.getText().toString()); 
      } 
     }); 

     button3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getAnswer(button3.getText().toString()); 
      } 
     }); 
    } 

    public void getAnswer(String AnswerString) { 
     if (currentQ.getANSWER().equals(AnswerString)) { 

      // if conditions matches increase the int (score) by 1 
      // and set the text of the score view 
      score++; 
      scored.setText("Score : " + score); 
     } else { 

      // if unlucky start activity and finish the game 

      Intent intent = new Intent(QuestionActivity.this, 
        ResultActivity.class); 

      // passing the int value 
      Bundle b = new Bundle(); 
      b.putInt("score", score); // Your score 
      intent.putExtras(b); // Put your score to your next 
      startActivity(intent); 
      finish(); 
     } 
     if (qid < 25) { 

      // if questions are not over then do this 
      currentQ = quesList.get(qid); 
      setQuestionView(); 
     } else { 

      // if over do this 
      Intent intent = new Intent(QuestionActivity.this, 
        ResultActivity.class); 
      Bundle b = new Bundle(); 
      b.putInt("score", score); // Your score 
      intent.putExtras(b); // Put your score to your next 
      startActivity(intent); 
      finish(); 
     }  
    }  

    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    @SuppressLint("NewApi") 
    public class CounterClass extends CountDownTimer { 

     public CounterClass(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void onFinish() { 
      times.setText("Time is up"); 
     } 

     @Override 
     public void onTick(long millisUntilFinished) { 
      // TODO Auto-generated method stub 

      long millis = millisUntilFinished; 
      String hms = String.format(
        "%02d:%02d:%02d", 
        TimeUnit.MILLISECONDS.toHours(millis), 
        TimeUnit.MILLISECONDS.toMinutes(millis) 
          - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS 
          .toHours(millis)), 
        TimeUnit.MILLISECONDS.toSeconds(millis) 
          - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS 
          .toMinutes(millis))); 
      System.out.println(hms); 
      times.setText(hms); 
     } 
    } 

    private void setQuestionView() { 

     // the method which will put all things together 
     txtQuestion.setText(currentQ.getQUESTION()); 
     button1.setText(currentQ.getOPTA()); 
     button2.setText(currentQ.getOPTB()); 
     button3.setText(currentQ.getOPTC()); 

     qid++; 
    }  
} 
+0

'//をinsted質問が終わっていない場合、このcurrentQ = quesList.get(QID)を行う;' 不明だ何? – chrylis

答えて

1

それは1だけインクリメントされQIDそして、あなたのgetAnswerに

currentQ = quesList.get(qid); 

を使用して()によるものです。重複ランダムを回避する方法である

currentQ = quesList.get(random.nextInt(quesList.size())); 

そしてhereにcurrentQを変更してみてください、あなたのランダムグローバルください。

[EDIT]

[OK]を、重複を避けるために、これを行うことを簡単にします。あなたのsetQuestionあり

quesList.remove(position); 

あなたが行くの終わりに続いて世界的なint型の位置

position = random.nextInt(quesList.size()) 
currentQ = quesList.get(position); 

を行い、質問が繰り返されることはありません。希望が役立ちます。

+0

私はこれを試しましたが、最初の質問だけがランダムです。 2番目の質問から始まり、常に順番に来る。 – user3004860

+0

'getAnswer(String AnswerString)'の中で 'currentQ = quesList.get(qid);を変更しても同じ結果が得られましたか? –

+0

私はoncreate()でcurrentqを変更すると、最初の質問だけがランダムに発生します。 getanswer()でcurrentqが変更されても動作しますが、重複した質問がたくさん表示されます。私はあなたの参照を確認したが、重複を解決することはできません。 – user3004860

0
currentQ = quesList.get(random.nextInt(quesList.size())); 

使用これは、QIDの

+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – abarisone

関連する問題