2016-08-30 27 views
1

"Worker"という名前のオブジェクトの行列があり、 "Worker"には "fullname"というString型の変数があります(名前には、SarahSmithなどのスペースはありません)。 行列の各列を、のアルファベット順に並べる必要があります。Java:String objects matrix

public static void secondChange(Worker[][] mat) { 
    for (int m = 0; m < mat[0].length; m++) { 
     for (int i = 0; i < mat[0].length; i++) { 
      int minindex = i; 
      for (int j = i + 1; j < mat[0].length; j++) { 
       if (mat[j][m].getName().compareTo(mat[minindex][m].getName()) < 0) 
        minindex = j; 
      } 
      Worker temp = mat[i][m]; 
      mat[i][m] = mat[minindex][m]; 
      mat[minindex][m] = temp; 
     } 
    } 
} 

し、私は降順各列を注文するために、この方法を使用する: は今はアルファベット順各列を注文するために、この方法を使用

public static void rightOrder(Worker[][] mat){ 
    for (int m=0 ; m<mat[0].length ; m++) 
    for (int i=0, j=(mat[0].length-1) ; i<(mat[0].length/2) || j>(mat[0].length/2) ; i++,j--){ 
     Worker temp = mat[i][m]; 
     mat[i][m] = mat[j][m]; 
     mat[j][m] = temp; 
    } 
} 

行列がされる第二の方法の後私が意図した方法で作業するのではなく、元の形に戻してください(最初の方法はうまくいきます)。 誰も助けることができますか? :)

答えて

0

のためにデバッグした後私は答えを持っている間に...

私はmat.length -1で実行する必要があり、mat[0].length-1〜で実行する必要があります!

0

これは直接あなたの質問に答えるが、ここでは、各列にListラッパーを作成することにより、マトリックスとJavaの標準とより効率的なソートを使用する方法ですされていません。

public static void sortColumnsDescending(Worker[][] matrix) { 
    for (int i = 0; i < matrix[0].length; i++) { 
     final int column = i; 
     new AbstractList<Worker>() { 
      @Override 
      public int size() { 
       return matrix.length; 
      } 

      @Override 
      public Worker get(int row) { 
       return matrix[row][column]; 
      } 

      @Override 
      public Worker set(int row, Worker element) { 
       Worker prev = matrix[row][column]; 
       matrix[row][column] = element; 
       return prev; 
      } 
     }.sort(Comparator.comparing(Worker::getName).reversed()); 
    } 
} 
+0

クラス用です。リストラッパーのようなものは使用できません。StringクラスとMatrixの基本を使用する必要があります。 – LjTiNo