![]() |
||
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 如果是.NET的情況下..
因為java這幾年落後.NET有點不少.. (我朋友說都是那個ORACLE... ![]() 我不曉得java能不能做到類似.. (第八版也許可以) .NET的使用者可以透過LINQ.. 雖然殺雞用牛刀, 可以PLINQ... 因為.NET很早發展lambda運算式和expression支持.. 透過這些features可以更快速的達成要求... |
|||||||
![]() |
![]() |
Silent Member
加入日期: Mar 2012
文章: 0
|
不過如果每個月都重新將工作日回復成第一天的話,
會不會有月尾接月初而沒有7休1的漏洞? 純粹好奇而已。 |
||
![]() |
![]() |
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 引用:
原本沒有打算寫, 只是想嘴砲而已.. ![]() 不過還是coding一次給你參考一下: int holidays = 0; double?[] d = { 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 }; int len = d.Length + 4; int unit = 7; int start = 0; int loop = 0; Console.WriteLine("總計天數: {0}", d.Length); while (start < len) { start += unit; for (int j = start - unit; j < start && j < d.Length; j++) { if (d[j] == 0) { holidays++; Console.WriteLine("第{0}天為假日", j + 1); break; } // end if loop++; } // for } // end for Console.WriteLine("七休一計算值: {0}", holidays); Console.WriteLine("迴圈記數值: {0}", loop); holiday就相當於一個參數保留.. 可以拿他用來計算第二個條件... 如果OOP還可以, 你可以設計一次類, 放置一些所需的屬性 在過程中來存放以利後面三個條件快速計算操作的參數值... 此文章於 2016-12-26 10:38 AM 被 vxr 編輯. |
|
![]() |
![]() |
*停權中*
加入日期: Oct 2012 您的住址: 晚上黑壓壓一片的那區
文章: 99
|
引用:
會 一個月的最後七天休第一天 下個月的第一個七天休最後一天 中間不就超過七天了 |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Mar 2000 您的住址: Taiwan
文章: 78
|
代碼:
public void count(final double[] dayHoursArry){ for(int i = 0; i < dayHoursArry.length; i ++){ final int startDate = i; //三、7天內的工時合計不可超過48小時 final int weekEndDate = i+6; final double[] newArry7days = Arrays.copyOfRange(dayHoursArry, startDate, weekEndDate); final double weekdayHours = getSum(newArry7days); System.out.println("day " + startDate + " to day " + weekEndDate + " hours = " + weekdayHours); chekcOffDays(newArry7days); if(weekdayHours > 48) { System.out.println(" ==> over " + (weekdayHours-48) ); } //四、14天內的工時合計不可超過80小時,若超過時顯示加班幾個小時 final int twoWeekEndDate = i+13; final double[] newArry14days = Arrays.copyOfRange(dayHoursArry, startDate, twoWeekEndDate); final double twoWeekdayHours = getSum(newArry14days); System.out.println("day " + startDate + " to day " + twoWeekEndDate + " hours = " + twoWeekdayHours); chekcOffDays(newArry14days); if(twoWeekdayHours > 80){ System.out.println(" ==> over " + (twoWeekdayHours-80) ); } } } public double getSum(final double[] arry){ double sum = 0; for(double d: arry) sum +=d; return sum; } public static void chekcOffDays(final double[] array) { //一、7休1 if(array.length == 7 && !Arrays.asList(array).contains(0)) System.out.println("7天未休1 "); //二、14休2 if(array.length == 14){ if(Arrays.asList(array).contains(0)){ Set dupes = new HashSet(); for (double d : array) { if(d == 0 && !dupes.add(d)) break; System.out.println("14天僅休1 "); } }else { System.out.println("14天未休2 "); } } } |
![]() |
![]() |
Senior Member
![]() ![]() ![]() 加入日期: Sep 2001 您的住址: K
文章: 1,498
|
個人小意見,以下四個條件不能只看當月吧,
要從新制實施日或員工到職日當天開始勾稽, 所以要是我會在每天工時之外另加flag判斷, 以確定當天工時是否被勾稽過, 然後程式就每天至少跑一次更新狀況即可。 至於怎麼判斷...if處理就好,一天一次, 就算幾萬人也不會花上太多時間。 引用:
|
|
![]() |
![]() |
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 引用:
sorry.. 我想了一下.. inner loop的j值倒著算會更好... 此文章於 2016-12-26 11:08 AM 被 vxr 編輯. |
|
![]() |
![]() |
Golden Member
![]() ![]() ![]() ![]() 加入日期: Feb 2004 您的住址: 從來處來
文章: 2,762
|
引用:
沒看你的程式,但看你的描述,如果是 0 8 8 8 8 8 8 8 8 8 8 8 8 0 這樣工作及假日分配,是否你的程式會判為「符合七休一」?但實際上這樣違反七休一了。 |
|
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Mar 2000 您的住址: Taiwan
文章: 78
|
基本上我不會預設哪天休假日, 只要去檢查每個 7 天及 14 天 range 有無抵觸均可. 這樣的案例, 效能跟要套用的 pattern 一定不會是優先考量, 架構隨 biz rule 撰寫, 好理解好維護還更重要.
|
![]() |
![]() |
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 引用:
以七天為一個單位... 第一個禮拜: 0 8 8 8 8 8 8 第二個禮拜: 8 8 8 8 8 8 0 這樣違反七休一?... ![]() 小弟只是依照樓主的條件計算.. |
|
![]() |
![]() |