如何在java中以相同的顺序混洗两个数组

我有两个问题和答案

String questions[] = { "Q1?", "Q2?", "Q3?"}; String answers[] = { "A1?", "A2?", "A3?"}; 

我使用了Collections.shuffle(Arrays.asList(questions);来洗牌每个数组。如何对每个数组进行混洗,以便在洗牌后它们保持相同的顺序?

你可以改为一个包含索引的新数组。 然后从第一个索引获取两个数组中的元素。

 List indexArray = Arrays.asList(0, 1, 2); Collections.shuffle(indexArray); String question = questions[indexArray.get(0)]; String answer = answers[indexArray.get(0)]; 

当然,正如其他答案所暗示的那样,创建一个包含questionsanswers课程将更为OO。 这样,与当前方法中的3 arrays相比,您只需维护一个Listarray

创建一个用于同时保持问题和答案的类将是一个更容易和更OO的解决方案:

 class QuestionAnswerPair { private final String question; private final String answer; public QuestionAnswerPair(String question, String answer) { this.question = question; this.answer = answer; } } 

然后:

 QuestionAnswerPair[] questions = new QuestionAnswerPair[] { // Put questions here }; Collections.shuffle(Arrays.asList(questions)); 

创建一个类QuestionAndAnswer并使用该类的数组。

您可以将一个额外的整数数组洗牌,而不是改变答案和问题,这些整数具有问题/答案的索引,然后使用混洗索引从相应的数组中提取问题和答案。

Java Collections有一个(令人惊讶的)简单的解决方案来解决这个问题: Collections.shuffle(Collection, Random) ,其中Random使用相同的种子播种。

  List quests = Arrays.asList(1, 2, 3, 4, 5); List answers = Arrays.asList(10, 20, 30, 40, 50); long seed = System.nanoTime(); Collections.shuffle(quests, new Random(seed)); Collections.shuffle(answers, new Random(seed)); System.out.println(quests); System.out.println(answers); 

注意:

额外的优化是危险的。 这个DOE不工作:

  long seed = System.nanoTime(); Random rnd = new Random(seed); Collections.shuffle(quests, rnd); Collections.shuffle(answers, rnd); 

最初发布于: https : //stackoverflow.com/a/44863528/1506477

来自: http : //www.vogella.com/tutorials/JavaAlgorithmsShuffle/article.html

 public static void shuffle2ArraysTogther(String[] a, String[] b) { if(a.length == b.length) { int n = a.length; Random random = new Random(); random.nextInt(); for (int i = 0; i < n; i++) { int change = i + random.nextInt(n - i); swap(a, i, change); swap(b, i, change); } } } private static void swap(String[] a, int i, int change) { String helper = a[i]; a[i] = a[change]; a[change] = helper; } private static void swap(String[] a, int i, int change) { String helper = a[i]; a[i] = a[change]; a[change] = helper; } String questions[] = { "Q1?", "Q2?", "Q3?" }; String answers[] = { "A1?", "A2?", "A3?" }; shuffle2ArraysTogther(questions, answers); for (String i : questions) { System.out.println(i); } for (String i : answers) { System.out.println(i); }