我这里有这个代码:
Random rand = new Random();
int randomNum;
int i;
String[] text1 = getResources().getStringArray(R.array.text1);
String[] text2 = getResources().getStringArray(R.array.text2);
for(i = 0; i < ((MAX - 1)^(MAX - 1)); i++) {
randomNum = rand.nextInt(2);
// True wenn bereits angezeigt worden
if(shown_table.get(randomNum)) {
continue;
}
// False wenn noch nicht angezeigt worden
else {
break;
}
}
// Texte anzeigen und Shown table auf true setzen.
txt_text1.setText(text1[randomNum]);
txt_text2.setText(text2[randomNum]);
//shown_table.put(randomNum, true);
但是当我编译它时,我收到了这个错误:
Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Compilation failed; see the compiler error output for details. Error:(118, 33) error: variable randomNum might not have been initialized
当我把“randomNum = rand.nextInt(2);”放在循环之前它起作用......但那不是我想要的。
任何想法为什么?
ps:我是新手编码
答案 0 :(得分:2)
XOR具有对于所有x,x ^ x == 0的属性。因此表达式(MAX - 1) ^ (MAX - 1)
总是计算为零,并且您的代码永远不会进入循环。
但这不是问题。编译器总是假定循环可能永远不会被执行,并且它抱怨在这种情况下randomNum
在用作数组下标时不会被初始化。
答案 1 :(得分:1)
编译器无法从代码中保证&#39; randomNum&#39;将被初始化,因为for循环可能为空。这就是为什么行txt_text1.setText(text1[randomNum]);
不应该编译的原因。
如果您确定执行将始终进入循环,请使用任何大致合理的值对其进行初始化,例如int randomNum=0;