随机的颜色序列

时间:2012-04-01 12:21:45

标签: java

如何选择一张无法重复的图片?

我试过了:

我使用随机,我想删除所选图片

String[] picture = { "blue", "white", "red", "yellow" };

   int number_picture1; 

// Random function to find a random picture

   Random ran = new Random();

   number_picture1 = ran.nextInt(picture.length);

System.out.println(picture[number_picture1]);

// There is still posibility to chose the same picture

   int number_picture2; 

   number_picture2 = ran.nextInt(picture.length);

System.out.println(picture[number_picture2]);

4 个答案:

答案 0 :(得分:6)

最简单的方法是使用List 1 来存储元素,并在其上使用Collections.shuffle() - 然后迭代地获取元素。

shuffle会产生列表的随机排列,因此迭代选择项目会给你相同的概率来选择任何排序,这似乎正是你所追求的。

代码快照:

String[] picture = { "blue", "white", "red", "yellow" };
//get a list out of your array:
List<String> picturesList = Arrays.asList(picture);
//shuffle the list:
Collections.shuffle(picturesList);
//first picture is the first element in list:
String pictureOne = picturesList.get(0);
System.out.println(pictureOne);
//2nd picture is the 2nd element in list:
String pictureTwo = picturesList.get(1);
System.out.println(pictureTwo);
...

(1)从数组中获取列表的最简单方法是使用Arrays.asList()

答案 1 :(得分:3)

使用Collection是检索和删除的更好选择。使用数组,跟踪已经选择的索引。此外,如果选择的数量大于数组的长度,则只需相应地抛出异常。

答案 2 :(得分:2)

使用ListSet代替数组,然后在每次选择后从中删除所选的图片:

import java.util.List;
import java.util.Arrays;

List<String> pictures = Arrays.asList("blue","white","red","yellow");
int number_picture1;

number_picture1=ran.nextInt(pictures.size());
System.out.println (pictures.remove(number_picture1));

int number_picture2;

number_picture2=ran.nextInt(pictures.size());
...

答案 3 :(得分:1)

虽然您没有给出ran的声明,但我猜这是标准的JDK随机数生成器。

无法保证不会选择两次相同的号码。在一个真正的随机算法中,这将是一个相当奇怪的保证。

解决此问题的一种方法是将与您的选择对应的数字放在链接列表中(此处为{0,1,2,3})。然后选择0和列表大小之间的随机整数(此处为3)。假设您得到'2',然后从列表中删除第二个元素,使其成为{0,1,3}。下一次选择0到2之间的数字。如果现在再次得到'2',则再次移除现在为'3'的第二个元素。等