PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 七嘴八舌異言堂
帳戶
密碼
 

  回應
 
主題工具
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
板上的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要怎麼寫,才能檢查上面的陣列是否符合,若不符合,請顯示哪天到哪天不符合,感謝!!!
     
      
舊 2016-12-25, 10:26 PM #1
回應時引用此文章
mor8離線中  
vxr
Elite Member
 
vxr的大頭照
 

加入日期: May 2002
您的住址: 地球的上面..
文章: 5,854
Exclamation

如果是我, 會考慮OOD來降低複雜度...
在我看來你提供的條件都是策略..
應該用STRATEGY來拆開算法(先不去管要不要合併TEMPLATE METHOD, 我沒有注意到有特別的流程)...
連續檢查的情況下可以做成一條chain...
可以把職責做成Responsibility of chain連續傳遞...
我不希望充斥著一大堆的if/else或著switch, ugly code. terrible...
免不了一定會有factory的設計來操作...
也許思考上我可能還有些缺失...

當然, 可以裝B應用結構化程序方式慢慢折騰...
 

此文章於 2016-12-25 11:07 PM 被 vxr 編輯.
舊 2016-12-25, 11:04 PM #2
回應時引用此文章
vxr離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者vxr
如果是我, 會考慮OOD來降低複雜度...
在我看來你提供的條件都是策略..
應該用STRATEGY來拆開算法(先不去管要不要合併TEMPLATE METHOD, 我沒有注意到有特別的流程)...
連續檢查的情況下可以做成一條chain...
可以把職責做成Responsibility of chain連續傳遞...
我不希望充斥著一大堆的if/else或著switch, ugly code. terrible...
免不了一定會有factory的設計來操作...
也許思考上我可能還有些缺失...

當然, 可以裝B應用結構化程序方式慢慢折騰...

你說的那些,我只會用if/else來處理,其他的我都不懂。
我是想說,先檢查條件1(7休1),若不符合,就顯示哪裡不符合。
然後再檢查條件2,以此類推。
我大概只會最簡單的方式。
舊 2016-12-25, 11:16 PM #3
回應時引用此文章
mor8離線中  
vxr
Elite Member
 
vxr的大頭照
 

加入日期: May 2002
您的住址: 地球的上面..
文章: 5,854
Exclamation

引用:
作者mor8
你說的那些,我只會用if/else來處理,其他的我都不懂。
我是想說,先檢查條件1(7休1),若不符合,就顯示哪裡不符合。
然後再檢查條件2,以此類推。
我大概只會最簡單的方式。

這個結構化程序的設計顯然缺失就是大量的條件判斷...
如果對OOAD很生疏, 結構化程序設計不是不行...
只是我覺得代碼會變得相當複雜....
你是否有接觸過一些OO的基本原則??..
比方說有一個叫 "駱駝特馬的" 這個王八創造了SOLID-5大原則...

雖然像是駱駝特馬的或著馬的發拉(這個傢伙特別混帳.....)等等, 這些王八專家總是創造一大堆新名詞來稿死人...

此文章於 2016-12-25 11:22 PM 被 vxr 編輯.
舊 2016-12-25, 11:21 PM #4
回應時引用此文章
vxr離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者vxr
這個結構化程序的設計顯然缺失就是大量的條件判斷...
如果對OOAD很生疏, 結構化程序設計不是不行...
只是我覺得代碼會變得相當複雜....
你是否有接觸過一些OO的基本原則??..
比方說有一個叫 "駱駝特馬的" 這個王八創造了SOLID-5大原則...

雖然像是駱駝特馬的或著馬的發拉(這個傢伙特別混帳.....)等等, 這些王八專家總是創造一大堆新名詞來稿死人...

那能否教我條件1的7休1,用IF的方式,剩下我自己慢慢摸索,謝謝!
舊 2016-12-25, 11:47 PM #5
回應時引用此文章
mor8離線中  
whatsnew
Senior Member
 
whatsnew的大頭照
 

加入日期: Jun 2002
文章: 1,464
以1來說笨蛋一點不就對數列做index
直接loop 31(n=1:31)次,或是根據數列長度做變化
每次loop (0+n)~(6+n),取出相對應的數列
再對這7個數字尋找0出現次數
0次的話就輸出date(n)~date(6+n) 相對應的日期
我應該沒誤會樓主的意思吧@@

此文章於 2016-12-26 12:24 AM 被 whatsnew 編輯.
舊 2016-12-26, 12:22 AM #6
回應時引用此文章
whatsnew離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
我覺得先針對要解決的問題寫 code,比為了 DP 而 DP 好。
樓主現在問題的重點是算法,不是設計。

我覺得這種小東西用到 strategy 就已經是在用牛刀殺雞了,再加 factory 感覺就像拿電鋸了,如果你有一兩百隻雞要殺,這是不錯的選擇。

可是我覺得樓主不過就只想殺一隻雞而已...

__________________
滿招損 謙受益
舊 2016-12-26, 01:07 AM #7
回應時引用此文章
darkangel離線中  
classspeed
Regular Member
 

加入日期: Feb 2005
文章: 71
Post

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) + "天不符合");
 }
}

此文章於 2016-12-26 01:10 AM 被 classspeed 編輯.
舊 2016-12-26, 01:07 AM #8
回應時引用此文章
classspeed離線中  
vxr
Elite Member
 
vxr的大頭照
 

加入日期: May 2002
您的住址: 地球的上面..
文章: 5,854
Exclamation

引用:
作者mor8
那能否教我條件1的7休1,用IF的方式,剩下我自己慢慢摸索,謝謝!

如果條件一的問題..
我的想法是這樣...
我猜你的問題是抽出來看是否符合7休一天的條件...
假設你休的日子是固定的
比方說修星期日=7..
迴圈用餘數去算然後抽出來檢查..
但是我覺得這方法不好..
因為迴圈次數大...
可以的話用倍數去算...
迴圈次數將會大幅減少...
否則你要慢慢loop到31次嗎?...

我不清楚你對Java的熟悉程度, 你可以建立一個class..
然後宣告一個公開的委派...
因為委派是方法的pointer, 還可以形成chain.....
然後在裡面填入相關的算法...
再來....!@#$%^&*(
好吧! darkangel老兄說的...
用牛刀殺雞, forget it!!!....

此文章於 2016-12-26 01:23 AM 被 vxr 編輯.
舊 2016-12-26, 01:22 AM #9
回應時引用此文章
vxr離線中  
darkangel
Major Member
 
darkangel的大頭照
 

加入日期: Aug 2001
文章: 211
引用:
作者vxr
如果條件一的問題..
因為迴圈次數大...
可以的話用倍數去算...
迴圈次數將會大幅減少...
否則你要慢慢loop到31次嗎?...



一般 i++ loop 的時間複雜度是 O(n),而像這種迴圈最大值很小(<100)的狀況下通常會比用倍數迴圈的 O(log n) 快。

另外,不應該在這裡考慮效能問題,瓶頸不太可能會出現在這。

以我n年的實務經驗,我覺得設計時有兩個重點,分享一下:

1. 不要過度設計
2. 不要在設計時考慮效能問題,不然容易失去重點

我不熟 java,不然我給的答案應該也是 loop + if/else。
__________________
滿招損 謙受益

此文章於 2016-12-26 02:11 AM 被 darkangel 編輯.
舊 2016-12-26, 02:10 AM #10
回應時引用此文章
darkangel離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是02:50 AM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。