2014-02-24 19 views
0

我有一個包含這樣的銷售數據的文件:如何組織數據以供其他對象使用?

2554.22,5321.12,323.29,8283.11,1923.26,6632.46,1104.42 
. 
. 
. 
n 

所以文件可能包含ň行數。我需要使用Scanner對象讀取文件,並計算每天,每週以及給定日期或周內的平均銷售額。

到目前爲止,我設計這樣的:

數據類:

public class SalesData { 

    private float[] sales; 

    public SalesData(float[] sales) { 

     this.sales = sales; 
    } 

    public float getTotalSales() { 

     float totalSales = 0.0; 

     for(float sale : sales) { 
     totalSales += sale; 
     } 

     return totalSales; 
    } 

    public float getAverageSales() { 

     return getTotalSales/salesData.length; 
    } 

} 
我有我的SalesUtil類的麻煩

。我不知道如何從每一行獲取數據並將其存儲在數組中,以便我可以實例化我的SalesData類。我試圖使用ArrayList,但我迷路了。我不確定我是否會走上正確的道路。

任何提示,非常感謝。

public class SalesUtil { 

    public List<String> readSalesFile() { 

     List<String> salesAsString = new ArrayList<String>(); 

     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Enter sales file name: "); 
     String salesFile = keyboard.nextLine(); 

     try { 

     Scanner scanFile = new Scanner(new File(salesFile)); 
     while(scanFile.hasNext()) { 
      salesAsString.add(scanFile.nextLine()); 
     } 
     catch(FileNotFoundException fnfe) { 
     System.out.println("Invalid file name supplied, please try again."); 
     readSalesFile(); 
     } 

     return salesAsString; 
    } 

    public List<Float> parseSalesFile(List<String> salesFile) { 

    List<Float> salesAsFloat = new ArrayList<Float>(); 
    } 
} 

回答

1

那麼,你正在一次讀取你的文件一行,這給你一個字符串的每一行。

從此,您需要在每個,處拆分字符串,您可以使用salesLine.split(",")進行拆分,這將爲您的文件中的每一行提供String[]。然後,您需要將此String[]轉換爲float[],以便在您的SalesData類中使用。

parseSalesFile將是一個不錯的地方要做到這一點(雖然你可能會想它的簽名更改爲float[] parseSalesFile(List<String> salesFile)考慮您的SalesData類需要一個float[],而不是一個List<Float>作爲輸入。它會去像

public float[] parseSalesFile(List<String> salesFile) { 
    float[] salesAsFloat = new float[salesFile.size() * 7]; 
    for (int w = 0; w < salesFile.size(); w++) { 
     String[] salesByDay = salesFile[w].split(","); 
     for (int d = 0; d < salesByDay; d++) 
      salesAsFloat[w * 7 + d] = Float.parseFloat(daySales); 
    } 
    return salesAsFloat; 
} 

您可能想要考慮更高級的數據表示,以減輕統計數據的計算量,就像使用簡單的浮點數組一樣,計算給定周的統計數據將需要您首先計算與該數據對應的索引範圍周。

+0

每行代表給定的一週。每列是本週的一天 –

+0

行。然後確實將你的文件轉換成一個'List '是一個選項。根據您以後的需求,一個更復雜的結構可能會很有趣(例如,具有代表特定日期的銷售數據並參考當天的結構,因此您可以更輕鬆地計算統計數據,如「星期一的平均銷售額」等) ;我會更新我的答案並將其考慮在內,以便將其降至直接相關的信息,以便更清楚。 – Gorkk