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

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

  回應
 
主題工具
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者傳說
一、沒import相關的package?
NetBean:按Alt+Shift+F
Eclipse:按Ctrl+Shift+O
不同版本可能有不同的組合鍵!

二、你要問自己那個資料陣列怎麼來的!


謝謝您的回答。

一、我把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 ");
}
}
}

}

}


二、要從資料庫去讀取,還在研究中。
     
      
舊 2016-12-26, 01:45 PM #41
回應時引用此文章
mor8離線中  
Jason Ju
Regular Member
 

加入日期: Mar 2000
您的住址: Taiwan
文章: 78
引用:
作者mor8
謝謝您的回答。

一、我把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
...


其實這是一個很簡單而且有助於訓練邏輯性的程式.
不過我看你應該是完全不會 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 編輯.
舊 2016-12-26, 01:52 PM #42
回應時引用此文章
Jason Ju離線中  
傳說
Amateur Member
 

加入日期: Jun 2002
您的住址: 太陽系
文章: 32
建議你先把classspeed的程式看懂吧!
如果一直看不懂
你還是換工作吧!

引用:
作者mor8
謝謝您的回答。

一、我把Jason Ju網友的程式碼放到eclipse中,如下,錯誤不少,不知該如何解決。
方便的話,可以給我全部的程式碼嗎?感恩!
__________________
PCDVD站長:擋廣吿的後果就是導致免費網站無以為繼!
在你享受自由網路的同時
自私的行為只會扼殺這個環境。
舊 2016-12-26, 02:03 PM #43
回應時引用此文章
傳說離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者Jason Ju
其實這是一個很簡單而且有助於訓練邏輯性的程式.
不過我看你應該是完全不會 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, weekEndDa...

初學者,請多多包涵。
感恩!
舊 2016-12-26, 02:11 PM #44
回應時引用此文章
mor8離線中  
mor8
Major Member
 

加入日期: Aug 2005
文章: 237
引用:
作者傳說
建議你先把classspeed的程式看懂吧!
如果一直看不懂
你還是換工作吧!

classspeed網友的程式碼,
我已經看懂了。
舊 2016-12-26, 02:14 PM #45
回應時引用此文章
mor8離線中  
vxr
Elite Member
 
vxr的大頭照
 

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

沒注意到連續天數的問題...
重構之後...
還是變成整個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 編輯.
舊 2016-12-26, 03:24 PM #46
回應時引用此文章
vxr離線中  
tbsky
Junior Member
 

加入日期: Jan 2002
文章: 864
引用:
作者classspeed
其實是蠻喜歡討論這個的,
早上睡醒還跟老婆分享這件事,
結果被她抓到 i 變 n 跟 i < 30 的問題XD
說我沒有驗證就回XD


怎麼感覺寫程式寫著寫著突然變成放閃了啊..
舊 2016-12-26, 06:34 PM #47
回應時引用此文章
tbsky離線中  
micall.lee
*停權中*
 
micall.lee的大頭照
 

加入日期: Jul 2013
文章: 331
以下是開玩笑啦 ...

為什麼我有一種要替別的公司解決人事系統問題的感覺

此文章於 2016-12-26 08:21 PM 被 micall.lee 編輯.
舊 2016-12-26, 08:20 PM #48
回應時引用此文章
micall.lee離線中  


    回應


POPIN
主題工具

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

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



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


vBulletin Version 3.0.1
powered_by_vbulletin 2025。