我正在随机生成一个问题和答案。我希望根据用户选择正确答案时生成新的随机数组和答案选项。但是当我添加一个布尔值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]);
}
}
});
}
} }
答案 0 :(得分:1)
看起来你基于value开始为false,然后在循环中将其设置为true。
所以,改变
final boolean basedon = false
while (basedon) {
....
}
到
boolean basedon = false;
do {
....
} while (basedon);
答案 1 :(得分:0)
while(basadon)
始终为false,因此您永远不会进入循环。你的真正含义可能是while(basadon==false)
。另外,请勿将basalon
声明为final boolean
,因为您希望稍后修改其值,这会产生错误。
答案 2 :(得分:0)
这可能是抱怨,因为basadon
已知为false
,并且无法联系while
循环的正文。您可以通过将此注释添加到方法来抑制投诉:
@SuppressWarnings("unused")
您也可以尝试从final
的声明中删除basadon
修饰符。这可能会解决问题(但我不确定)。
编辑我终于注意到您正在尝试直接从点击侦听器中修改basadon
。如果basadon
为final
,那么这显然无效,但除非是final
,否则无法访问本地变量。我建议您将basadon
更改为封闭类的(非final
)字段。然后所有的警告和错误都会消失。
答案 3 :(得分:0)
为什么要将所有这些变量声明为最终变量? 例如,如果bsadon需要从false更改为true,则它不能是最终的。最终值正好是常数,它不会改变。 除非您希望它为程序的整个运行时保持相同的值,否则不要将某些内容声明为final。
你说basadon总是“假的”,这就是最后的意思,所以编译器告诉你你永远不会输入,因为你需要它来评估“true”才能进入。
you while子句中的()之间的表达式,需要求值为true才能输入代码。
答案 4 :(得分:0)
根据您提出的具体问题:
Why does the compiler give unreachable code warning
答案是,由于while循环中的条件总是为false,因此while循环中的代码不可能被执行。警告是为了表明(鉴于当前的代码情况),您已经浪费了您在键入该部分代码上的努力,并且保证永远不会被执行。要纠正这个问题,你可以从basedon中删除最终修饰符并输入一个编程逻辑来设置basedon的值,该值将决定是否进入循环。如果你想让循环始终运行put while(true)。
但我相信你想问的是如何制作随机问答生成器。为此,你必须发布更大的代码块(看起来你试图把一个循环放在一个监听器回调?)并说出你的问题以询问具体的问题(可能发布一个单独的问题)。