PTA題目集4~6總結

来源:https://www.cnblogs.com/rccxs/archive/2023/04/30/17364904.html
-Advertisement-
Play Games

一前言 題目集四主要考察的是對LocalDate,ArrayList,HashSet等Java自帶類的使用 題目集五主要考察的是對正則表達式的使用,以及對其題目集三的時間題目的進行類結構的改變 題目集六隻有一道題,主要是對題目集四的第一題進行加大難度 總的來說這幾次的題目量比前面幾次都要少,但是題目 ...


一前言

  題目集四主要考察的是對LocalDate,ArrayList,HashSet等Java自帶類的使用

  題目集五主要考察的是對正則表達式的使用,以及對其題目集三的時間題目的進行類結構的改變

  題目集六隻有一道題,主要是對題目集四的第一題進行加大難度

  總的來說這幾次的題目量比前面幾次都要少,但是題目難度開始加深。

二設計與分析

   由於部分題目過於簡單,所以這裡主要是對題目集四的7-1,題目集五的7-5,7-6,題目集六的7-1進行分析

   題目集四7-1:當時見到這道題時認為難度較大且複雜,所以在這次題目集時放棄了寫這道題,但由於題目集六的7-1題目是在此基礎上的加深所以主要在後面分析

   題目集五7-5:此題目主要是我們將前面題目集三的7-3的進行如下類圖的類結構更改

所以我們主要是對類圖進行分析,我們發現各個類之間是聚合的關係,每一個類與類之間聚合,所以我們按照此類圖設計類時應該由year到month到day到DateUtil之間一個個寫。最後的題目要求的主要功能則在DateUtil這裡實現,因為這裡是最後一個聚合。

