如何选择仅一张无法重复的图片?
我试过了:
我使用随机,我想删除所选图片
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]);
答案 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)
使用List
或Set
代替数组,然后在每次选择后从中删除所选的图片:
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'的第二个元素。等