2012-03-15 70 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並將你的值存儲在那裏。