質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

2428閲覧

正解するまでNextButtonを押せないようにしたい

kimura

総合スコア59

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2015/10/13 12:03

現在クイズを作ってます。
0=正解 1,2=不正解としてます。
問題に1度ボタンを押すと正解・不正解が分かり、次の問題に行けるNextButtonを押せるようになってます。
問題には1度しか答えられない状態です。
またscoreがありまして、正解数/問題数で正解数が分かるようになってます。

これを正解buttonを押せるまでNextButtonを押せないようにしたいです。
ただし、2度目以降に正解buttonを押してもscoreに反映しないようにしたいです。

以前も同じ質問させていただき、「booleanはこのクラスのメンバ変数として持たせます.
そして適宜その変数をtrueにしたりfalseにしたり,または参照して条件分岐させます.
正解を押した時は,今正解判定の後にやっているButtonのsetEnabledを,「正解の場合のみ」実行するようにすれば,正解時は次の問題に進む以外のボタン操作ができません.」と教えていただいたのですが勉強不足で上手く書けませんでした。

大変申し訳ありませんが具体的なコードなども教えていただけますとありがたいです。

素人で分かりにくい質問かと思いますがご教授いただけますとありがたいので何卒宜しくお願い致します。

・java

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class MyQuiz extends ActionBarActivity {

public final static String EXTRA_MYSCORE = "com.example.taguchi.myquizapp.MYSCORE"; private ArrayList<String[]> quizSet = new ArrayList<String[]>(); private TextView scoreText; private TextView qText; private Button a0Button; private Button a1Button; private Button a2Button; private Button nextButton; private int currentQuiz = 0; private int score = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_quiz); loadQuizSet(); getViews(); setQuiz(); } private void showScore() { scoreText.setText("Score: " + score + " / " + quizSet.size()); } private void setQuiz() { qText.setText(quizSet.get(currentQuiz)[0]); ArrayList<String> answers = new ArrayList<String>(); for (int i = 1; i <= 3; i++) { answers.add(quizSet.get(currentQuiz)[i]); } Collections.shuffle(answers); a0Button.setText(answers.get(0)); a1Button.setText(answers.get(1)); a2Button.setText(answers.get(2)); a0Button.setEnabled(true); a1Button.setEnabled(true); a2Button.setEnabled(true); nextButton.setEnabled(false); showScore(); } public void checkAnswer(View view) { // answer? Button clickedButton = (Button) view; String clickedAnswer = clickedButton.getText().toString(); // judge if (clickedAnswer.equals(quizSet.get(currentQuiz)[1])) { clickedButton.setText("◯ " + clickedAnswer); score++; } else { clickedButton.setText("× " + clickedAnswer); } showScore(); // button a0Button.setEnabled(false); a1Button.setEnabled(false); a2Button.setEnabled(false); nextButton.setEnabled(true); // next quiz currentQuiz++; if (currentQuiz == quizSet.size()) { nextButton.setText("Check result"); } } public void goNext(View view) { if (currentQuiz == quizSet.size()) { // show result Intent intent = new Intent(this, MyResult.class); intent.putExtra(EXTRA_MYSCORE, score + " / " + quizSet.size()); startActivity(intent); } else { setQuiz(); } } @Override public void onResume() { super.onResume(); nextButton.setText("Next"); currentQuiz = 0; score = 0; setQuiz(); } private void getViews() { scoreText = (TextView) findViewById(R.id.scoreText); qText = (TextView) findViewById(R.id.qText); a0Button = (Button) findViewById(R.id.a0Button); a1Button = (Button) findViewById(R.id.a1Button); a2Button = (Button) findViewById(R.id.a2Button); nextButton = (Button) findViewById(R.id.nextButton); } private void loadQuizSet() { InputStream inputStream = null; BufferedReader bufferedReader = null; try { inputStream = getAssets().open("quiz.txt"); bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); String s; while ((s = bufferedReader.readLine()) != null) { quizSet.add(s.split("\t")); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStream != null) inputStream.close(); if (bufferedReader != null) bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

クラスの中でonCreateが始まるまでの部分(今たくさんprivate Buttonとか書いてる場所)に

java

1private boolean firstAnswer;

これを追加し,問題開始時,つまりsetQuiz()の中で

java

1firstAnswer = true;

こう設定します.checkAnswerの中で,

java

1 public void checkAnswer(View view) { 2 // answer? 3 Button clickedButton = (Button) view; 4 String clickedAnswer = clickedButton.getText().toString(); 5 6 // judge 7 if (clickedAnswer.equals(quizSet.get(currentQuiz)[1])) { 8 clickedButton.setText("◯ " + clickedAnswer); 9 if(firstAnswer) //追加 10 score++; 11 --> /******* この場所に ********/ 12 | } else { 13 | clickedButton.setText("× " + clickedAnswer); 14 | firstAnswer = false; //追加 15 | } 16 | showScore(); 17 | 18 | /***** ここから *****/ 19 | // button 20 | a0Button.setEnabled(false); 21 | a1Button.setEnabled(false); 22 | a2Button.setEnabled(false); 23 | nextButton.setEnabled(true); 24 | 25 | // next quiz 26 | currentQuiz++; 27 -- /**** ここまでの部分を *****/ 28 29 if (currentQuiz == quizSet.size()) { 30 nextButton.setText("Check result"); 31 } 32 }

こう変更してやるといいのではないでしょうか.

投稿2015/10/13 12:12

編集2015/10/13 12:21
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kimura

2015/10/13 12:48

本当に何度も申し訳ありません。 大変感謝してます気持ちと申し訳ない気持ちでいっぱいです。ありがとうございます。 NextButtonは完璧に出来ました。 ですが、二度目三度目でもscoreに++されてしまって… private Button nextButton; private boolean firstAnswer;  ←ここ private void setQuiz() { firstAnswer = true;  ←ここ if(clickedAnswer.equals(quizSet.get(currentQuiz)[1])) { clickedButton.setText("○ " + clickedAnswer); if(firstAnswer)  ←ここ score++; ご指示いただいた3点にコードを入れたのですが、また私が何か間違ってしまったのかもしれませんが、何かお気づきいただければ点があれば懲りずにコメントいただけますとありがたいです。
swordone

2015/10/13 12:51

私がelseのブロックに書いた firstAnswer = false; //追加 が抜けてます
kimura

2015/10/13 13:00

すいません。性格と一緒で抜けてました。 ありがとうございました。 完璧に出来ました。 本当に感謝感謝です。 何度も何度もお手数お掛け致しまして申し訳ありませんでした。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問