2016-05-08 162 views
0

我正在做一個學校項目,並且讓我的耳朵陷入了試圖對其進行排序的二維數組中。Java。二維數組按列排序

所以我得到的是:

String array[][]={ {"5", "22,2", "car payment", "visa", "21/04/2016}, 
        {"3", "15,4", "shop", "cash", "16/02/2017}, 
        {"1", "11,3", "gym", "visa", "10/01/2016} }; 

我需要做的是列出了由第2列(降序)陣列。所以我列出數組應該是這樣的:

{"1", "11,3", "gym", "visa", "10/01/2016} 
{"3", "15,4", "shop", "cash", "16/02/2017} 
{"5", "22,2", "car payment", "visa", "21/04/2016} 

我想是這樣的:

for (int i = 0; i < array.length; i++){ 
    for (int j = 0; j < array[i].length; j++) { 
    if (Float.valueOf(array[i][1]) > Float.valueOf(array[i+1][1])) { 
     temp = array[j+1]; 
     array[j+1] = array[j]; 
     array[j] = temp; 
    } 
    } 
} 

,但似乎失敗。我在哪裏做錯了?

預先感謝您!

回答

1

你在一個氣泡排序和一個選擇排序之間編碼了一個奇怪的混合。比較應該是array[i][1]array[j][1],不array[i][1]array[i+1][1]之間:

if (Float.valueOf(array[i][1]) > Float.valueOf(array[j][1])) 

這應該float s的點小數點分隔符的工作。如果您需要使用逗號分隔符分析浮點數,請使用this Q&A

0

重構的二維數組只有一維數組(您可以節省頸項強痛...),然後使用Arrays.sort並通過自己的比較,你可以比較每行的element2的

例如:

public static void main(String[] args) { 
    String[] array = { "\"5\", \"22,2\", \"car payment\", \"visa\", \"21/04/2016\"", 
      "\"3\", \"15,4\", \"shop\", \"cash\", \"16/02/2017\"", "\"1\", \"11,3\", \"gym\", \"visa\", \"10/01/2016\"" }; 
    Arrays.sort(array, new Comparator<String>() { 

     @Override 
     public int compare(String o1, String o2) { 
      return o1.split(",")[1].compareTo(o2.split(",")[1]); 
     } 
    }); 
    System.out.println(Arrays.toString(array)); 
} 

這將由「價格」的數組進行排序(我猜是字段的名稱。)

+0

我很想這樣做,但我通過混合5得到的二維數組數組合成一個。 我使用數組獲取每個字段(1爲輸入,1爲價格,1爲類別,1爲付款類型,1爲日期)。然後我把它們全部放入這個最終的String數組中。 –