2014-03-26 63 views
-2
import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 


public class logBook 
{ 
    public static void main(String[] args) throws FileNotFoundException 
     { 
     File inputFile = new File("C:\\Users\\Nick Tate\\Desktop\\Log.txt"); 
     try{ 
     Scanner in = new Scanner(inputFile); 
      while(in.hasNextLine()) 
       { 
        in.useDelimiter(";"); 

       String clientName = in.next(); 
       String serviceCost = in.next(); 
       String serviceSold = in.next(); 
       String serviceDate = in.next(); 
       double cost = Double.parseDouble(serviceCost.trim()); 
       System.out.print(clientName); 
       System.out.printf("%8.2f", cost); 
       System.out.print(serviceSold); 
       System.out.print(serviceDate); 

       } 
      in.close(); 
      } 
      catch(FileNotFoundException e){ 
       e.printStackTrace(); 
      } 


     } 
} 

輸出:如何從文件中總計服務和服務總成本?

- John 25.00 Dinner Aug 12 2013 
- Bob 200.00 Conference Sep 11 2013 
- Clara 450.00 Lodging Oct 25 2013 
- Jamie 900.00 Lodging Oct 28 2013 
- Rachel 89.00 Dinner Nov 11 2013 
- Richard 1000.00 Conference Dec 17 2013 
- Nick 2500.00 Dinner Jan 05 2014 

到目前爲止,我已經成功地在每一個項目從我的文件中讀取並解析相應的變量。我現在需要將單獨的服務類別(即晚餐,會議等)的總成本計算在內。我應該如何去做這件事?我想添加if()子句檢查每個服務,如

if(serviceSold.equals("Dinner") 
    { int sum = 0 
     dinnerTotal = sum++ 
    } 

但是,那麼我會如何將相應的價格添加到該類別?任何指導? 我最終需要將這些總數寫入另一個名爲outputLogBook.text的文件。

+0

爲什麼問題趴下投兩次? – user3439850

回答

0

你可以做到以下幾點:

import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Map; 


public class logBook 
{ 
    public static void main(String[] args) throws FileNotFoundException 
    { 
     File inputFile = new File("C:\\Users\\Nick Tate\\Desktop\\Log.txt"); 
     try 
     { 
     Scanner in = new Scanner(inputFile); 
     Map<String, Double> services = new HashMap<String, Double>(); 

     while(in.hasNextLine()) 
     { 
      in.useDelimiter(";"); 

      String clientName = in.next(); 
      String serviceCost = in.next(); 
      String serviceSold = in.next(); 
      String serviceDate = in.next(); 
      Double cost = Double.parseDouble (serviceCost.trim()); 
      System.out.print(clientName); 
      System.out.printf("%8.2f", cost); 
      System.out.print(serviceSold); 
      System.out.print(serviceDate); 

      if (services.containsKey(serviceSold)) 
      { 
       services.put(serviceSold, (Double) services.get(serviceSold) + cost); 
      } 
      else 
      { 
       services.put(serviceSold, cost); 
      } 
     } 

     for(Map.Entry<String, Double> entry : services.entrySet()) 
     { 
      System.out.println(entry); 
     } 
     in.close(); 
     } 
     catch(FileNotFoundException e) 
     { 
     e.printStackTrace(); 
     } 
    } 
} 
+0

我還沒有和Map做過很多工作,但是我對它有點熟悉。初始的Map 服務子句應該在try語句之前進行嗎?還有什麼會進入(...)? – user3439850

+0

有沒有其他方法可以在不實現Map類的情況下完成這個任務? – user3439850

+0

更新了答案。是的,但對於給定的情況,這似乎是最乾淨和最有效的。 – Zyn