在 java 中打乱二维数组的顺序

Shuffle the order of a 2D array in java

我正在创建自己的记忆游戏。到目前为止一切进展顺利。只是想让你知道我正在使用 Java 的处理。我创建了一个 2 dim PImage 数组。这是填充二维数组的代码:

int g = 0;
for(int i = 0; i < 4; i++) {
 for (int j = 0; j < 6; j++) {
  if (j % 2 == 0) {
    kaart[i][j] = loadImage( g + ".jpg" );
    kaart[i][j].resize(vlakGrootte - 1, vlakGrootte - 1);
    g++;
  } else if (j % 2 == 1) {
    kaart[i][j] = kaart[i][j-1];
  }
 }
}

我想打乱这个数组中的项目。 java collections 似乎不支持打乱 2D PImage 数组?如果我错了,请纠正我。

感谢大家对我的帮助。

1).随机播放每个 outter 索引:

 YourType [][] kaart = new YourType [..][..];

     List <YourType[]> list = (List<YourType[]> ) Arrays.asList(kaart);
     Collections.shuffle(list);
     kaart = (YourType[][]) list.toArray(new YourType[0][]);//convert back to a array 

     // just for checking 
     for(YourType[] k:kaart ){System.out.println(Arrays.toString(k));}

YourType替换为kaart的类型。

2)。按 Outter+Inner 索引随机播放:

YourType[][] kaart = new YourType[..][..];

     List<YourType[]> temp = new ArrayList<>();

     for(YourType[] k:kaart ){
         List <YourType> list = (List<YourType> ) Arrays.asList(k);
         Collections.shuffle(list);//shuffle  
         YourType[] tempArray = (YourType[]) list.toArray();
         temp.add(tempArray);

     }
     Collections.shuffle(temp);
     kaart= (YourType[][]) temp.toArray(new YourType[0][]);//convert back to a array 

         // just for checking 
     for(YourType[] k:kaart ){System.out.println(Arrays.toString(k)); }

YourType替换为kaart的类型。

3)。在 The easiest way 中随机播放:

只需将所有元素放入一个 List 然后调用 Collections.shuffle()

我会像您在现实世界中发牌一样这样做。首先洗牌:

ArrayList<Integer> pieces = new ArrayList<Integer>();
for (int i = 0; i < 4 * 6 / 2; i++) {
    for (int j = 0; j < 2; j++) {
        pieces.add(i);
    }
}
Collections.shuffle(pieces);

然后你从洗好的牌组中发牌:

for(int i = 0; i < 4; i++) {
 for (int j = 0; j < 6; j++) {
    int g = pieces.remove(pieces.size()-1);
    kaart[i][j] = loadImage( g + ".jpg" );
    kaart[i][j].resize(vlakGrootte - 1, vlakGrootte - 1);
 }
}