1

我正在尝试从 0-11 生成一个唯一的随机数,并使用它为 TextBox 分配一些唯一字符的索引。这是代码

   int[] previous_random = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};//initialized with invalid values

       int current_random;

       Random r_int = new Random();

       boolean match = false;

       for (int n=0;n<=11;n++)
        {
            gb[n] = (TextView)findViewById(IDs[n]);//assigning IDs from XML to java text boxes

        }
       int i = 0;
       while (i<=11)
            {
                current_random = r_int.nextInt(11);//generating a random int from 0-11

                int j =0;
                while (j<=11)
                {
                    if (current_random == previous_random[j])
                        {

                        match = true;break;//match = true shows that this random was used before to skip the loop
                        }
                    j++;
                }   
if(match == false)
      {
    gb[i].setText(randomized_final.charAt(current_random) + "\0");//randomized_final is a string not visible in current code
    previous_random[i] = current_random;//*******PROBLEM HERE************

                }

else
    continue;

i++;

}

}

现在的问题是标有** PROBLEM HERE **的部分导致程序停止响应并导致该应用程序的 CPU 使用率超过 50% 但应用程序没有崩溃,它只是显示带有顶部栏的空白屏幕。部分应该存储新的唯一随机数,并且存储用于以后的比较,如果我删除这部分,那么代码工作正常,除了我得到重复的随机数(这不是我想要的)。

请告诉我我做错了什么。或者告诉任何替代方法来做到这一点。我也尝试过 for 循环。已经尝试了几个小时的许多替代方法!

4

1 回答 1

2

我见过这种问题用作面试问题。一个可能的解决方案如下:

1)创建一个包含数字 0-11 的整数集合(可能是列表?)

2)洗牌该列表。

3)每次你想要一个新的唯一数字时,返回列表中的下一个元素。

在代码中它看起来像:

ArrayList<Integer> list = new ArrayList();
for(int i=0;i<=11;i++){
    list.add(i);
}
Collections.shuffle(list);
于 2013-04-13T08:37:47.817 回答