假设我有一个数组:
int array[][] = {{1, 2, 3}, {2, 5, 7}, {4, 2, 1}};
我如何随机制作
int array[][] = {{2, 5, 7}, {1, 2, 3}, {4, 2, 1}};
或
int array[][] = {{4, 2, 1}, {2, 5, 7}, {1, 2, 3},};
等等。
是否有任何JAVA功能可以帮助我?或者我必须自己解决这个问题?
谢谢。
答案 0 :(得分:2)
您可以将数组转换为List<int[]>
并致电Collections.shuffle()
。然后转换回数组。
int array[][] = {{1, 2, 3}, {2, 5, 7}, {4, 2, 1}};
List<int[]> l = Arrays.asList( array ); //the list returned is backed by the array, and thus the array is shuffled in place
Collections.shuffle( l );
//no need to convert back
如果您需要保留原始订单,则必须创建数组的副本(或该数组支持的列表),如下所示:
int array[][] = {{1, 2, 3}, {2, 5, 7}, {4, 2, 1}};
List<int[]> l = new ArrayList<int[]>( Arrays.asList( array ) ); //creates an independent copy of the list
Collections.shuffle( l );
int newArray[][] = l.toArray( new int[0][0] );
另一种方式:
int array[][] = {{1, 2, 3}, {2, 5, 7}, {4, 2, 1}};
int newArray[][] = array.clone(); //copy the array direcly
List<int[]> l = Arrays.asList( newArray );
Collections.shuffle( l );
答案 1 :(得分:2)
使用Collections.shuffle(..)
方法非常简单,因为Arrays.asList(..)
方法返回array
支持的List。
Collections.shuffle(Arrays.asList(array));
完整示例:
public static void main(String... args) {
int array[][] = {{1, 2, 3}, {2, 5, 7}, {4, 2, 1}};
Collections.shuffle(Arrays.asList(array));
for (int[] a : array)
System.out.println(Arrays.toString(a));
}
答案 2 :(得分:0)
如果你可以使用集合,那么有一个shuffle方法,如果你必须使用诸如int之类的基本类型,你将不得不自己洗牌。以下是两者的示例:
http://blog.ryanrampersad.com/2008/10/13/shuffle-an-array-in-java/
答案 3 :(得分:0)
尝试Java附带的Collections类。您可以使用shuffle()方法随机化索引以访问数组。
答案 4 :(得分:0)
使用集合: 像这样的东西:
List<int[]> list = Arrays.asList(array);
Collections.shuffle(list);
int[][] shuffledArray = (int[][]) shuffledList.toArray();
答案 5 :(得分:-1)
你想要的是外部数组内容的随机交换。
你可以使用java.Random的nextBoolean()来获得关于是否进行交换的真/假,例如在1&amp; 2或1&amp; 3或2&amp; 3之间。
这假设你想要使用原始类型,而不是类。