2013-05-06 1 views
0

Я пишу консольное приложение, которое вычисляет использование хеш-таблиц разных цен. Он пишет цены с классом, называемым Priceprint. Я использую hashtables для остальной части программы, потому что порядок не особенно важен, но он заказывает ключи перед созданием списка в качестве вывода. Он ставит их в порядок, помещая ключи в вектор, сортируя вектор с Collections.sort() и вручную меняя первый и второй ключи с помощью записей с обменом ключами и специальными. Затем он использует перечисление для получения всего от вектора и вызывает другую функцию для записи каждой записи на экран.Сортировка Java с коллекциями плюс ручная сортировка

public void out(Hashtable<String, Double> b, Hashtable<String, Double> d) { 
      Vector<String> v; 
      Enumeration<String> k; 
      String te1, te2, e; 
      int ex, sp; 

      v = new Vector<String>(d.keySet()); 
      Collections.sort(v); 

      te1 = new String(v.get(0)); 
      ex = v.indexOf("exchange"); 
      v.set(ex, te1); v.set(0, "exchange"); 

      te2 = new String(v.get(1)); 
      ex = v.indexOf("special"); 
      v.set(ex, te2); v.set(1, "special"); 

      if (msgflag == true) 
        System.out.println("Listing Bitcoin and dollar prices."); 
      else { 
        System.out.println("Listing Bitcoin and dollar prices, " 
             + message + "."); 
        msgflag = true; 
      } 

      k = v.elements(); 
      while (k.hasMoreElements()) { 
        e = new String(k.nextElement()); 
        out(e, d.get(e), b.get(e)); 
      } 
    } 

Теперь проблема я столкнулся из-за отсутствия только мысли, что SWAP записи и сортировки списка в алфавитном порядке, это ключи. Поэтому, когда я запускаю обмен программой, а специальные находятся наверху, но остальная часть списка больше не в порядке. Мне, возможно, придется отказаться от основной конструкции, в которой списки выводятся через код для отдельных записей с ценой ключей и специальным выходом на верх, но с порядком с любым другим аспектом списка. Это позор, потому что это может потребоваться, и мне очень понравился дизайн.

Вот полный код, игнорировать тот факт, я использую конструктор по классу, по-видимому, следует, используя статические методы, но упускать из вида, что: http://pastebin.com/CdwhcV2L

Вот код, используя Printprice, чтобы создать список цен на проверить другую часть программы, но и Printprice списков: http://pastebin.com/E2Fq13zF

Выход:

[email protected]:~/devel/java/pricecalc$ java backend.test.Test 
I test CalcPrice, but I also test Printprice(Hashtable, Hashtable, String). 
Listing Bitcoin and dollar prices, for unit test, check with calculator. 
Exchange rate is $127.23 (USDBTC). 
Special is 20.0%. 
privacy: $2.0 0.0126BTC, for unit test, check with calculator. 
quotaband: $1.5 0.0094BTC, for unit test, check with calculator. 
quotahdd: $5.0 0.0314BTC, for unit test, check with calculator. 
shells:  $5.0 0.0314BTC, for unit test, check with calculator. 
hosting: $10.0 0.0629BTC, for unit test, check with calculator. 

ответ

1

проблема, кажется, что вы ставите первые и вторые элементы назад я к вектору в местах, откуда «обмен» и «особый» пришел, вместо того, чтобы удалять «обмен» и «специальный» из вектора и вставлять их в верхнюю часть вектора.

Выполнение этого действия было бы более эффективным с помощью LinkedList вместо Vector. Для выполнения требуемых операций, предполагая, что v является List:

v.add(0, v.remove(v.indexOf("special"))); 
v.add(0, v.remove(v.indexOf("exchange"))); 

Это должно поставить «обмен» первый, «специальный» второй и остальная часть списка будет оставаться в отсортированном порядке после этого.

+0

Спасибо! Это делает его приятным и простым. –