0

そのため、クリックすると、チェックボックスに応じてint変数attackTotalまたはdamageTotalのいずれかに数値が追加され、いくつかのテキストビューに表示される一連のチェックボックスを設定しようとしています。

ただし、現在、一番上のチェックボックスをクリックすると、switch ステートメントの両方とその後のすべてのチェックボックスをクリックしたかのように動作します。2番目のクリックボックスは、それ自体と次のすべてのものもアクティブになっているようです.etcetera etcetera ...

だからここに私がまとめたコードがあります。

public void onCheckboxClicked(View v) {
    // Is the view now checked?
    boolean checked = ((CheckBox) v).isChecked();


    // Check which checkbox was clicked
    switch(v.getId()) {

    case R.id.checkBox1:
        if (checked)
                {
                flankAttack=2;
                }

        else
                {
                flankAttack=0;
                }

    case R.id.checkBox2:
        if (checked)
                {
                pbs=1;                  
                }
        else
                {
                pbs=0;
                }

ずっと..

        case R.id.checkBox10:
            if (checked)
            {
                attackTotal=attack+flankAttack+pbs;
                damageTotal=damage+pbs;

                TextView textView = (TextView) findViewById(R.id.textView2);
                TextView textView2 = (TextView) findViewById(R.id.textView4);
                textView.setText(Integer.toString(attackTotal));
                textView2.setText(Integer.toString(damageTotal));
            }
            else
            {
                attackTotal=attack+flankAttack+pbs;
                damageTotal=damage+pbs;

                TextView textView = (TextView) findViewById(R.id.textView2);
                TextView textView2 = (TextView) findViewById(R.id.textView4);
                textView.setText(Integer.toString(attackTotal));
                textView2.setText(Integer.toString(damageTotal));
            }

私は金曜日にこのプログラミングのことを理解しようとし始めたばかりなので、優しくしてください.

4

3 に答える 3

3

プログラムにswitchステートメントから抜けるように指示するcase R.id.checkBox2:必要がある直前。break;それ以外の場合は、会議R.id.checkBox1が続行され、必要なすべてのロジックが実行さR.id.checkBox2れます。break;(他のすべてのケースの前にも必要です)。

于 2012-07-29T18:04:14.317 に答える
1

休憩を追加するのを忘れました。すべての場合の終わりに。

于 2012-07-29T18:04:22.153 に答える
0

break各 の後のステートメントを忘れましたcase。毎回次のケースに落ちています。

また、case ステートメントに数行以上のコードを入れないことを強くお勧めします。代わりに、各ケースを独自のメソッドに引き出します。通常、自己文書化されたそれぞれに適切な名前を付けるのは簡単です。

switch (foo) {
    case 0:
        do();
        lots();
        of();
        things();
        break;
    case 1:
        do();
        other();
        things();
        break;
    case 2:
        if (ugly)
        {
            this_gets();
            messy();
            quickly();
        }
        else
        {
            we_could();
            do_better();
        }
        break;
}

なる:

void do_case_0() {
    do();
    lots();
    of();
    things();
}

void do_case_1() {
    do();
    other();
    things();
}

void do_case_2() {
    if (ugly)
    {
        this_gets();
        messy();
        quickly();
    }
    else
    {
        we_could();
        do_better();
    }
}


// ...
    switch (foo) {
        case 0:    do_case_0();    break;
        case 1:    do_case_1();    break;
        case 2:    do_case_2();    break;
    }
于 2012-07-29T18:03:11.767 に答える