【问题标题】:Sorting Two-Dimensional Array by Row按行对二维数组进行排序
【发布时间】:2015-11-08 02:29:34
【问题描述】:

要求是对二维数组的行进行排序。我觉得我的代码非常接近完成,但我不知道为什么它不显示排序数组。我忘了提到我们不允许使用预制的排序方法。问题很可能出在 sortRows 方法中。无论如何,这是我的代码:

public class RowSorting
{
   public static void main(String[] args) 
{
  double[][] numbers  = new double[3][3];
  double[][] number  = new double[3][3];
  int run = 0;
  String answer = "";

  while (run == 0)
     {
       Scanner input = new Scanner(System.in);
       System.out.print("Enter a 3-by-3 matrix row by row: ");
       for(int row = 0; row < numbers.length; row++)
        {
         for(int column = 0; column < numbers[row].length; column++)
          {
           numbers[row][column] = input.nextDouble();
          }
        }
       for(int row = 0; row < numbers.length; row++)
        {
         for(int column = 0; column < numbers[row].length; column++)
          {
           System.out.print(numbers[row][column] + " ");
          }
         System.out.print("\n");
        } 
       System.out.println("The sorted array is: \n");
       number = sortRows(numbers);
       for(int row = 0; row < number.length; row++)
        {
         for(int column = 0; column < number[row].length; column++)
          {
           System.out.print(number[row][column] + " ");
          }
         System.out.print("\n");
        } 




   System.out.print("\nWould you like to continue the program (y for yes or    anything else exits): ");
       answer = input.next();

       if(answer.equals("y"))
        {
         continue;
        }
       else
         break;
      }




}
 public static double[][] sortRows(double[][] m)
{
  for(int j = 0; j < m[j].length - 1; j++)
   {
    for(int i = 0; i < m.length; i++)
    {
      double currentMin = m[j][i];
      int currentMinIndex = i;

      for(int k = i + 1; k < m[j].length; k++)
      {
       if(currentMin > m[j][i])
       {
        currentMin = m[j][i];
        currentMinIndex = k;
       }
      }
    if(currentMinIndex != i)
    {
     m[currentMinIndex][j] = m[j][i];
     m[j][i] = currentMin;
    }
    }
   }
  return m;
 }
}

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    看起来像这个块:

    if(currentMin > m[j][i])
       {
        currentMin = m[j][i];
        currentMinIndex = k;
       }
    

    永远不会发生。因为您刚刚将 currentMin 分配给 m[j][i] 之前的两行。我相信您想在 if 检查中使用 k 。像

    if (currentMin > m[j][k]){
        currentMin = m[j][k];
        currentMinIndex = k;
    }
    

    【讨论】:

    • 哦,是的!非常感谢。这解决了我的问题的一部分,但我能够解决它。我还必须翻转 currentMinIndex 变量和 j。非常感谢!!!
    【解决方案2】:

    根据 ergonaut 的引用,您的代码块有问题

    if(currentMin > m[j][i]) ...
    

    还有

    m[currentMinIndex][j] = m[j][i];
    

    但是,您的 for 循环也有问题。

    for(int j = 0; j < m[j].length - 1; j++) ...
        for(int i = 0; i < m.length; i++) ...
    

    这两者的结构都很奇怪。您可能希望交换这些 for 循环,以免引发索引异常。这也将导致您处理代码中的索引。并修改您的 j-index for-loop 以包含整个范围。

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2018-06-02
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2015-09-17
      • 2021-03-30
      相关资源
      最近更新 更多