2012-09-18 27 views
0

我想讓一個4人坐在一個劇院裏,讓他們坐在一排或者彼此相鄰的人最多。我有一個行數組,其中索引代表存儲該行中可用座位數的行。如果我使用排序方法,那麼它將排序可用的座位,但是我將失去它對應的行。顯然,我可以通過它循環尋找我想要的最大座位數量,如果我沒有找到,我可以減少我的數量等等,但這不是最佳的。如何在保留初始索引的同時對這些值進行排序?

行:1 2 3 4

可用:2 3 1 4

排序可用:4 3 2 1

相應行:4 2 1 3 < - 這就是我想要

//this is one way to do it but i want a better way 
int[] row = {0, 2, 3, 1, 4}; 
double[] rowDouble = new double[row.length]; 

for (int i = 0; i < row.length; i++) 
{ 
    String rowString = Integer.toString(row[i]) + "." + Integer.toString(i); 
    rowDouble[i] = Double.valueOf(rowString); 
} 

Arrays.sort(rowDouble); 
String sortedRowString = Arrays.toString(rowDouble); 
sortedRowString = sortedRowString.substring(1, sortedRowString.length()-1); 

System.out.println(sortedRowString); 
String[] finalSortedRowString = sortedRowString.split(", "); 

for (int i = finalSortedRowString.length-1; i > 0; i--) 
{ 
    System.out.println(finalSortedRowString[i].split("\\.")[1]); 
} 
+0

你能多解釋一下嗎?你如何得到相應的行答案? – RNJ

+0

只有4人可以坐着嗎?輸入 - 行,可用和排序可用 - 在有4人的情況下沒有意義。無論如何,不​​是我。 – Cam

+0

行保持可用值。所以當我從行[1]中調用1時,我得到2.我需要知道哪一行具有最多的可用值。所以我需要對可用值進行排序,但要跟蹤它對應的行。 – zetologos

回答

6

我覺得你是以這種錯誤的範例來到這裏的。 Java是面向對象的語言,你應該這樣使用它。

public Class Row { 
    private int available; 
    private int rownum; 
    public Row(int avail, int rown) { /*...*/ } 
    public int compareTo(Row otherRow) { /*...*/ } 
    public int checkAvailable() { /*...*/ } 
    public int addPerson() { /*...*/ } 
    public int addSeat() { /*...*/ } 
    public int addParty(int size) { /*...*/ } 
} 

然後,您可以使用許多可用的Java集合之一來保存並按照您的喜好對其進行排序。這是一些額外的編碼,但它將允許更健壯和可擴展的實現。例如:如果你的排有兩個座位可用,但它們兩端都是?您目前的實施將不得不完全清理。在這裏,你只需要在幾個地方改變邏輯,而BAM,你已經有了v2。

請強烈考慮使用該語言對您有利。不要使用java作爲腳本語言,這不是它的用途。

+0

我在我的真實程序中有這個功能,即爲個人和團體座位分開的方法。我把我的行保存在一個ArrayList的ArrayList中,它持有row#和seat對象。所以我需要按降序排列我的座位大小。 – zetologos

相關問題