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

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

ただいまの
回答率

90.48%

  • Java

    16128questions

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

  • Android

    7390questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • checkbox

    51questions

    checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Checkbox2がダメだった時にはCheckbox3がtrueかどうかを確認するプログラムを書きたい

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 554

riroholll

score 25

Checkbox2がダメだった時にはCheckbox3がtrueかどうかを確認するプログラムを書きたいのですが

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;


public class SubActivity extends Activity {

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


final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkbox2);
        CheckBox.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {

if(CheckBox.isChecked() == true) {


        Button Button = (Button) findViewById(R.id.button);
        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplication(), MainActivity.class);
                startActivity(intent);
            }
        });
}
else {




}



}
});
}
}

このプログラムを

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;


public class SubActivity extends Activity {

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


final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkbox2);
        CheckBox.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {

if(CheckBox.isChecked() == true) {


        Button Button = (Button) findViewById(R.id.button);
        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplication(), MainActivity.class);
                startActivity(intent);
            }
        });
}
else {
final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkbox3);
        CheckBox.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {

if(CheckBox.isChecked() == true) {


        Button Button = (Button) findViewById(R.id.button);
        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplication(), MainActivity.class);
                startActivity(intent);
            }
        });
}



}



}
});
}
}

こう書くとエラーになります。

どのように直せばよいのでしょうか?

追加

package com.example.askad.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;


public class SubActivity extends Activity {

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


final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkBox2);
        CheckBox.setOnClickListener(new View.OnClickListener(){

@Override
public void onClick(View v) {

if(CheckBox.isChecked() == true) {


        Button Button = (Button) findViewById(R.id.button);
        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplication(), MainActivity.class);
                startActivity(intent);
            }
        });
}
else {

    final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkBox3);
    CheckBox.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {

            if(CheckBox.isChecked() == true) {


                Button Button = (Button) findViewById(R.id.button);
                Button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(getApplication(), MainActivity.class);
                        startActivity(intent);
                    }
                });
            }



}


    }
});
}
        }


に変更すると

イメージ説明

このようなエラーが発生します

更新
アルゴリズム的には

if checkbox2 =tree
の時
system.out.print(a)

else if checkbox3=tree

system.out.print(b)

みたいなプログラムを書きたいと思っている

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • swordone

    2017/07/18 00:35

    まずは正しくインデントを入れましょう

    キャンセル

  • riroholll

    2017/07/18 22:26

    更新しました

    キャンセル

  • ykws

    2017/07/18 22:34

    まだインデントが正しくないように見えます

    キャンセル

回答 4

+2

public class SubActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub1);
        final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkbox2);
        CheckBox.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {

                if(CheckBox.isChecked() == true) {

                    Button Button = (Button) findViewById(R.id.button);
                    Button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(getApplication(), MainActivity.class);
                            startActivity(intent);
                        }
                    });
                } else {
                    final CheckBox CheckBox = (CheckBox)findViewById(R.id.checkbox3);
                    CheckBox.setOnClickListener(new View.OnClickListener(){

                        @Override
                        public void onClick(View v) {

                            if(CheckBox.isChecked() == true) {
                                Button Button = (Button) findViewById(R.id.button);
                                Button.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    Intent intent = new Intent(getApplication(), MainActivity.class);
                                    startActivity(intent);
                                }
                            });
                        }
                    }
                }
            });
        }
    }                                


ひとまずインデント整えてみましたが、いやになる作業ですねこれ。
そしてこれだけで明らかにおかしな部分が見えます。

というか、こんなコード書く前にどうしたらいいか少し考えましょう。
大事なのは、2つあるチェックボックスのうちのどちらかがtrueであれば処理を実行することなので、チェックボックスをメンバにして、その2つの状態を||演算子でつないで判定します。

あと、変数名を大文字始まりにするのはやめてください。クラス名と一緒なので混乱します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

インデントがあっていないので合わせるようにしましょう。
そうすればどこが閉じ忘れか、また多いのかわかると思います。

ですが、そもそも onClick の中で別の onClick を定義するのは不自然なので、
(クリックされるまで、そのオブジェクトのクリックイベントが定義されないことになります)
個別に書くようにしましょう。
そうするとインデントの階層も浅くなり、こういったミスも混入しづらくなります。

下記は Button の実装例ですが、onClick の中には別の Button の実装は書かないようにします。
Button | Android Developers

また、以下の表現は曖昧なので、後半部分と同じように true か false で表現すると良いと思います。

Checkbox2がダメだった時

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/18 00:22

    else の処理を書かずに一度処理を終わらせてその下に記入したほうが良いということでしょうか?

    キャンセル

  • 2017/07/18 00:39 編集

    回答に Button の実装例のリンクを追加しました。 else の処理は書いても良いと思いますが、その中に別の Button の実装は書かないようにしましょう。

    キャンセル

+1

エラーが出ている原因は単に{}の対応が合っていないことですね。それは丁寧に修正していけば直るでしょう。それから、Android Studioのエディターではboolean型の評価では

if(CheckBox.isChecked()){}

のような記述を推奨しています。isChecked()のところが黄色くなっているのはこのためです。あくまで推奨なだけでエラーではないので、自分の記述方針として現状のままが良ければそれでもいいでしょう。

それよりも、これはそもそもCheckBox.setOnClickListener()は必要なのか?という感じがしますが。「初めてチェックボックスをクリックするまではボタンを押しても何も機能しない」というプログラムになるわけですが、そういう動作を意図しているのでしょうか?

すでに他の回答でも出ていますが、プログラムの設計を整理した方が良さそうですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/18 22:20

    プログラムとしてはcheck2を選んだときは
    変数aに入力された値を記録するというプログラムを書こうとしています
    check3を選んだ時には変数bに記録するなどとしてelseでつないでいきたいのですがどうすればうまくいくのかがわからなくて

    回答よろしくお願いします

    キャンセル

check解決した方法

-2

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;


public class SubActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sub1);
        final CheckBox CheckBox = (CheckBox) findViewById(R.id.checkBox2);
        final CheckBox CheckBox1 = (CheckBox) findViewById(R.id.checkBox3);
        final CheckBox CheckBox2 = (CheckBox) findViewById(R.id.checkBox4);
        final CheckBox CheckBox3 = (CheckBox) findViewById(R.id.checkBox5);
        CheckBox.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {

                if(CheckBox.isChecked() == true) {


                    Button Button = (Button) findViewById(R.id.button);
                    Button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(getApplication(), MainActivity.class);
                            startActivity(intent);
                        }
                    });
                }
                else {

                    if(CheckBox1.isChecked() == true) {


                        Button Button = (Button) findViewById(R.id.button);
                        Button.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Intent intent = new Intent(getApplication(), MainActivity.class);
                                startActivity(intent);
                            }
                        });
                    }



                }



            }
        });
    }
}


このコードでエラーは解消されたのですがページ変移がしない現象が陥ちましたw

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Java

    16128questions

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

  • Android

    7390questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • checkbox

    51questions

    checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。