randomGenerator避免连续重复

时间:2012-10-01 02:20:27

标签: android eclipse random duplicates

我对以下代码有疑问

Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(4);
    String wordList[] = new String[4];
    {
        wordList[0] = "Red";
        wordList[1] = "Blue";
        wordList[2] = "Green";
        wordList[3] = "Orange";


    }

String wordToDisplay = wordList[randomInt];

此代码工作正常,但我想知道是否有可能让它连续两次不选择相同的单词。例如,如果它只选择了“红色”,那么它将不会在下一个连续时间再次选择“红色”。我读了一些有关DISTINCT的内容,但我不确定这是否正确。

以下是使用此

的按钮的代码
final Button button1 = (Button) findViewById(R.id.button1);
        final TextView textView = (TextView) findViewById(R.id.text_random_text);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                Random randomGenerator = new Random();
                int randomInt = randomGenerator.nextInt(9);
                String wordToDisplay = wordList[randomInt];
                textView.setText(wordToDisplay);

谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

转到列表并在使用后删除颜色:

private static ArrayList<String> arrayList = new ArrayList<String>();
private static Random random = new Random();
public static void fillList(){
    arrayList.add("Red");
    arrayList.add("Blue");
    arrayList.add("Green");
    arrayList.add("Orange");
}
public static String getNextRandomColor(){
    if(arrayList.isEmpty()){
        fillList();
    }
    return arrayList.remove(random.nextInt(arrayList.size()));
}

答案 1 :(得分:1)

你可以用两种方式做到这一点(可能只有两个,我现在能想到的):

1)创建一个使用全局变量存储最后生成的随机数的函数。 它看起来像这样:

int myRand(int i) {
  int aux;
  Random randomGenerator = new Random();

  do {
    aux = randomGenerator.nextInt(i);
  } while (aux != lastRandGenerated);

  lastRandGenerated = aux;

  return aux;
}

,其中lastRandGenerated是一个初始化为0的全局变量。

然后使用此函数生成随机数。

2)您可以创建一个具有与上述函数非常相似的函数的类,然后实例化该类的对象并使用它来生成随机数。在类中创建一个静态变量,它将记住最后生成的随机数。使用它而不是全局变量。

答案 2 :(得分:0)

具体情况有点超出我的联盟,但作为一个数学问题,有24种组合(4 * 3 * 2 * 1)。尽管这听起来很重,但最糟糕的情况是你可以解决所有的组合,然后随机选择一个中的一个。