2015-11-08 95 views
4

需求是对二维数组的行进行排序。我觉得我的代码非常接近完成,但我不明白为什么它不显示排序的数组。我忘了提及我们不允许使用预制分类方法。这个问题很可能在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; 
} 
} 

回答

1

它看起来像块:

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

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

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

哦,是的!非常感谢。这是我的问题的固定部分,但我能够玩弄它来弄清楚。我还必须翻转currentMinIndex变量和j。非常感谢!!! –

0

按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-loops,以便不抛出索引异常。这也会导致您在代码中寻址索引。并修改您的j-index for-loop以包含整个范围。