2012-03-15 72 views
0

这是作业:写一个方法,用2维排序矩阵的元素。例如需要帮助作业

sort({{1,4}{2,3}}) 

会返回一个矩阵

{{1,2}{3,4}}. 

我不知道我在做什么错在我的代码导致输出我得到的是3.0,3.0,4.0,4.0。

这是我迄今有任何帮助将不胜感激。

public static void main(String[] args) { 
    double[][] array = { {1, 4}, {2, 3} }; 
    double[][] new_array = sort(array); 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      System.out.print(new_array[i][j] + " "); 
     } 
    } 

} 

public static double[][] sort(double[][] array) { 
    double[] storage = new double[array.length]; 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      storage[i] = array[i][j]; 
     } 
    } 
    storage = bubSort(storage); 
    for(int i = 0; i < array.length; i++) { 
     for(int j = 0; j < array.length; j++) { 
      array[i][j] = storage[i]; 
     } 
    } 
    return array; 
} 

public static double[] bubSort(double[] list) { 
    boolean changed = true; 
    double temp; 
    do { 
    changed = false; 
    for (int j = 0; j < list.length -1; j++) 
    if (list[j] > list[j + 1]) { 
     temp = list[j]; 
     list[j] = list[j + 1]; 
     list[j + 1] = temp; 
     changed = true; 
    } 
    } while (changed); 
    return list; 
} 

} 
+1

欢迎来到SO。不幸的是,这不是这个网站的工作原理。你不能只在这里转储代码,并期望有人阅读它并为你调试。你有没有尝试在调试器中逐步完成它?这通常是第一件事。请阅读[常见问题]和[问]在这里发布问题的指导方针。 – 2012-03-15 04:12:39

回答

1

您遇到的主要问题是如何将值从2d数组复制到1d数组。实际上,您只能将两个值复制到长度为2的数组中。二维数组的长度不是完整的m x n长度。

我会给你一个小提示,你如何能够从2d数组拷贝到1d数组中,但是由你决定如何从1d数组拷贝回2d数组。另外,你将如何去寻找整个阵列的长度?

double[] storage = new double[4];//You should calculate this value 
    int k = 0; 
    for (int i = 0; i < array.length; i++) { 
     for (int j = 0; j < array.length; j++) { 
      storage[k++] = array[i][j]; 
     } 
    } 

你的气泡排序工作正常,但你是复制错误的值。尝试在排序后打印阵列存储,您将看到它现在是正确的。

+0

非常感谢这就是我一直在寻找:) – Kelpocalypse 2012-03-16 02:28:32

0

您正在覆盖您将其设置为array [i]的存储阵列。因为它在for循环中,所以你需要设置storage [0] = array [0] [0],然后设置storage [0] = array [0] [1]。这会导致您仅拾取数组的该维度中的最后一个数字。同样,当你读出它们时,你会插入相同的数字两次。由于4和3是它们各自维度中的最后两个数字,因此这表明您正在对数组进行排序。你需要一个for循环存储设置< array.length并将你的值存储在那里。