![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 板上的Java高手請教,勞工新制的工時計算
(https://www.pcdvd.com.tw/showthread.php?t=1119247)
|
---|
引用:
我是這樣的意思.. double[] a = { 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 = a.Length; int t = 7; for (int i = 1; t <= len; ) { var val = a[t - 1]; if (val == 0) Console.WriteLine("第{0}天 : 假日", t); // end if i++; t *= i; } // end if 顯然迴圈是大幅降低.. 不過如果摟主的條件是假日非固定性了.. 那將需要另外再評估... |
引用:
謝謝您的程式,把n改成i後就可以執行了。 只是我看不懂您的程式logic,方便解說說,感恩! :) |
抱歉哦,睡前迷迷糊糊的。
array裡的index打錯,index最大也打錯。 陣列[]裡應該是 i 不是 n 列印那行裡面的也是 i 不是 n for裡應該改成 i < 31或是直接用 i < array.length替代,就不會有30天或31天的問題。 沒實際跑過,有問題再上來問吧 : ) |
引用:
對的! 沒錯。 :) 引用:
謝謝您的回答。我真的只懂用Loop的來解決。 太難的,真的不會。 :) 引用:
謝謝您! loop + if/else,我才看得懂。 :) |
引用:
謝謝您! 方便解說,您這個程式的logic嗎?小弟看不太懂。 :) |
引用:
7休1。規定就是每7天一定要放一天。那天不一定是星期日。 |
引用:
int flag = 1; //計算你上班天數,從第一天開始算 for(int i = 0; i < array.length; i++, flag++){ //array.length就是你休假陣列長度,每走一圈,flag上班天數+1 if(array[i] == 0){ //當天上班時數為零,上班天數flag就會歸零 flag = 0; } if(flag > 6){ //上班天第七天就會顯示當天不符合規定,並列印 System.out.println("第" + (i+1) + "天不符合"); //[]初始從0開始算,轉成實際天數要+1 } } |
引用:
那我建議你以一個星期(7天)為一個單位.. 作為第一層loop 而且以倍數性增長 7, 14, 21, 28這樣.. 然後放入一個inner loop... 1-7 8-14 15-21 依此類推 只要抽出檢查發現有一天有假日就符合用break跳出inner loop... 不要乖乖真的跑loop到31次.. 那不是一個好作法.. 最簡單的理由就是有可能每一次的inner loop都跑完嗎?... 如果每次都跑完, 這甚麼鳥公司啊... 這出勤已經不是可以用血汗來形容了....:mad:... 違反勞基法, 要向勞檢單位檢舉...:tu:... 你要適切的符合真實世界情況... 好吧!.. 有人會覺得我機車... 小弟就是不想跑完那31次loop拉..>o<"" 當你掌握了這樣的算法.. 你再增加一個類似event_args之類的物件, 目的類似context.. 要用他做紀錄.. 為的就是要快速計算你後面的三個條件... |
引用:
:like: :like: :like: 太感謝了! |
引用:
謝謝您! 您的方法對我而言,真的是太難了。 :) |
所有的時間均為GMT +8。 現在的時間是01:26 PM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。