teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2015/10/11 15:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -48,7 +48,7 @@
48
48
  }
49
49
  Collections.shuffle(answers);
50
50
 
51
- /解答Buttonに個別にしていた設定をListとforを使ってまとめて記述
51
+ //解答Buttonに個別にしていた設定をListとforを使ってまとめて記述
52
52
  for(int i = 0; i < answers.size(); i++){
53
53
  Button button = buttons.get(i);
54
54
  button.setText(answers.get(i));
@@ -63,8 +63,11 @@
63
63
  //ボタンクリック時の動作を実装
64
64
  @Override
65
65
  public void onClick(View view){
66
+ //クリックされたのが解答ボタンのどれかだった場合は解答の判定
66
67
  if(buttons.contains(view))
67
68
  checkAnswer(view);
69
+
70
+ //nextButtonがクリックされたら次の問題への処理
68
71
  else if(view == nextButton)
69
72
  goNext(view);
70
73
  }
@@ -88,7 +91,8 @@
88
91
  }
89
92
 
90
93
  public void goNext(View view) {
94
+ //「10問目まで」ならここを10に書き換えればよい
91
- if (currentQuiz == quizSet.size()) {
95
+ if (currentQuiz == 10) {
92
96
  // show result
93
97
  Intent intent = new Intent(this, MyResult.class);
94
98
  intent.putExtra(EXTRA_MYSCORE, score + " / " + quizSet.size());

1

コードを実際に書いてみた

2015/10/11 15:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -2,4 +2,121 @@
2
2
  0. 問題の入っているquizSetを,最初の出題前にシャッフルする.途中でやっているanswerのシャッフルと同じ方法で構わない.
3
3
  0. nextButtonを押したタイミングでcurrentQuizが10なら終了する.
4
4
  - 現状の問題点
5
- 各ButtonにOnClickLisnerをセットしていないため,現段階ではどのButtonを押しても何も起こらない
5
+ 各ButtonにOnClickLisnerをセットしていないため,現段階ではどのButtonを押しても何も起こらない
6
+
7
+ ある程度コードを書いてみます.
8
+ ```java
9
+ //クリックリスナーを実装
10
+ public class MyQuiz extends ActionBarActivity implements View.OnClickListener{
11
+
12
+ public final static String EXTRA_MYSCORE = "com.example.taguchi.myquizapp.MYSCORE";
13
+ private ArrayList<String[]> quizSet = new ArrayList<String[]>();
14
+
15
+ private TextView scoreText;
16
+ private TextView qText;
17
+ private Button a0Button, a1Button, a2Button;
18
+ private List<Button> buttons; //Buttonごとの操作をまとめてするためリスト化
19
+ private Button nextButton;
20
+
21
+ private int currentQuiz = 0;
22
+ private int score = 0;
23
+
24
+ @Override
25
+ protected void onCreate(Bundle savedInstanceState) {
26
+ super.onCreate(savedInstanceState);
27
+ setContentView(R.layout.activity_my_quiz);
28
+
29
+ loadQuizSet();
30
+
31
+ Collections.shuffle(quizSet); //問題セットはこのタイミングで1度だけシャッフルする
32
+
33
+ getViews();
34
+
35
+ setQuiz();
36
+ }
37
+
38
+ private void showScore() {
39
+ scoreText.setText("Score: " + score + " / " + quizSet.size());
40
+ }
41
+
42
+ private void setQuiz() {
43
+ qText.setText(quizSet.get(currentQuiz)[0]);
44
+
45
+ ArrayList<String> answers = new ArrayList<String>();
46
+ for (int i = 1; i <= 3; i++) {
47
+ answers.add(quizSet.get(currentQuiz)[i]);
48
+ }
49
+ Collections.shuffle(answers);
50
+
51
+ /解答Buttonに個別にしていた設定をListとforを使ってまとめて記述
52
+ for(int i = 0; i < answers.size(); i++){
53
+ Button button = buttons.get(i);
54
+ button.setText(answers.get(i));
55
+ button.setEnabled(true);
56
+ }
57
+
58
+ nextButton.setEnabled(false);
59
+
60
+ showScore();
61
+ }
62
+
63
+ //ボタンクリック時の動作を実装
64
+ @Override
65
+ public void onClick(View view){
66
+ if(buttons.contains(view))
67
+ checkAnswer(view);
68
+ else if(view == nextButton)
69
+ goNext(view);
70
+ }
71
+
72
+ public void checkAnswer(View view) {
73
+
74
+ //判定に関してはそのままでいい
75
+
76
+ // ここの操作もforで書き換え
77
+ for(Button button : buttons){
78
+ button.setEnabled(false);
79
+ }
80
+ nextButton.setEnabled(true);
81
+
82
+ // next quiz
83
+ currentQuiz++;
84
+
85
+ if (currentQuiz == quizSet.size()) {
86
+ nextButton.setText("Check result");
87
+ }
88
+ }
89
+
90
+ public void goNext(View view) {
91
+ if (currentQuiz == quizSet.size()) {
92
+ // show result
93
+ Intent intent = new Intent(this, MyResult.class);
94
+ intent.putExtra(EXTRA_MYSCORE, score + " / " + quizSet.size());
95
+ startActivity(intent);
96
+ } else {
97
+ setQuiz();
98
+ }
99
+ }
100
+
101
+ @Override
102
+ public void onResume() {
103
+ //変更不要なので省略
104
+ }
105
+
106
+ private void getViews() {
107
+
108
+ //各View,Buttonを取得する記述(もとと同じでいいので省略)
109
+
110
+ buttons = Arrays.asList(a0Button, a1Button, a2Buttons); //Buttonをリスト化
111
+ //各Buttonにクリックリスナを設定
112
+ for(Button button : buttons){
113
+ button.setOnClickListener(this);
114
+ }
115
+ nextButton.setOnClickListener(this);
116
+ }
117
+
118
+ private void loadQuizSet() {
119
+ //ここは変更しなくていいので省略
120
+ }
121
+ }
122
+ ```