2013-04-03 2 views
0

Я делаю программу, которая считывает текстовый файл, который выглядит следующим образом:двоичный поиск и использование SortKey для двух массивов - Очень подробно [Java]

3679  87 
    196  60 
17914  12 
18618  64 
    2370  65 
    584  85 
18524  34 
12024   5 
    6992  76 
18410  56 

Так что список настроен так, левые column - это идентификатор элемента, а правый столбец - номер элемента в инвентаре (как если бы это был магазин). Мне нужна эта программа, сортировка левого столбца (Идентификатор элемента) от самого низкого до самого высокого, затем Распечатайте список, как показано, и укажите правильное количество инвентаря, выровненного с ним. Так что это выглядит следующим образом:

184  14 
    196  60 
    206  31 
    584  85 
    768  85 
    2370  65 
    3433  5 
    3679  87 

    etc.... 

Так что я написал до сих пор сам, я импортировать файл, разделить число на два разные массивы, так что я мог бы разобраться в идентификаторах, используя Arrays.sort ().

Теперь, что я пытаюсь сделать, убедитесь, что, если я сортирую идентификаторы, у меня может быть инвентарь, следуйте его присвоенному идентификатору. Я сделал некоторые поиски в Документах по Java и нашел функцию SortKey, и мне было интересно, как я буду использовать ее? Или, если это даже правильный путь.

Вот мой текущий код:

import java.io.File; 
    import java.io.FileNotFoundException; 
    import java.io.FileReader; 
    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.List; 
    import java.util.Scanner; 

    public class Store { 

    public static void main(String[] args) throws FileNotFoundException { 

    // **************Scanner s = new 
    // Scanner(input).useDelimiter("\\s*,\\s*"); 

    ArrayList<String> numbersString = new ArrayList<String>(); 

    ArrayList<Integer> numbers = new ArrayList<Integer>(); 
    ArrayList<Integer> ids = new ArrayList<Integer>(); 
    ArrayList<Integer> inventory = new ArrayList<Integer>(); 
    int arraySize = numbersString.size(); 

    List<Integer> l1 = new ArrayList<Integer>(); 
    List<Integer> l2 = new ArrayList<Integer>(); 

    Scanner s = new Scanner(new FileReader("file50.txt")); 

    try { 

     while (s.hasNext()) { 
      l1.add(s.nextInt()); 
      l2.add(s.nextInt()); 
     } 
     System.out.print(l1); 
     System.out.println(); 
     System.out.print(l2); 

     int[] list1 = new int[l1.size()]; 
     int[] list2 = new int[l2.size()]; 
     ArrayList<Integer> l3 = new ArrayList<Integer>(); 

     for (int x = 0; x <= l1.size() - 1; x++) { 

      int n = l1.get(x); 
      list1[x] = n; 

     } 
     // System.out.print(Arrays.toString(list1)); 
     for (int p = 0; p <= l2.size() - 1; p++) { 

      int o = l2.get(p); 
      list2[p] = o; 

     } 
     for(int y = 0; y < l1.size(); y++){ 


     } 

     Arrays.sort(list1); 
     Arrays.sort(list2); 
     //System.out.println(); 
     //System.out.print(Arrays.toString(list1)); 

    } 

    catch (Exception i) { 

     i.printStackTrace(); 
    } 

} 
    } 

Я надеюсь, что я сделал достаточно здравого смысла, и это было бы здорово для любых предложений о том, как сделать то, что я пытаюсь сделать!

Thanks

ответ

3

Проблема поддается картированию. (Хранилище значений ключа в java) Используйте TreeMap (обеспечивает естественный порядок на клавишах автоматически), поэтому вам не нужно выполнять сортировку вообще. Ваша задача состояла бы в том, чтобы просто заполнить ваш treemap значениями файлов.

+0

Хорошо, так как я могу получить идентификаторы для сортировки с самого низкого ID до самого высокого, если вы скажете, что TreeMap НЕ сортируется? –

+0

TreeMap автоматически сохранит ваши ключи в порядке (соответствующие значения отображаются правильно). Ваша задача - просто прочитать файл по строкам и заполнить TreeMap идентификатором в качестве ключа и инвентаря в качестве значения. После заполнения TreeMap вы можете просто перебирать и печатать, чтобы подтвердить, что значения отсортированы. – prashant

+0

Спасибо, кучка. Собираюсь делать это! Кажется, что я ищу. Опять же, спасибо –

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