Смешивание массива 2D int

Я новичок в этом, но хочу сделать программу бронирования отелей.

Итак, у меня есть 2D-массив с ВСЕМИ комнатами, когда я запускаю программу, я хочу, чтобы они случайным образом перетасовывались в массив, называемый RoomNotInUse или RoomInUse (поэтому в evertime я запускаю программу, в которой комнаты генерируются случайным образом.

Было бы здорово, если бы кто-нибудь знал об этом :)

// ARRAYS
protected static int[][] rooms = {
{1,1}, {1,2}, {1,3}, {1,4}, {1,5}, 
{2,1}, {2,2}, {2,3}, {2,4}, {2,5}, 
{3,1}, {3,2}, {3,3}, {3,4}, {3,5}, 
{4,1}, {4,2}, {4,3}, {4,4}, {4,5}, 
{5,1}, {5,2}, {5,3}, {5,4}, {5,5} 

};
//Declare all hotel rooms 5x5, the first number is the floor and the sec is the room
private char[][] ROIU = {

};
//Rooms not in use
private char[][] RIU = {

};
//Rooms in use


public class roomShuffle {

}
//Shuffle all rooms in 2 diffrent arrays, ROIN and RIU

public class RoomNotInUse {

}
//Displayes all the rooms thats not in use 

public class RoomInUse {

}
//Displayes all rooms in use

}

5 ответов

Вы можете использовать алгоритм Fisher-Yates, модифицированный для двумерных массивов:

void shuffle(int[][] a) {
 Random random = new Random();

 for (int i = a.length - 1; i > 0; i--) {
 for (int j = a[i].length - 1; j > 0; j--) {
 int m = random.nextInt(i + 1);
 int n = random.nextInt(j + 1);

 int temp = a[i][j];
 a[i][j] = a[m][n];
 a[m][n] = temp;
 }
 }
}


Назначьте весь массив в список. Вместо использования Collections.shuffle().

List<int[]> pair=new ArrayList<int[]>();
 pair.addAll(Arrays.asList(rooms));

 Collections.shuffle(pair);
</int[]></int[]>


Общий метод тасования в Java должен мне схож с этим

Важно то, что вам нужно поменять элемент случайным элементом, который появляется в коллекции;)

public void shuffle(Comparable [] a){
 for(int i=0;i,a.length;i++)
 swap(a,i,getRandom(i,a.length-1);
}

private int getRandom(int min, int max){
 Random rnd = new Random();
 return min + rnd.nextInt(max-min+1);
}

 private void swap(Comparable [] a, int i, int j){
 Comparable temp = a[i];
 a[i]=a[j];
 a[j]=temp;
 }

В противном случае вы можете использовать метод Collection.shuffle.


Вы можете использовать shuffle -

Collections.shuffle()

Вот учебник, описывающий с коллекциями или без них.


Scanner scanner = new Scanner(System.in);
 int n;
 int m;
 int selection;
 System.out.println("Enter number of team");
 n = scanner.nextInt();

 m = (int) Math.sqrt(n);

 int[][] matrix = new int[m][m];
 List<integer> listMatrix = new ArrayList<integer>();

 for (int i = 0; i < m; i++) {
 for (int j = 0; j < m; j++) {
 matrix[i][j] = i * m + j + 1;
 System.out.print(matrix[i][j] + "\t");
 }
 System.out.println();
 }

 for (int i = 0; i < m * m; i++) {
 listMatrix.add(i + 1);
 }
 System.out.println();

 do {
 System.out.println("what line is the card?");
 selection = scanner.nextInt();
 } while (!(selection >= 1 && selection <= m));

 selection -= 1;

 int[] values = new int[m];

 for (int i = 0; i < m; i++) {
 values[i] = matrix[selection][i];
 // System.out.print(values[i] + "\t");
 }
 System.out.println();

 Collections.shuffle(listMatrix);

 for (int i = 0; i < m; i++) {
 for (int j = 0; j < m; j++) {
 matrix[i][j] = listMatrix.get(j + i * m);
 System.out.print(matrix[i][j] + "\t");
 }
 System.out.println();
 }

 scanner.close();
</integer></integer>

licensed under cc by-sa 3.0 with attribution.