2013-11-25 206 views
0

即時通訊此新的但即將做一個酒店預訂程序。二維int陣列shuffle

所以我同房間一個二維int數組,當我開始計劃我希望他們在被隨機洗牌,以所謂的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工作。但是,當我讀到有人洗牌時,它說沒有必要列出什麼樣的列表。 – Erazx

+0

@Erazx請參閱我在答案中提供的教程鏈接。這很簡單。 ArrayList,LinkedList ..他們都實現列表。所以選擇你喜歡的。在教程中還有數組隨機播放。如果你願意,可以使用它。 –

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

您可以使用修改二維數組費雪耶茨算法:

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

完美。謝謝 – Sayka