2016-07-16 72 views
-2

我正在嘗試爲以下問題編寫Java代碼。但我無法找到解決此問題的優化方法。切割java數組列表

我有一個時間和咖啡消費的數組列表如下。我想每小時計算咖啡的消耗量,如果在特定小時內沒有消費,則下一個小時的第一次進入將是該小時的總消耗量。

例如:

我有以下數組列表

Time  consumption of coffee 
2:15    5 cups 
2:30    6 cups 
2:45    7 cups 
3:05    2 cups 
3:45    6 cups 
5:05    1 cups 
5:30    2 cups 
7:15    1 cup 

所以想要計算什麼是2小時的總消耗,這將是在這種情況下18杯從2:00到3點,3點到4點就是8杯。因爲沒有從4點到5點的入場,所以那個時候的消費量應該是在5點5分消耗的咖啡的量,這是1杯。我想要結果到7點。由於我們在6:00 -7:00沒有任何東西,那麼它將是1杯,這在7點15分是價值。

所以我想總消費量的從2:00到7:00最終結果分佈每隔一小時數組列表如下對象

obj1 = T<2:00,3:00,18> 
obj2 = T<3:00,4:00,8> 
obj3 = T<4:00,5:00,1> 
obj4 = T<5:00,6:00,3> 
obj5 = T<6:00,7:00,1> 

finalList = <obj1,obj2,obj3,obj4,obj5> 

我沒能獲得如何砍在每小時列表並看看下一個值。

+4

如果您發佈了您擁有的代碼,可能會更容易。 – c0der

+1

如果(在你的例子中)你改爲'3:45-> 6杯, 5:55-> 8杯; 7:15-> 1杯?你最終會爲「4:00-5:00」計算8杯,而「5:00-6:00」計數8杯?這似乎相當扭曲。 –

+1

因此,如果在當前時間範圍內沒有咖啡,我們將進入下一個時間間隔? –

回答

0

你完全失去了我從下一個小時開始填充空白小時的第一個值的邏輯。但無論如何,我會給它一個鏡頭。

我的方法假設您的輸入數據是從早到晚的時間順序。

定義一個CoffeeConsumption類,其中包含兩個成員LocalTimeInteger

創建Map,或許是SortedMap,如TreeMap。密鑰類型爲Integer,代表0到23之間的一天中的小時。值爲Set,可能爲SortedSet,例如TreeSet,用於存儲上面定義的自定義對象。

對於您的每個自定義對象,請抓住它的LocalTime並致電getHour。使用該小時編號在地圖中查找匹配的關鍵字,檢索設置並添加項目。

要獲得總計,循環地圖,並循環每個集合。要保存總計,創建一個新的SortedMap,其中Integer作爲每小時的時間關鍵字,Integer作爲小時消耗的總杯數的值。

請注意,沒有必要顯式保存您在問題中顯示的小時結束時間。您始終可以計算該值:致電LocalTime::plusHours(1)

要支持該移動第一項到前一小時如果爲空的功能,請按照我在該複合標題中概述的邏輯進行操作。當向沒有現有密鑰的地圖添加咖啡對象時,在那個小時內放置咖啡對象時,首先從小時中減去一個咖啡對象,然後在Map中查找該減去的數字作爲關鍵字。如果減去的鍵不存在於地圖中,則放置該地圖,創建一個新的空集合,在該集合中放置咖啡對象,否則該咖啡對象已經到了它自己的小時。警告:此功能有難聞的氣味,並且表明您的設計出現問題或者需求被誤解。