代碼如下:

   

  1 import java.util.Scanner;
  2 public class Main {
  3     public static void main(String[] args) {
  4         Scanner input = new Scanner(System.in);
  5         int year = 0;
  6         int month = 0;
  7         int day = 0;
  8 
  9         int choice = input.nextInt();
 10 
 11         if (choice == 1) { // test getNextNDays method
 12             int m = 0;
 13             year = Integer.parseInt(input.next());
 14             month = Integer.parseInt(input.next());
 15             day = Integer.parseInt(input.next());
 16 
 17             DateUtil date = new DateUtil(year, month, day);
 18 
 19             if (!date.checkInputValidity()) {
 20                 System.out.println("Wrong Format");
 21                 System.exit(0);
 22             }
 23 
 24             m = input.nextInt();
 25 
 26             if (m < 0) {
 27                 System.out.println("Wrong Format");
 28                 System.exit(0);
 29             }
 30             System.out.println(date.getNextNDays(m).showDate());
 31         } else if (choice == 2) { // test getPreviousNDays method
 32             int n = 0;
 33             year = Integer.parseInt(input.next());
 34             month = Integer.parseInt(input.next());
 35             day = Integer.parseInt(input.next());
 36 
 37             DateUtil date = new DateUtil(year, month, day);
 38 
 39             if (!date.checkInputValidity()) {
 40                 System.out.println("Wrong Format");
 41                 System.exit(0);
 42             }
 43 
 44             n = input.nextInt();
 45 
 46             if (n < 0) {
 47                 System.out.println("Wrong Format");
 48                 System.exit(0);
 49             }
 50             System.out.println(date.getPreviousNDays(n).showDate());
 51         } else if (choice == 3) {    //test getDaysofDates method
 52             year = Integer.parseInt(input.next());
 53             month = Integer.parseInt(input.next());
 54             day = Integer.parseInt(input.next());
 55 
 56             int anotherYear = Integer.parseInt(input.next());
 57             int anotherMonth = Integer.parseInt(input.next());
 58             int anotherDay = Integer.parseInt(input.next());
 59 
 60             DateUtil fromDate = new DateUtil(year, month, day);
 61             DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay);
 62 
 63             if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
 64                 System.out.println(fromDate.getDaysofDates(toDate));
 65             } else {
 66                 System.out.println("Wrong Format");
 67                 System.exit(0);
 68             }
 69         }
 70         else{
 71             System.out.println("Wrong Format");
 72             System.exit(0);
 73         }
 74     }
 75 public static class Day {
 76     int value;
 77     int mon_maxnum[]= new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};//數組儲存各月份天數
 78     Month month = new Month();
 79     Day(){
 80 
 81     }
 82     Day(int yearValue,int monthValue,int dayValue){
 83         value = dayValue;
 84         month = new Month( yearValue, monthValue);
 85     }
 86 
 87     public void setValue(int value) {
 88         this.value = value;
 89     }
 90 
 91     public int getValue() {
 92         return value;
 93     }
 94 
 95     public Month getMonth() {
 96         return month;
 97     }
 98 
 99     public void setMonth(Month month) {
100         this.month = month;
101     }
102     public void resetMin(){
103         value = 1;
104     }
105     public void resetMax(){
106           if(month.year.isLeapYear()){
107             mon_maxnum[2]=29;
108         }else{
109               mon_maxnum[2]=28;
110           }
111         value = mon_maxnum[month.value];
112     }
113     boolean validate(){
114         if(value>mon_maxnum[month.value]||value<1){
115             return false;
116         }else{
117             return true;
118         }
119     }
120     public void dayIncrement(){
121         value++;
122     }
123     public void dayReduction(){
124         value--;
125     }
126 }
127 public static class Month {
128     int value;
129     Year year = new Year();
130     Month(){
131 
132     }
133     Month(int yearValue,int monthValue){
134              value = monthValue;
135              year.setValue(yearValue);
136     }
137 
138     public void setValue(int value) {
139         this.value = value;
140     }
141 
142     public int getValue() {
143         return value;
144     }
145 
146     public Year getYear() {
147         return year;
148     }
149 
150     public void setYear(Year year) {
151         this.year = year;
152     }
153     public void resetMin(){
154         value = 1;
155     }
156     public  void resetMax(){
157         value = 12;
158     }
159     boolean validate(){
160         if(value>12||value<1){
161             return false;
162         }else{
163             return true;
164         }
165     }
166     public void monthIncrement(){
167         value++;
168     }
169     public void montReduction(){
170         value--;
171     }
172 }
173 public static class Year {
174     int value;
175       Year(){
176 
177       }
178       Year(int value){
179           this.value = value;
180       }
181 
182     public int getValue() {
183         return value;
184     }
185 
186     public void setValue(int value) {
187         this.value = value;
188     }
189     boolean validate(){
190         if(value>2050||value<1900){
191             return false;
192         }else{
193             return true;
194         }
195     }
196     boolean isLeapYear(){
197         if((value%4==0&&value%100!=0)||value%400==0){
198             return true;
199         }
200         return false;
201     }
202     void yearIncrement(){
203           value++;
204     }
205     void yearReduction(){
206           value--;
207     }
208 }
209 public static class DateUtil {
210     Day day = new Day();
211     DateUtil(){
212 
213     }
214     DateUtil(int y,int m,int d){
215         day = new Day(y,m,d);
216     }
217 
218     public Day getDay() {
219         return day;
220     }
221 
222     public void setDay(Day day) {
223         this.day = day;
224     }
225     boolean checkInputValidity(){
226         if(day.month.year.isLeapYear()){
227             day.mon_maxnum[2]=29;
228         }
229         if(day.month.year.value<1900||day.month.year.value>2050||day.month.value<1||day.month.value>12||day.value<1||day.value>day.mon_maxnum[day.month.value]){
230             return false;
231         }
232         else{
233             return true;
234         }
235     }
236     boolean compareDates(DateUtil date){
237         if(this.day.month.year.value>date.day.month.year.value){
238             return true;
239         }else if(this.day.month.year.value==date.day.month.year.value){
240             if(this.day.month.value>date.day.month.value){
241                 return true;
242             }else if(this.day.month.value==date.day.month.value){
243                 if(this.day.value>date.day.value){
244                     return true;
245                 }else{
246                     return false;
247                 }
248             }
249         }else if(this.day.month.year.value<date.day.month.year.value){
250             return false;
251         }
252         return false;
253     }
254     boolean equalTwoDates(DateUtil date){
255         if(this.day.month.year.value==date.day.month.year.value&&this.day.month.value==date.day.month.value&&this.day.value==date.day.value){
256             return true;
257         }else{
258             return false;
259         }
260     }
261 
262     DateUtil getNextNDays(int n){
263         int i;
264         for(i=0;i<n;i++) {
265             if (day.month.year.isLeapYear()) {
266                 day.mon_maxnum[2] = 29;
267             } else {
268                 day.mon_maxnum[2] = 28;
269             }
270             if (day.value != day.mon_maxnum[day.month.value]) {
271                 day.dayIncrement();
272 
273             } else {
274                 if (day.month.value == 12) {
275                     day.month.resetMin();
276                     day.resetMin();
277                     day.month.year.yearIncrement();
278                 } else {
279                     day.resetMin();
280                     day.month.monthIncrement();
281                 }
282             }
283         }
284         return this;
285     }
286     DateUtil getPreviousNDays(int n){
287         int i;
288         for(i=0;i<n;i++){
289             if(day.month.year.isLeapYear()){
290                 day.mon_maxnum[2]=29;
291             }else{
292                 day.mon_maxnum[2]=28;
293             }
294             if(day.value!=1){
295                 day.dayReduction();//判斷月份是否需要變化
296 
297             }else{
298                 if(day.month.value==1){//判斷年份是否需要變化
299                     day.month.value=12;
300                     day.value=31;
301                     day.month.year.yearReduction();
302                 }else{
303                     day.month.montReduction();
304                     day.value = day.mon_maxnum[day.month.value];
305                 }
306             }
307         }
308         return this;
309     }
310     int getDaysofDates(DateUtil date){
311         int i,n=0;
312         int j=365,k=366;
313         if(this.compareDates(date)){//比較兩個日期判斷是否進行進行更換操作
314             if(this.day.month.year.value==date.day.month.year.value){
315                 if(day.month.year.isLeapYear()){
316                     day.mon_maxnum[2]=29;
317                 }else{
318                     day.mon_maxnum[2]=28;
319                 }
320                 for(i=date.day.month.value+1;i<this.day.month.value;i++){
321                     n=n+day.mon_maxnum[i];
322                 }
323                 n=n+day.mon_maxnum[date.day.month.value]-date.day.value+this.day.value;
324             }else{
325                 for(i=date.day.month.year.value+1;i<this.day.month.year.value;i++){
326                     Year flag = new Year(i);
327                     if(flag.isLeapYear()){
328                         n=n+k;
329                     }else{
330                         n=n+j;
331                     }
332                 }
333                 for(i=date.day.month.value+1;i<=12;i++){
334                     if(day.month.year.isLeapYear()){
335                         day.mon_maxnum[2]=29;
336                     }else{
337                         day.mon_maxnum[2]=28;
338                     }
339                     n=n+day.mon_maxnum[i];
340                 }
341                 for(i=1;i<this.day.month.value;i++){
342                     if(day.month.year.isLeapYear()){
343                         day.mon_maxnum[2]=29;
344                     }else{
345                         day.mon_maxnum[2]=28;
346                     }
347                     n=n+day.mon_maxnum[i];
348                 }
349                 n=n+day.mon_maxnum[date.day.month.value]-date.day.value+this.day.value;
350             }
351         }else{
352             int z,x,c;//中間變數更換日期
353             z=this.day.month.year.value;
354             x=this.day.month.value;
355             c=this.day.value;
356             this.day.month.year.value=date.day.month.year.value;
357             this.day.month.value=date.day.month.value;
358             this.day.value=date.day.value;
359             if(this.day.month.year.value==z){
360                 if(day.month.year.isLeapYear()){
361                     day.mon_maxnum[2]=29;
362                 }else{
363                     day.mon_maxnum[2]=28;
364                 }
365                 if(this.day.value==c){//判斷是否日期相等
366                     n=0;
367                 }else {
368                     for(i=x+1;i<this.day.month.value;i++){
369                     n=n+day.mon_maxnum[i];
370                        }
371                   n=n+day.mon_maxnum[x]-c+this.day.value;
372                 }
373             }else{
374                 for(i=z+1;i<this.day.month.year.value;i++){
375                     Year flag = new Year(i);
376                     if(flag.isLeapYear()){
377                         n=n+k;
378                     }else{
379                         n=n+j;
380                     }
381                 }
382                 for(i=x+1;i<=12;i++){
383                     if(day.month.year.isLeapYear()){
384                         day.mon_maxnum[2]=29;
385                     }else{
386                         day.mon_maxnum[2]=28;
387                     }
388                     n=n+day.mon_maxnum[i];
389                 }
390                 for(i=1;i<this.day.month.value;i++){
391                     if(day.month.year.isLeapYear()){
392                         day.mon_maxnum[2]=29;
393                     }else{
394                         day.mon_maxnum[2]=28;
395                     }
396                     n=n+day.mon_maxnum[i];
397                 }
398                 n=n+day.mon_maxnum[x]-c+this.day.value;
399             }

              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 痞子衡嵌入式半月刊: 第 76 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
  • (Linux安裝軟體) 前言 這期呢主要說一說Linux中包軟體管理相關命令,這一期的命令雖然只有兩個。但 軟體包的安裝和卸載都是我們平常最常用的,需要熟練掌握。 rpm和yum 是CentOS 主要的包軟體管理。 兩個命令各有用處,①yum需要互聯網,yum會去網上的yum源獲取所需的軟體包 ② ...
  • 前言 本篇文章主要介紹的關於本人在使用MySql記錄筆記的一些使用方法和經驗,溫馨提示,本文有點長,約1.5w字,幾十張圖片,建議收藏查看。 一、MySql安裝 下載地址:https://dev.mysql.com/downloads/ 在安裝MySql之前,查看是否以及安裝過MySql,如果已經安 ...
  • CSS知識點總結 文章內容可能較多且雜亂,可以查看頁面右方的目錄,以及使用Ctrl+F搜索頁面內容進行內容定位。 常用屬性 推薦搭配文檔使用,可以複製屬性名,到文檔查看該屬性對應的可選值。 👉MDN Web Docs 盒模型 寬度:width 高度:height 邊框:border 圓角:bord ...
  • 1、四層結構 viewer --> datasources(DataSourceCollection類型) --> datasource --> entities(EntityCollection類型) --> entity 需要學習的方向是:只需要註意每個層與層之間的關係和entity實例如何創建 ...
  • 一、前言 第二次在博客園上發佈面向對象程式設計題目集的總結博客。經過幾周的學習,面向對象的理念更加深入。雖然已經學了些面向對象程式設計,學好這部分內容還是有較大難度。 關於知識點 本次的題目集所體現的知識點已經不僅限於Java的語法知識,還需要考慮設計問題,不能看到題目就開始進行代碼編寫,需要考慮類 ...
  • B/S 結構系統的 緩存機制(Cookie) 以及基於 cookie 機制實現 oa 十天免登錄的功能 @ 每博一文案 嘿,大風揚起的沉沙中,每一粒都有它的必然性,而每個人的命運都有自己的因果, 為自己的選擇負責承擔或好或壞的結果。是成年人的必修課。 有人請教索羅斯投資的指導,我的父親一直追隨你炒股 ...
  • JSP 的本質原理解析:"編寫的時候是JSP,心裡想解讀的是 java 源碼" @ 每博一文案 活明白的人,一生只做好了這兩件事: 每個瞬間都充滿了選擇和承擔,就算面前是一座獨木橋,也必須選擇是前進後退,亦或是留在原地此時此刻你所經歷的一切。 這是過往無數個選擇後的結果,哪些小的選擇匯聚在了一起,最 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...