iT邦幫忙

0

TQC+ 物件導向程式語言Java 407 隨機抽樣工作日

  • 分享至 

  • xImage

請問程式碼該怎麼修改,求高手幫助, 程式一直跳出錯誤

  1. 題目說明:
    請開啟C:\ANS.CSF\JP04資料夾中的JPD04.java進行編寫。依下列題意進行作答:輸入數字做為西元年份及亂數種子,取得及輸出該年一個工作日日期,使輸出值符合題意要求。檔案名稱請另存新檔為JPA04.java,儲存於C:\ANS.CSF\JP04資料夾,再進行評分。
  2. 設計說明:
    (1) 請撰寫程式,輸入一個2000-2018之間的數值,請檢查不可超出2000-2018的邊界。
    (2) 此數值做為西元年份及亂數種子,取得一個工作日日期並輸出,工作日定義是週一至週五,輸出格式如:【2018/09/21】。
    (3) 需使用java.time.LocalDate物件,分別設定當年度1月1日和12月31日,並使用random.nextInt函式從1月1日和12月31日中隨機產生一個日期。
    (4) 若產生日期不爲工作日,則輸出下週一(例如產生日期是2月13日週六,則輸出2月15日週一)。
  3. 輸入輸出:
    輸入說明
    一個2000-2018之間的數值,做為西元年份及亂數種子
    輸出說明
    一個工作日日期

import java.util.Calendar;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
import java.text.SimpleDateFormat;

public class JPA04 {

public static void main(String[] args) {
	Random rand = new Random();
	int year = 0;
	List<String> result = new ArrayList<>();
	

	try {
		Scanner sc = new Scanner(System.in);
		year = sc.nextInt();
		rand.setSeed(year);
		sc.close();
		// 
		if (year > 2018 || year < 2000 ) {
			throw new Exception() ;
		}
		System.out.print(year + ":");
		
        while (result.size() < 10 ) {
        	Date ans = randomDateBetweenMinAndMax(year,rand); 
        	SimpleDateFormat df = new SimpleDateFormat("M/d");
        	String dayString  = String.valueOf(df.format(ans)) ;
        	
        	if ( valiWorkDay(ans) && ! result.contains(dayString)  )
        		result.add(dayString);
        }
        
        result.forEach( x ->System.out.print(x + " ") );      
		} catch (Exception ex) {
		     System.out.print("error");
	}
}
    public static Date randomDateBetweenMinAndMax(int year , Random rand) {
    	Calendar calendar = Calendar.getInstance();
    	
    	calendar.set(year,0,1) ;
    	calendar.set(Calendar.HOUR_OF_DAY,0) ;
    	calendar.set(Calendar.MINUTE,0) ;
    	calendar.set(Calendar.SECOND,0) ;
    	long min = calendar.getTime().getTime();
    	
    	
    	calendar.set(year,11,31) ;
    	calendar.set(Calendar.HOUR_OF_DAY,23) ;
    	calendar.set(Calendar.MINUTE,59) ;
    	calendar.set(Calendar.SECOND,59) ;
    	long max = calendar.getTime().getTime();
    	
    	double randomDate = rand.nextDouble() * (max - min) + min ;
    	calendar.setTimeInMillis(Math.round(randomDate));
    	return calendar.getTime();
    	
    	
    }

    	public static boolean valiWorkDay (Date date ) {
    		Calendar cl = Calendar.getInstance();
    		cl.setTime(date);
    		return !(cl.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cl.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY);
    

}

}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-10-05 21:56:25

執行很好呀
不但沒有錯誤
原題目只要1個日期,這程式碼給你10個日期
https://ithelp.ithome.com.tw/upload/images/20221005/20001787m8n2SDG8J3.png

我要發表回答

立即登入回答