-2

その質問と回答をランダムに生成しています。そして、ユーザーが正解を選択したときに、それらに応じて新しいランダム配列と回答オプションを生成したいと考えています。しかし、ブール値のwhileループを追加すると「到達不能コード」と表示されます...問題は何ですか?

ありがとう...

final boolean basadon = false;
    while(basadon)

    {
    Random soru = new Random();
    final int[] rastgele = new int[1];
    for (int i=0; i<1; i++)
            {
                rastgele[i]= soru.nextInt(8);
            }

     ArrayList<Integer> cevap = new ArrayList<Integer>();

     for (int k = 0; k <= 7; ++k) 
        {
            cevap.add(k);               
        }

     final Integer[] rastgele2 = new Integer[4];
                if (rastgele[0]!=cevap.get(0))
                {
                rastgele2[0]=cevap.get(0);
                }
                else
                {
                rastgele2[0]=cevap.get(3);
                }
                if (rastgele[0]!=cevap.get(1))
                {
                rastgele2[1]=cevap.get(1);
                } 
                else
                {
                rastgele2[1]=cevap.get(3);
                }
                if (rastgele[0]!=cevap.get(2))
                {
                rastgele2[2]=cevap.get(2);
                } 
                else
                {
                rastgele2[2]=cevap.get(3);
                }                   
                rastgele2[3]=rastgele[0];
                Collections.shuffle(Arrays.asList(rastgele2)); 



    view.setText(countries.get(rastgele[0]));
    cevap1.setBackgroundResource(heads[rastgele2[0]]);

    cevap1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

        if (rastgele[0]==rastgele2[0])
        {
            cevap1.setBackgroundResource(heads[8]);
            countries.remove(rastgele[0]);
            basadon=true;
        }
        else {
            cevap1.setBackgroundResource(heads[9]);

        }
        }
    });
    cevap2.setBackgroundResource(heads[rastgele2[1]]);      
    cevap2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

        if (rastgele2[1]==rastgele[0])
        {
            cevap2.setBackgroundResource(heads[8]);
            countries.remove(rastgele[0]);
            basadon=true;
        }
        else {
            cevap2.setBackgroundResource(heads[9]);

        }
        }
    });
    cevap3.setBackgroundResource(heads[rastgele2[2]]);        
    cevap3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

            if (rastgele2[2]==rastgele[0])
        {
            cevap3.setBackgroundResource(heads[8]);
            countries.remove(rastgele[0]);
            basadon=true;
        }
        else {
            cevap3.setBackgroundResource(heads[9]);

        }
        }
    });
    cevap4.setBackgroundResource(heads[rastgele2[3]]);
    cevap4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub              

            if (rastgele2[3]==rastgele[0])
        {
            cevap4.setBackgroundResource(heads[8]);
            countries.remove(rastgele[0]);
            basadon=true;
        }
        else {
            cevap4.setBackgroundResource(heads[9]);

        }
        }
    });
    }
    } }
4

5 に答える 5

1

basedon 値を false として開始し、後でループ内で true に設定したようです。

だから、変えて

final boolean basedon = false
while (basedon) {
   ....
}

boolean basedon = false;
do {
....
} while (basedon);
于 2013-07-04T17:05:04.803 に答える
0

while(basadon)は常に false であるため、ループに入ることはありません。あなたが本当に意味するのは、おそらくwhile(basadon==false). また、後でその値を変更する必要があるため、basalonas を宣言しないでください。エラーが発生します。final boolean

于 2013-07-04T16:43:10.607 に答える
0

basadonであることが知られてfalseおり、ループの本体にwhile到達できないため、おそらく不平を言っています。この注釈をメソッドに追加することで、苦情を抑制することができます。

@SuppressWarnings("unused")

finalの宣言から修飾子を削除することもできますbasadon。これで問題が解決する可能性があります(ただし、それについてはわかりません)。

basadon編集クリックリスナー内から直接変更しようとしていることに最終的に気付きました。basadonの場合は明らかに機能finalしませんが、そうでない限りローカル変数にアクセスすることはできませんfinal。囲んでいるクラスのbasadon(非) フィールドに変更することをお勧めします。finalその後、すべての警告とエラーが消えるはずです。

于 2013-07-04T16:44:07.480 に答える
0

これらすべての変数を final として宣言するのはなぜですか? たとえば、bsadon を false から true に変更する必要がある場合、最終的なものにすることはできません。最終値はまさにそれであり、定数であり、変更されません。プログラムのランタイム全体で同じ値を維持する場合を除き、何かを final として宣言しないでください。

あなたはbasadonが常に「偽」であると言っています。それが最終的な意味であるため、コンパイラは、入力するには「真」を評価する必要があるため、決して入力しないことを伝えています。

コードを入力するには、while 句の () の間の式が true と評価される必要があります。

于 2013-07-04T17:00:46.430 に答える