2017-09-03 151 views
0

我有这样的代码在这里:随机数未初始化

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

+1

'^'不应该计算Java中设置的功率。这是XOR。 https://stackoverflow.com/questions/1991380/what-does-the-operator-do-in-java –

回答

2

XOR具有的属性,所有X,X^X == 0,所以表达式(MAX - 1)^(MAX - 1)总是计算为零,并且您的代码永远不会进入循环。

但这不是问题。编译器总是假定循环可能永远不会被执行,并且它会抱怨在这种情况下,randomNum在用作数组下标时不会被初始化。

+0

感谢这些信息,但现在我有这个问题:'无法启动活动ComponentInfo {com.example.alex.wouldyoupressthebutton/com.example.alex.wouldyoupressthebutton.MainActivity}:java.lang.NullPointerException:试图调用虚拟方法' java.lang.Object java.util.Hashtable.get(java.lang.Object)'null object reference' – MrMinemeet

+0

@MrMinemeet它看起来像'shown_table'为空。 –

+0

@MrMinemeet看看:https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it –

1

编译器不能从“randomNum”将被初始化为for循环可能是空的代码保证。这就是为什么行txt_text1.setText(text1[randomNum]);不应该编译。

如果您是确保执行将始终进入循环,与任何大致合理的值初始化,如int randomNum=0;

+0

这有助于thx。 – MrMinemeet