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]);
}
4

1 に答える 1

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 コレクションの 1 つを使用して、好きなようにそれらを保持およびソートできます。これは追加のコーディングですが、より堅牢で拡張可能な実装が可能になります。たとえば、列に空席が 2 つあるが、どちらかの端にある場合はどうなるでしょうか。現在の実装は完全にスクラブする必要があります。ここでは、いくつかの場所でロジックを変更する必要があるだけで、BAM、v2.

言語を有利に使用することを強く検討してください。Java をスクリプト言語として使用しないでください。それは目的ではありません。

于 2012-09-18T19:01:37.183 に答える