Android 为什么这是无法访问的代码?
我随机生成一个问题和答案。我想根据用户选择正确答案的情况生成新的随机数组和答案选项。但当我添加一个布尔while循环时,它会显示“无法访问的代码”。。。问题是什么 谢谢Android 为什么这是无法访问的代码?,android,while-loop,Android,While Loop,我随机生成一个问题和答案。我想根据用户选择正确答案的情况生成新的随机数组和答案选项。但当我添加一个布尔while循环时,它会显示“无法访问的代码”。。。问题是什么 谢谢 final boolean basadon = false; while(basadon) { Random soru = new Random(); final int[] rastgele = new int[1]; for (int i=0; i<1; i++)
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]);
}
}
});
}
} }
final boolean basadon=false;
while(巴萨顿)
{
Random soru=新的Random();
final int[]rastgele=新int[1];
for(int i=0;iwhile(basadon)
始终为false,因此您永远不会进入循环。您真正的意思可能是while(basadon==false)
。另外,不要将basalon
声明为最终布尔值,因为您想稍后修改它的值,这将产生错误。它可能会抱怨,因为basadon
已知为false
并且while
循环的主体无法到达。您可以通过添加此方法的注释如下:
@SuppressWarnings("unused")
您还可以尝试从basadon
声明中删除final
修饰符。这可能会解决问题(但我不确定)
编辑我终于注意到您正试图直接从单击侦听器中修改basadon
。如果basadon
是final
,这显然不起作用,但是您不能访问局部变量,除非它是final
。我建议您将basadon
更改为a(非final
)字段。那么所有警告和错误都应该消失。为什么要将所有这些变量声明为final?
例如,如果bsadon需要从false更改为true,它就不能是final。final值就是一个常量,它不会更改。
不要将某些内容声明为final,除非您希望它在程序的整个运行时保持相同的值
你说basadon总是“false”,这就是最终的意思,所以编译器告诉你你永远不会输入while,因为你需要它来计算“true”才能输入
while子句中的between()表达式需要求值为true才能输入代码。看起来像是从basedon值开始为false,然后在循环中将其设置为true
所以,改变
final boolean basedon = false
while (basedon) {
....
}
到
对于您提出的具体问题:
Why does the compiler give unreachable code warning
答案是,由于while循环中的条件始终为false,因此while循环中的代码不可能被执行。给出警告是为了表明这一点(考虑到当前的代码情况)您在键入该部分代码时浪费了精力,并且保证永远不会执行该部分代码。若要更正此问题,您可以从basedon中删除最后一个修饰符,并放置一个编程逻辑来设置basedon的值,该值将决定是否进入循环。如果您希望循环始终在运行时放置(true)
但我相信你想问的是如何生成随机问答生成器。为此,你必须发布更大的代码块(看起来你试图在侦听器回调上设置一个循环?).如果您告诉我们在这堵代码墙的什么地方添加了一个“布尔循环”,那会很有帮助。请看第2行,while(false)
循环将永远不会以这种方式进入!除此之外,代码行数至少可以减少3或4行…将basedon作为最终版本有什么特殊原因吗?我想在用户选择正确选项时生成新的问题和答案。因此,必须返回开始“Random soru=new Random();”再次:/when I write“while”(basadon=false)“然后它说移除basadon的最后一个修饰语。所以当使用”basadon=true它说再做一次final。//FıratCihangirKırbay=
,而不是=
。如果你声明basadon
为final,你就不允许更改它。因为你打算在循环中修改这个布尔值,你必须删除它前面的单词final
。但是它说将basadon的修饰符更改为final on“basadon=正确;"也许你在一个静态方法中包含了这些代码。如果是这样的话,试着删除静态
。抑制警告并不能解决实际问题,即循环从未进入。我删除了它,它说将basadon的修饰符再次更改为final。:/@Juhana-这不一定是一个实际问题。有时是一个问题为了测试的目的想注释掉一段代码(尽管无可否认,使用if
比while
块更为常见)。@FıratCihangirKırbay-我编辑了我的答案,并建议如何处理。
Why does the compiler give unreachable code warning