0

我对以下代码有疑问

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);

感谢您的帮助

4

3 回答 3

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()));
}
于 2012-10-01T02:36:09.800 回答
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)您可以创建一个具有与上述功能非常相似的类,然后实例化该类的一个对象并使用它来生成您的随机数。在类中创建一个静态变量,该变量将记住最后生成的随机数。使用它而不是全局变量。

于 2012-10-01T02:37:29.820 回答
0

具体细节有点超出我的范围,但作为一个数学问题,有 24 种组合(4 * 3 * 2 * 1)。尽管这听起来很沉重,但最坏的情况是你可以计算出所有的组合,然后从 24 个随机中选择一个。

于 2012-10-01T02:31:53.570 回答