Java的。 2d数组按列排序

时间:2016-05-08 09:11:05

标签: java arrays

我正在做一个学校项目,我的耳朵陷入了二维阵列,试图对它进行排序。

所以我得到的是:

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}   };

我需要做的是按第二列(降序)列出数组。所以我列出的数组应该是这样的:

{"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;
    }
  }
}

但似乎失败了。我在哪里做错了?

提前谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

仅为一维数组重构2d数组(可以省去颈部的痛苦......),然后使用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));
}

这将按“价格”对数组进行排序(我猜是该字段的名称..)