[Internet上有许多不同的指令可以进行随机排列,但是它们都使用库。有什么方法可以在不使用任何内置库的情况下进行随机排列?我知道如何使用Math.random()生成随机数。生成随机排列是否与Math.random()有关?改组对我来说看起来很复杂。
我的目标是,如果我通过'java randompermutation 3'运行该程序,则该程序返回1,2,3或1,3,2或3,1,2或3,2,1或2 ,3,1或2,1,3
用于对数组排序的一种算法是基于选择排序的,称为选择混洗。遍历数组,并为每个索引选择一个随机索引,然后交换这两个索引。由于这看起来有点像家庭作业,因此我将不提供任何实际代码,但这是一种解决方案。
您是否可以像下面显示的示例一样进行操作
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
List<Integer> input = new ArrayList<Integer>(Arrays.asList(1,2,3));
List<Integer> shuffleInput = shuffle(input);
System.out.println(shuffleInput.toString());
}
public static List<Integer> shuffle(List<Integer> input) {
List<Integer> inputCopy = new ArrayList<>(input);
List<Integer> output = new ArrayList<>(input.size());
while(inputCopy.size()!=0){
int randPicker = (int)(Math.random()*inputCopy.size());
output.add(inputCopy.remove(randPicker));
}
return output;
}
}
此代码将任意大小的Integer
列表作为输入,并返回包含混合值的列表。
如果列表始终是3个数字,则可能是一个简单的版本