![]() |
||
Major Member
![]() 加入日期: Aug 2005
文章: 237
|
引用:
謝謝您的回答。 一、我把Jason Ju網友的程式碼放到eclipse中,如下,錯誤不少,不知該如何解決。 方便的話,可以給我全部的程式碼嗎?感恩! ![]() import java.util.Arrays; import java.util.HashSet; import java.util.Set; public class day3 { public static void main(String[] args) { // TODO Auto-generated method stub double[] dayHoursArry = { 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 }; 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 "); } } } } } 二、要從資料庫去讀取,還在研究中。 ![]()
__________________
"拋磚引玉"大家來談談,你用過免費又好用的程式 |
||||||||
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Mar 2000 您的住址: Taiwan
文章: 78
|
引用:
其實這是一個很簡單而且有助於訓練邏輯性的程式. 不過我看你應該是完全不會 java language 吧? 建議要從基本開始. 代碼:
import java.util.Arrays; import java.util.HashSet; import java.util.Set; //條件: //一、7休1 //二、14休2 //三、7天內的工時合計不可超過48小時 //四、14天內的工時合計不可超過80小時,若超過時顯示加班幾個小時 public class WorkingDayUtil { public WorkingDayUtil(){ } /** * counting * @param dayHoursArry */ 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) ); } } } /** * get summary from all elements in array * @param arry * @return */ public double getSum(final double[] arry){ double sum = 0; for(double d: arry) sum +=d; return sum; } /** * check the off days in day range * @param array */ 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 "); } } } /********************** test **********************/ public static void main(String[] args){ /* * {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} */ final double[] dayHoursArry = {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}; WorkingDayUtil wdu = new WorkingDayUtil(); wdu.count(dayHoursArry); } } 此文章於 2016-12-26 01:54 PM 被 Jason Ju 編輯. |
|||
![]() |
![]() |
Amateur Member
![]() 加入日期: Jun 2002 您的住址: 太陽系
文章: 32
|
建議你先把classspeed的程式看懂吧!
如果一直看不懂 你還是換工作吧! 引用:
__________________
PCDVD站長:擋廣吿的後果就是導致免費網站無以為繼! 在你享受自由網路的同時 自私的行為只會扼殺這個環境。 |
|
![]() |
![]() |
Major Member
![]() 加入日期: Aug 2005
文章: 237
|
引用:
初學者,請多多包涵。 感恩! ![]()
__________________
"拋磚引玉"大家來談談,你用過免費又好用的程式 |
|
![]() |
![]() |
Major Member
![]() 加入日期: Aug 2005
文章: 237
|
引用:
classspeed網友的程式碼, 我已經看懂了。 ![]()
__________________
"拋磚引玉"大家來談談,你用過免費又好用的程式 |
|
![]() |
![]() |
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 沒注意到連續天數的問題...
重構之後... 還是變成整個loop最快...Orz 這個答案跟classspeed網兄是一樣的... C# code: double?[] d = { 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0, 0 }; int limit = 7, keep = 0; Console.WriteLine("總計天數: {0}\n\r", d.Length); for (int i = 0; i < d.Length; i++) { if (d[i] != 0) keep++; else { if (keep >= limit) { Console.WriteLine("連續工作{0}天, 已達{1}天限制({2}日至{3}日)", keep, limit, i - keep + 1, i); // do something // if (d.Length - (i + 1) < limit) break; // end if } // end if keep = 0; } // end if } // end for 此文章於 2016-12-26 03:28 PM 被 vxr 編輯. |
![]() |
![]() |
Junior Member
![]() ![]() ![]() 加入日期: Jan 2002
文章: 864
|
引用:
怎麼感覺寫程式寫著寫著突然變成放閃了啊.. |
|
![]() |
![]() |
*停權中*
加入日期: Jul 2013
文章: 331
|
以下是開玩笑啦 ...
為什麼我有一種要替別的公司解決人事系統問題的感覺 ![]() ![]() 此文章於 2016-12-26 08:21 PM 被 micall.lee 編輯. |
![]() |
![]() |