-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

看起来您从基于 value 的 false 开始,然后在循环内将其设置为 true。

所以,改变

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

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

对于您提出的具体问题:

Why does the compiler give unreachable code warning 

答案是,由于 while 循环中的条件始终为 false,因此 while 循环中的代码不可能被执行。给出警告是为了表明(鉴于当前的代码情况)您在键入该部分代码时浪费了精力,并且保证永远不会执行。为了纠正这个问题,您可以从 basedon 中删除 final 修饰符并放置一个编程逻辑来设置 basedon 的值,这将决定是否进入循环。如果您希望循环始终运行 put while(true)。

但我相信你想问的是如何制作随机问答生成器。为此,您必须发布更大的代码块(看起来您正试图在侦听器回调上放置一个循环?)并提出您的问题以提出特定问题(可能发布一个单独的问题)。

于 2013-07-04T17:16:26.577 回答
0

它可能在抱怨,因为basadon已知并且无法到达循环false体。while您可以通过将此注释添加到方法来抑制投诉:

@SuppressWarnings("unused")

您也可以尝试finalbasadon. 这可能会解决问题(但我不确定)。

编辑我终于注意到您正在尝试basadon直接从点击侦听器中进行修改。basadon如果is ,那显然是行不通的final,但是除非是 ,否则您无法访问局部变量final。我建议您更改basadon为封闭类的(非final)字段。然后所有的警告和错误都会消失。

于 2013-07-04T16:44:07.480 回答
0

你为什么将所有这些变量声明为最终变量?例如,如果 bsadon 需要从 false 更改为 true,则它不能是最终的。最终值就是一个常数,它不会改变。不要将某些东西声明为 final,除非您希望它在程序的整个运行时保持相同的值。

你说 basadon 总是“假的”,这就是 final 的意思,所以编译器告诉你你永远不会进入 while,因为你需要它来评估“真”才能进入。

你 while 子句中的 () 之间的表达式,需要评估为 true 才能输入代码。

于 2013-07-04T17:00:46.430 回答
0

while(basadon)总是假的,所以你永远不会进入循环。你真正的意思可能是while(basadon==false)。另外,不要声明basalon为,final boolean因为你想稍后修改它的值,那会出错。

于 2013-07-04T16:43:10.607 回答