2014-08-27 2 views
0

У меня есть некоторые пункты покупок в файле, разделенные символом «|».Манипулирование карты внутри карты

Adam|grocery|veggies|100.00 
John|fuel|gasoline|42.60 
John|grocery|veggies|20.00 

Налог с продаж составляет 8,75%.

  1. Найти общий доход для каждого клиента.
  2. Для каждого клиента укажите, сколько расходов было направлено на какую категорию.
  3. Показать налог с продаж для каждого из выводов.

Выход:

Total Revenue: 
Adam - $100.00 
John - $62.60 
Tax - 14.22 

Shopping by Adam: 
Grocery - $100.00 
Tax - $8.75 

Shopping by John: 
Fuel - 44.60 
Grocery - 20.00 
Tax - $5.47 

Я прочитал файл, используя код, а затем создал HashMap с String в качестве ключа (чтобы сохранить имя клиента) и значение в качестве другого HashMap (сохранить категорию (имя от категории в качестве ключа и цены в качестве значения))

package test; 

import java.io.*; 
import java.util.*; 

public class GroceryStore { 

    public static void main(String[] args) { 
     try { 
      File inFile = new File("/Users/customers.txt"); 
      Scanner scan = new Scanner(inFile); 
      String lines = ""; 

      Map<String, HashMap<String, Double>> map = new HashMap<String, HashMap<String, Double>>(); 

      while (scan.hasNextLine()) { 
       lines = scan.nextLine(); 
       String[] wordSplit = lines.split("\\|"); 
       HashMap<String, Double> category = new HashMap<String, Double>(); 
       category.put(wordSplit[1], Double.parseDouble(wordSplit[3])); 
       map.put(wordSplit[0], category); 
      } 

      System.out.println("Total revenue by customer: "); 
      for (Map.Entry<String, HashMap<String, Double>> entry : map.entrySet()) { 
       System.out.println(entry.getKey() + " - " + entry.getValue()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Но это не работает так, как я думал и не мог продолжить. На последнем этапе while цикл, когда используется map.put. Это заменяет предыдущую запись покупки этого человека новой покупкой. Но я хочу, чтобы все записи о покупке для этого человека отслеживались. Затем мы должны иметь возможность отображать общий вывод и категоризированный вывод.

Может ли кто-нибудь помочь в этом, у вас может быть другой подход?

+0

Это звучит как вопрос домашней работы – smang

+0

«Это не работает» - как это не работает? что случилось? что происходит? –

+0

Также - вам лучше разместить полный класс, так как то, что вы предоставили, имеет различные синтаксические ошибки из-за отсутствия фигурных скобок. –

ответ

0

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

import csv 

data = {} 

with open('/Users/customers.txt', 'rb') as csvfile: 
    spamreader = csv.reader(csvfile, delimiter='|', quotechar='"') 
    for row in spamreader: 
     data[row[0]] = row 

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