重新排列数组。制作1,3,5到3,5,1等

时间:2011-08-24 14:36:10

标签: java arrays

假设我有一个数组:

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功能可以帮助我?或者我必须自己解决这个问题?

谢谢。

6 个答案:

答案 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()方法随机化索引以访问数组。

Link to Java API

答案 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之间。

这假设你想要使用原始类型,而不是类。