我试图从数组中随机选择进行打印,然后将其从数组中删除,以避免两次打印相同的数字。我是一个java新手,所以想知道是否有人可以指出我哪里出错了。
public static void main(String[] args) {
int[] colm = { 1, 2, 3, 4, 5, 67, 87 };
Random rand = new Random();
for (int i = 0; i < 5; i++)
System.out.println(" " + colm[rand.nextInt(colm.length)]);
}
感谢
答案 0 :(得分:5)
随机不会给出唯一号码的保证。你可以这样做。
public static void main(String[] args) {
int[] colm = { 1, 2, 3, 4, 5, 67, 87 };
List l = new ArrayList();
for(int i: colm)
l.add(i);
Collections.shuffle(l);
for (int i = 0; i < 5; i++)
System.out.println(l.get(i));
}
答案 1 :(得分:3)
您缺少删除部分。尝试这样的事情:
public static void main(String[] args)
{
Integer [] colm = {1,2,3,4,5,67,87};
final List<Integer> ints = new ArrayList<Integer>(Arrays.asList(colm));
Random rand = new Random();
for(int i = 0; (i<5) && (ints.size() > 0); i ++) {
final int randomIndex = rand.nextInt(ints.size());
System.out.println(" " + ints.get(randomIndex));
ints.remove(randomIndex);
}
}
答案 2 :(得分:0)
您最好使用Set或Map来保存数据,然后创建属于set / map长度的随机数,并使用该(随机)索引删除。
答案 3 :(得分:0)
public static void removeElements(int[] arr) {
Random random = new Random();
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
int length = arr.length;
while (length > 0) {
System.out.println("Size: " + list.size());
if (list.size() == 1) {
int randomIndex = random.nextInt(list.size());
list.remove(randomIndex);
System.out.println("Size:--> " + list.size());
break;
}else {
int randomIndex = random.nextInt(list.size() - 1);
if (arr == null || randomIndex > arr.length) {
System.out.println("No Elements to be deleted");
}
list.remove(randomIndex);
System.out.println("Removed Element: " + list.get(randomIndex));
length--;
if (length == 0)
break;
}
}
}