1

私は一日中この問題に取り組んできましたが、次に何をすべきかわかりません。行を並べ替えていますが、最後の行を完全には並べ替えません。これが私のコードです。私または誰かがこれを取得すると、私は愚かに感じるでしょう。ありがとう

    public class Sort2DRow
{
   public static void main (String [] args)
   {
      int[][] matrix = {{3,5,6}, {4,1,2},{9,8,7}};

      System.out.println("Before the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

      System.out.println();//Spacer
      System.out.println("After sort method");
      sortRow(matrix);

   }

   public static int[][] sortRow(int[][] m)
   {
      int temp = 0;
      for(int row = 0; row < m.length ; row++)
      {
         for(int col = 0; col < m.length -1; col++){
            if(m[row][col] > m[row][col + 1])
            {
               temp = m[row][col];
               m[row][col] = m[row][col + 1];
               m[row][col + 1] = temp;
            }
         }
       }

       for(int row = 0; row <m.length; row++){
         for(int col = 0; col <m[row].length; col++){
            System.out.print(m[row][col] + " ");
         }
         System.out.println();
      }

       int[][] result = m;
       return result;
   }

}
4

2 に答える 2

2

あなたは正しい道を進んでいますが、問題は、それがfor(int row = 0; row < m.length ; row++)外側のバブルソート ループであると誤って想定していることです。実際には、2 次元配列の次の行を「ロード」するのは単なるループです。したがって、不足しているループを追加する必要があります。

for(int col = 0; col < m[row].length; col++){ //This is the real outer bubblesort loop. Change it to m[row].length
    for(int nextCol = col; nextCol < m[row].length; nextCol++) {
        if(m[row][col] > m[row][nextCol])
        {
           temp = //I'll let you figure this out
           m[row][col] = //....
           m[row][nextCol] = //...
        }
     }
}
于 2013-10-06T20:53:14.250 に答える
0

最終的なコード製品

public class Sort2DRowTest
{
   public static void main (String [] args)
   {
      int[][] matrix = {{3,5,6}, {4,1,2},{9,8,7}};

      System.out.println("Before the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

      System.out.println();//Spacer
      System.out.println("Sort method");
      sortRow(matrix);

      System.out.println();//Spacer
      System.out.println("After the sort");
      for(int row = 0; row <matrix.length; row++){
         for(int col = 0; col <matrix[row].length; col++){
            System.out.print(matrix[row][col] + " ");
         }
         System.out.println();
      }

   }

   public static int[][] sortRow(int[][] m)
   {

      int[][] result = new int[m.length][m[0].length];

    // Copy from m to result
       for (int i = 0; i < m.length; i++)
         for (int j = 0; j < m[0].length; j++)
        result[i][j] = m[i][j];

      int temp = 0;
      for(int row = 0; row < result.length ; row++)
      {
         for(int col = 0; col < result[row].length; col++){ //This is the real outer bubblesort loop. Change it to m[row].length
            for(int nextCol = col; nextCol < result[row].length; nextCol++) {
               if(result[row][col] > result[row][nextCol])
               {
                  temp = result[row][col];
                  result[row][col] = result[row][nextCol];
                  result[row][nextCol] = temp;
               }
            }
            System.out.print(result[row][col] + " ");
         }
         System.out.println();
       }
       //int[][] result = m;
       return result;
   }

}
于 2013-10-07T21:43:58.203 に答える