![]() |
||
|
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
文章: 865
|
引用:
怎麼感覺寫程式寫著寫著突然變成放閃了啊.. |
|
|
|
|
*停權中*
加入日期: Jul 2013
文章: 331
|
以下是開玩笑啦 ...
為什麼我有一種要替別的公司解決人事系統問題的感覺 ![]() 此文章於 2016-12-26 08:21 PM 被 micall.lee 編輯. |
|
|