2012-10-01 23 views
0

我有一个关于下面的代码问题randomGenerator避免重复在一排

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

谢谢你们的帮助,代码

+0

这是内部的方法或循环或什么? –

+0

@IonutHulub我有一个使用字符串的按钮String wordToDisplay = wordList [randomInt]; – user1545666

+0

@IonutHulub编辑我的问题,以添加更多的代码 – user1545666

回答

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

这是一个非常糟糕的答案,因为在4次迭代之后,列表将是空的,他将无法再获得一个单词。 –

+0

我希望能够一遍又一遍地使用列表 – user1545666

+0

我编辑了答案填写列表如果空... –

0

的细节已经超出了我的联赛,但作为一个数学问题有24个组合(4 * 3 * 2 * 1)。由于这听起来很沉重,最糟糕的情况是你可以制定出所有的组合,然后从24随机中挑选一个。

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)您可以创建一个具有与上面类似的函数的类,然后实例化该类的一个对象并使用它来生成您的随机数。在这个类中创建一个静态变量,它会记住上次生成的随机数。使用它来代替全局变量。

+0

这是我的第一个应用程序,所以我对此有点新。你能详细说明你的第一种方法吗?我理解创建全局变量,但我如何将它链接到我的生成器我不明白 – user1545666

+0

您不会将其链接到生成器。您创建一个函数(在循环中)创建一个随机数并将其保存为'aux',然后检查它是否等于全局变量,如果是,则意味着它必须再次生成一个数字。它会这样做直到生成的数字与最后生成的数字不同,然后返回它。只需创建一个名为'lastRandGenerated'的全局变量,将该函数复制粘贴到程序中,并将其称为'myRand(4)'而不是'randomGenerator.nextInt(4)' –