2013-04-03 37 views
0

我在做一個程序,讀取文本文件看起來像這樣:二進制搜索,並使用SORTKEY兩個數組 - 非常詳細【JAVA]

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

因此列表中設置這樣,左列是項目ID,右列是庫存中的項目編號(就像這是商店一樣)。我需要的程序是將左列(項目ID)從最低到最高排序,然後像列出一樣列出列表,並將正確數量的庫存與它對齊。因此,它看起來像這樣:

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

    etc.... 

所以我寫了迄今由我自己的是,我導入的文件,分割數爲兩個不同的陣列,這樣我就可以排序ID的使用Arrays.sort( )。

現在我想要做的是,確保如果我排序的ID我可以讓庫存遵循其分配的ID。我在Java Docs上進行了一些搜索,發現了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(); 
    } 

} 
    } 

我希望我做的足夠意義,它將爲如何做我想要做的任何建議,是偉大的!

感謝

回答

3

的問題適合於映射。 (在Java中的關鍵值存儲) 使用TreeMap(自動提供按鍵的自然排序),所以你根本不需要實現排序。 你的任務是隻用文件值填充你的樹形圖。

+0

好吧,那麼如果您說TreeMap不會排序,那麼如何獲得ID從最低ID排序到最高ID? – 2013-04-03 19:44:16

+0

TreeMap將自動保持您的密鑰順序(對應的值正確映射)。您的任務是逐行讀取文件,並使用ID作爲密鑰和庫存填充TreeMap填充值。一旦TreeMap被填充,你可以迭代和打印,以確認值排序 – prashant 2013-04-03 19:46:05

+0

感謝一堆。要去做這個!看起來像我在找什麼。再次感謝 – 2013-04-03 19:49:41