我正在做一个学校项目,我的耳朵陷入了二维阵列,试图对它进行排序。
所以我得到的是:
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;
}
}
}
但似乎失败了。我在哪里做错了?
提前谢谢!
答案 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));
}
这将按“价格”对数组进行排序(我猜是该字段的名称..)