2016-05-08 5 views
0

Я делаю школьный проект, и я получил уши, пойманные в 2-мерном массиве, пытаясь его отсортировать.Java. 2d сортировать по столбцу

Так что я получил это:

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 с точки десятичного разделителя. Если вам нужно разобрать поплавки с разделителем запятой, используйте this Q&A.

0

реорганизовать 2d массив только для 1D-массива (вы можете сохранить боль в шее ...), а затем использовать 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

Я хотел бы сделать это, но я получаю 2d массив путем смешивания 5 массивы в один. Я получаю каждое из полей, используя массив (1 для ввода, 1 для цены, 1 для категории, 1 для типа оплаты и 1 для даты). И затем я поместил их в этот последний массив строк. –

Смежные вопросы