如何对一个ArrayList进行随机排序

106

我需要帮助编写一个可以对ArrayList进行打乱顺序的方法。我不知道该在方法中放置什么内容。这是我目前已经有的代码,我尝试使用随机方法来随机排列列表中的整数,但没有成功。能否有人向我展示如何完成这个操作?

这是我尝试过的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Lab 11 {
  public static void main(String[] args) {
    ArrayList<Double> list = new ArrayList<Double>();

    Scanner input = new Scanner(System.in);   
    System.out.print("Enter integers (input ends with 0): ");
     double value;

    do {
      value = input.nextDouble(); // Read a value from the input

      if (value != 0) 
        list.add(value); // Add the value if it is not in the list
    } while (value != 0);
     System.out.println("The maximum number is " + max(list));

     System.out.print("Enter five double values: ");
     for (int i = 0; i < 5; i++)
      list.add(input.nextDouble());

    System.out.println("The sum is " + sum(list));

  }

  public static Double max(ArrayList<Double> list) {
    if (list == null || list.size() == 0)
      return null;

    double result = list.get(0);
    for (int i = 1; i < list.size(); i++)
      if (result < list.get(i))
        result = list.get(i);

    return result;
  }

  public static double sum(ArrayList<Double> list) {
    double sum = 0;
    for (int i = 0; i < list.size(); i++)
      sum += list.get(i);
    return sum;
  }
}

9
请使用 Collections#shuffle(List list) - skuntsel
2
我完全没有看到你在任何地方使用“_random method_”。看起来你什么都没尝试,只是把上次的作业粘贴到了问题框里。请付出一些努力,只有当你有具体问题要问时才提问。这个网站上有很多关于如何随机化列表的问题。 - jahroy
1
无论你说什么...但是,你的代码中没有证据表明你已经尝试解决问题。祝你好运!幸运的是,有多个人告诉了你如何做你想做的事情。请注意,这个网站上也有数十个相同的问题。 - jahroy
2
我为什么要把随机方法放在那里,如果它不起作用呢?因此我们可以帮助您修复它。 - thegrinner
2
如果它不起作用,为什么我要把随机方法放在那里呢? - jahroy
显示剩余3条评论
2个回答

247

使用此方法,将您的数组作为参数传递

Collections.shuffle(arrayList);

这个方法返回void,因此它不会给你一个新的列表,但我们知道在Java中数组是作为引用类型传递的,因此它将打乱您的数组并将打乱后的值保存在其中。这就是为什么您不需要任何返回类型。

现在,您可以使用被洗牌过的ArrayList。


1
那么你如何打印出那个混合后的ArrayList的结果呢? - Martin Erlic
1
@santafebound Arrays.toString(arrayList.toArray()); - Simon Baars
虽然这可能回答了问题,但最好添加一些描述,说明这个答案如何帮助解决问题。请阅读如何撰写一个好的答案 以了解更多信息。 - Roshana Pitigala
以下是Collections.shuffle(arrayList)的一个示例,以及在随机化之前和之后打印结果的一种方法: public static void main(String[] args) { ArrayList<String> mylist = new ArrayList<String>(); mylist.add("code"); mylist.add("quiz"); mylist.add("geeksforgeeks"); mylist.add("quiz"); mylist.add("practice"); mylist.add("qa"); System.out.println("原始列表:" + mylist); Collections.shuffle(mylist); System.out.println("随机化列表:" + mylist); } - Abir.d

34

1
显然这是一项家庭作业任务... - jahroy
如果是这样,那么 OP 可以通过参考 rt.jar 的实际实现来了解此方法的具体实现。 - AllTooSir
好的,我已经删除了代码! - AllTooSir
6
至少如果你让他找到源代码,他将不得不付出一些努力并学习一些东西... - jahroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接