2013-11-25 7 views
0

im new to this but im tring, чтобы сделать программу бронирования отелей.2D int array shuffle

Так у меня есть 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 

}

ответ

0

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

Collections.shuffle() 

Вот tutorial, который описывает коллекцию или без нее.

+0

Я попытался это, но не могу заставить его работать с 2d. Но когда я читаю aoubt shuffle, он говорит, что ничего не известно о том, какой список должен быть. – Erazx

+0

@ Erazx См. Ссылку на учебник, представленную в моем ответе. Это очень просто. ArrayList, LinkedList .. все они реализуют список. Поэтому выбирайте то, что вы предпочитаете. В учебнике также имеется массив shuffle. Используйте это, если хотите. –

0

Общий метод перетасовки в 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.

1

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

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

    Collections.shuffle(pair); 
4

Вы можете использовать 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; 
     } 
    } 
} 
+0

Perfect. благодаря – Sayka