![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 板上的Java高手請教,勞工新制的工時計算
(https://www.pcdvd.com.tw/showthread.php?t=1119247)
|
---|
板上的Java高手請教,勞工新制的工時計算
假設某月份,31天,每天的工時,如下面的陣列,
6.5表示當天上班6.5小時,0表示當天休假。 {6.5,9,6.5,9.5,6.5,6.5,0,6.5,6.5,6.5,6,9.5,6.5,0,6.5,9,6.5,6,6.5,0,6.5,6.5,6.5,6.5,6.5,6.5,0,6.5,0,0,0} 條件: 一、7休1 二、14休2 三、7天內的工時合計不可超過48小時 四、14天內的工時合計不可超過80小時,若超過時顯示加班幾個小時 請問Java要怎麼寫,才能檢查上面的陣列是否符合,若不符合,請顯示哪天到哪天不符合,感謝!!! |
如果是我, 會考慮OOD來降低複雜度...
在我看來你提供的條件都是策略.. 應該用STRATEGY來拆開算法(先不去管要不要合併TEMPLATE METHOD, 我沒有注意到有特別的流程)... 連續檢查的情況下可以做成一條chain... 可以把職責做成Responsibility of chain連續傳遞... 我不希望充斥著一大堆的if/else或著switch, ugly code. terrible... 免不了一定會有factory的設計來操作... 也許思考上我可能還有些缺失... 當然, 可以裝B應用結構化程序方式慢慢折騰... |
引用:
你說的那些,我只會用if/else來處理,其他的我都不懂。 我是想說,先檢查條件1(7休1),若不符合,就顯示哪裡不符合。 然後再檢查條件2,以此類推。 我大概只會最簡單的方式。 |
引用:
這個結構化程序的設計顯然缺失就是大量的條件判斷... 如果對OOAD很生疏, 結構化程序設計不是不行... 只是我覺得代碼會變得相當複雜.... 你是否有接觸過一些OO的基本原則??.. 比方說有一個叫 "駱駝特馬的" 這個王八創造了SOLID-5大原則... 雖然像是駱駝特馬的或著馬的發拉(這個傢伙特別混帳...:mad:..)等等, 這些王八專家總是創造一大堆新名詞來稿死人... |
引用:
那能否教我條件1的7休1,用IF的方式,剩下我自己慢慢摸索,謝謝! |
以1來說笨蛋一點不就對數列做index
直接loop 31(n=1:31)次,或是根據數列長度做變化 每次loop (0+n)~(6+n),取出相對應的數列 再對這7個數字尋找0出現次數 0次的話就輸出date(n)~date(6+n) 相對應的日期 我應該沒誤會樓主的意思吧@@ |
我覺得先針對要解決的問題寫 code,比為了 DP 而 DP 好。
樓主現在問題的重點是算法,不是設計。 我覺得這種小東西用到 strategy 就已經是在用牛刀殺雞了,再加 factory 感覺就像拿電鋸了,如果你有一兩百隻雞要殺,這是不錯的選擇。 可是我覺得樓主不過就只想殺一隻雞而已... :laugh: :laugh: :laugh: :laugh: :laugh: |
int flag = 1;
for(int i = 0; i < 30; i++, flag++){ if(array[n] == 0){ flag = 0; } if(flag > 6){ System.out.println("第" + (n+1) + "天不符合"); } } |
引用:
如果條件一的問題.. 我的想法是這樣... 我猜你的問題是抽出來看是否符合7休一天的條件... 假設你休的日子是固定的 比方說修星期日=7.. 迴圈用餘數去算然後抽出來檢查.. 但是我覺得這方法不好.. 因為迴圈次數大... 可以的話用倍數去算... 迴圈次數將會大幅減少... 否則你要慢慢loop到31次嗎?... 我不清楚你對Java的熟悉程度, 你可以建立一個class.. 然後宣告一個公開的委派... 因為委派是方法的pointer, 還可以形成chain..... 然後在裡面填入相關的算法... 再來....!@#$%^&*( 好吧! darkangel老兄說的... 用牛刀殺雞, forget it!!!.... |
引用:
一般 i++ loop 的時間複雜度是 O(n),而像這種迴圈最大值很小(<100)的狀況下通常會比用倍數迴圈的 O(log n) 快。 另外,不應該在這裡考慮效能問題,瓶頸不太可能會出現在這。 以我n年的實務經驗,我覺得設計時有兩個重點,分享一下: 1. 不要過度設計 2. 不要在設計時考慮效能問題,不然容易失去重點 我不熟 java,不然我給的答案應該也是 loop + if/else。 |
所有的時間均為GMT +8。 現在的時間是06:18 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。