随机数未初始化

时间:2017-09-03 12:13:43

标签: java android random

我这里有这个代码:

    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:我是新手编码

2 个答案:

答案 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;