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

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

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

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

Android Studio

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

Q&A

解決済

1回答

2057閲覧

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

kimura

総合スコア59

Java

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

Android Studio

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

0グッド

0クリップ

投稿2015/10/11 22:19

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

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

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

・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

ベストアンサー

「その問題で最初の解答か」を持つbooleanを用意するのが手っ取り早いです。

  • 問題開始時(setQuiz())

このbooleanをtrueにする。

  • 不正解時

このbooleanをfalseにする。

  • 正解時

このbooleanがtrueの場合にスコア加算

投稿2015/10/11 23:40

swordone

総合スコア20649

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

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

kimura

2015/10/11 23:54

いつもいつもお世話になっております。 ↓ここの中にbooleanを入れるようにすれば宜しいのですか?  書き方が分からず質問するのも申し訳ありませんが同じ問題で2度目3度目に正解Buttonを押してもscoreに反映されないのでしょうか? 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(); }
swordone

2015/10/12 02:10

booleanはこのクラスのメンバ変数として持たせます. そして適宜その変数をtrueにしたりfalseにしたり,または参照して条件分岐させます. 正解を押した時は,今正解判定の後にやっているButtonのsetEnabledを,「正解の場合のみ」実行するようにすれば,正解時は次の問題に進む以外のボタン操作ができません.
kimura

2015/10/13 12:00

何度もありがとうございました。 勉強不足で上手く書けませんでした。 また質問しますので良かったら教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問