首页 > 其他分享 >PTA总结报告2

PTA总结报告2

时间:2023-04-30 17:22:07浏览次数:54  
标签:date1 总结报告 int PTA getValue getDay day getMonth

 

相较于前一轮的三次作业,这次难了不止一点。这次的作业有了封装,正则表达式,聚合模式的使用,以及一个复杂的点菜系统。

第四次作业:

 这次的作业真的是惨不忍睹,这次的pta也是将将及格了,这次作业的7-1是第一道较为复杂的题目,由于错误的估计题目难度和自身的惰性,我没有留够时间来写第一题,导致我只写了一部分类和方法,主函数才动手没多少。

而其他几题是对算法的改进,我通过学习一些较为优秀的算法,完成了大部分内容。

第五次作业:

这次的两个计算天数的题目需要用到聚合这一模式,通过学习,我尝试开始写这道题目。

 这种模式的聚合要加上一连串的的前缀,写起来确实不方便。

    while(date2.getDay().getMonth().getYear().getValue() != date1.getDay().getMonth().getYear().getValue()||
                        date2.getDay().getMonth().getValue()!=date1.getDay().getMonth().getValue()||
                        date2.getDay().getValue()!=date1.getDay().getValue()) {
                    
                     if(date1.getDay().getMonth().getValue()==12&&date1.getDay().getValue()==31) {
                         date1.getDay().getMonth().getYear().yearIncrement();//date1.year++;
                         date1.getDay().getMonth().resetMin(); // date1.month=1;
                        date1.getDay().resetMin() ;
                        
                     }
                     else if(date1.getDay().getMonth().getYear().isLeapYear()&&date1.getDay().getMonth().getValue() == 2
                             &&date1.getDay().getValue()==29) {//是闰年且2月29号
                         date1.getDay().getMonth().monthIncreament(); // date1.month++;
                         date1.getDay().resetMin();//day=1;
                     }
                      else if(date1.getDay().getMonth().getYear().isLeapYear()&&date1.getDay().getMonth().getValue() == 2 && date1.getDay().getValue() == 28) {//是闰年且2月28号
                          date1.getDay().dayIncreament();  //day++;
                     }
                     else {
                         if( date1.getDay().getValue() == getDay().mon_maxnum [this.getDay().month.getValue()-1]){
                             date1.getDay().getMonth().monthIncreament();  // month++;
                             date1.getDay().resetMin();   //day=1;
                         }
                         else {
                             date1.getDay().dayIncreament();//day++
                         }
                     }
             i++;        
            }
            
        }
        return i;
    }
    }

 

 

 

题目将Year、Month、Day、DateUtil一层一层聚合,在DateUtil中运用day.getmonth().getvalue()的形式访问,通过一层一层访问来调用Year、Month、Day,实现多个相关类之间的相互调用,相较于前一个题目中的方法,本题目的聚合方法更加方便简单,Year、Month、Day全部在DateUtil里聚合,直接通过访问DateUtil来调用Year、Month、Day,使代码一目了然,清晰简洁,更加方便书写,是对前一个题目聚合方法的一种改进。

 

	while(date2.getYear().getValue() != date1.getYear().getValue()||
	    				date2.getMonth().getValue()!=date1.getMonth().getValue()||
	    				date2.getDay().getValue()!=date1.getDay().getValue()) {
	    			
	    	    	 if(date1.getMonth().getValue()==12&&date1.getDay().getValue()==31) {
	    	    		 date1.getYear().yearIncrement();//date1.year++;
	    	    		 date1.getMonth().resetMin(); // date1.month=1;
	    	    		 date1.getDay().setValue(1) ;//day = 1
	    	    		
	    	    	 }
	    	    	 else if(date1.getYear().isLeapYear()&&date1.getMonth().getValue() == 2
		            		 &&date1.getDay().getValue()==29) {//是闰年且2月29号
	    	    		 date1.getMonth().monthIncreament(); // date1.month++;
	    	    		 date1.getDay().setValue(1) ;//day=1;
	    	    	 }
	    	          else if(date1.getYear().isLeapYear()&&date1.getMonth().getValue() == 2 && date1.getDay().getValue() == 28) {//是闰年且2月28号
	    	        	  date1.getDay().dayIncreament();  //day++;
	    	    	 }
	    	    	 else {
	    	    		 if( date1.getDay().getValue() == mon_maxnum [this.getMonth().getValue()-1]){
	    	    			 date1.getMonth().monthIncreament();  // month++;
	    	    			 date1.getDay().setValue(1) ;   //day=1;
	    	    		 }
	    	    		 else {
	    	    			 date1.getDay().dayIncreament();//day++
	    	    		 }
	    	    	 }

  相较于上一题的聚合,本题的代码书写明显更加方便,也更加易懂。

       为了减少运行时间,当日期相差数字较大时,我以四百年为一个期限,以此减少代码运行量。

 7-1 菜单计价程序-4

这题一开始我是嫌麻烦,因为题目长度太长,而且看到好多人都没得分,于是我也没怎么写,但经过听课,必须要重新审视起来,先说这题的思路吧,首先需要把题目弄懂,然后再写相关的类,很明显有多个桌子,而且每个桌子的属性有桌号、日期和时间,而且菜的折扣和时间有关,所以需要设计一个桌子类来处理这些信息,基本的类题目已经给出。其次是写主类,先要考虑如何输入,格式是如何的,一开始我以为输入的信息是一次性输入,然后把字符串处理为Array,然后再转变为数组。

根据题目:

参考以下类的模板进行设计(本内容与计价程序之前相同,其他类根据需要自行定义):

菜品类:对应菜谱上一道菜的信息。

Dish {

String name;//菜品名称

int unit_price; //单价

int getPrice(int portion)//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份) }

菜谱类:对应菜谱,包含饭店提供的所有菜的信息。

Menu {

Dish[] dishs ;//菜品数组,保存所有菜品信息

Dish searthDish(String dishName)//根据菜名在菜谱中查找菜品信息,返回Dish对象。

Dish addDish(String dishName,int unit_price)//添加一道菜品信息

}

点菜记录类:保存订单上的一道菜品记录

Record {

int orderNum;//序号

Dish d;//菜品\\

int portion;//份额(1/2/3代表小/中/大份)

int getPrice()//计价,计算本条记录的价格

}

订单类:保存用户点的所有菜的信息。

Order {

Record[] records;//保存订单上每一道的记录

int getTotalPrice()//计算订单的总价

Record addARecord(int orderNum,String dishName,int portion,int num)//添加一条菜品信息到订单中。

delARecordByOrderNum(int orderNum)//根据序号删除一条记录

findRecordByNum(int orderNum)//根据序号查找一条记录

}

经过一段时间,我勉强将这几个类书写出来了,但菜的折扣是根据时间来定的,所以我写了如下,将日期转化为星期的格式:

	boolean isrightTime() {
		if(hour <= 21&& hour >=9) {
			if(hour == 21 && minute >=30 ||hour == 9 && minute <= 30) {
				return false;
			}
			return true;
		}
		return false;
	}
	public int[] monday = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
	//判断日期是否合法
	     boolean isLeapYear(int year) {
	    	 if(year%4==0&&year%100!=0||year%400==0) {
	    		 return true;//是闰年
	    	 }
	    	 else {
	    		 return false;//不是闰年;
	    	 }
	     }	     
	     boolean checkRight(int year ,int month, int day ) {
	    	 if(month<1||month>12) {
	    		 return false;
	    	 }
	    	 if(isLeapYear(year)) {//是闰年
	    		 if(month==2&&day>29) {
	    			 return false;
	    		 }
	    	 }
	    	 else {//不是闰年
	    		 if(day<0||day>monday[month]) {
	    			 return false;
	    		 }
	    	 }
	    	 return true;
	     }
	     
	     boolean checkDate(int year ,int month, int day ,int hour ,int minute ,int second) {//判断是否为合法数据
	     if(year < 2022||year > 2023) {
	    		 return false;
	    	 }
	     if(hour < 1 || hour > 24 || minute < 1|| minute >60 ||second < 1 || second > 60) {
	    	 return false ;
	     }
		return true;
	     
	     }
	     String getWeekday() {//将日期变为星期
	    	 String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
	 		Calendar cal = Calendar.getInstance();
	 		cal.set(Calendar.MONTH,this.month);
	 		cal.set(Calendar.YEAR, 5);
	 		cal.set(Calendar.DAY_OF_WEEK, day);
	 		Date date = cal.getTime();
	 		cal.setTime(date);
	 		int weekday = cal.get(Calendar.DAY_OF_WEEK) - 1;
	 		if (weekday < 0)
	 			weekday = 0;
	 		return weekDays[weekday];
	     }

	}

  由于惰性和侥幸心理,往后就没有什么突破性进展了

 

 

总的来说:这次作业是一次不小的挑战,考察了对我们的理解分析问题的能力。同时也让我对于正则表达式在代码中的运用有了更加深刻的理解,学会了比较基础的正则表达式,但是较难的还是无法掌握,明白了不同聚合的优劣势,能够更加理解聚合对于参数的赋值与调用。

标签:date1,总结报告,int,PTA,getValue,getDay,day,getMonth
From: https://www.cnblogs.com/godness4/p/17365396.html

相关文章

  • PTA题目集阶段总结(2)
    一、前言OOP训练集04:7题,第1题难度较大,第7题考查了较多的知识,也比较难;主要考察了Set、List和Java三大特性之一的封装性,并教我们学着查询JavaAPI文档,了解Scanner类、String类、Integer类、LocalDate类、ChronoUnit类中各种单位的用法和规则。OOP训练集05:6题,难度一般;主......
  • 南昌航空大学4-6次PTA总结
    对近期所学进行一个小结,主要针对pta上所发布的近三次作业,从多方面来分析这三次作业之间的联系和差异性,并从中了解自己的不足和缺点。最近的三次作业, 第一次作业除了第一题菜单类比较难其他还是比较简单,通过调用java自带的方法来节省我们编程的时间,主要考察的是我们对java的字符......
  • PTA题目集4~6的总结
    1.前言题目集4题目集4题目量适中,整体难度中偏易题目7-1要求厘清类与类间的关系,能对题目所给的要求作出准确的设计,难度中偏上题目7-2~7-7考察基本的算法,对Java中集合框架的使用以及对LocalDate类的使用,总体上难度偏易题目集5......
  • pta第二部分总结oop训练集05-06
    (1)前言训练集05:(题量适中,难度适中)7-5:多个类的互相调用对于日期类的整体优化,聚合初体验。7-6:对7-5的优化,加强聚合训练。训练集06:(题量少,难度大)7-1:多需求的实现。(完成的不好,编程能力还不够)(2)设计与分析7-5:类图: 源码:importjava.util.Scanner;publicclassMain{......
  • PTA题集4-6总结
    一,前言题集四主要考察了arraylist数组的运用,面向对象的封装性,运用数组高效率去重以及运用数组的一些自带方法解决问题,题量较小,除了7-1之外,其它题目难度较低。除此之外,7-6要求我们自主学习Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用......
  • 对Java课程PTA4-6题目集的反思与总结
     前言:三次题目集一共涵盖了以下知识点:面向对象编程的封装性,List-Arrays方法的使用,强制类型转换的方法,字符串的处理,字符串截断方法split的使用,对象数组的建立以及使用,Java源码自带的多种日期类方法的使用,各种正则表达式及其运用,运用聚合的方法自行写日期类,综合运用现学的所......
  • CentOS7 iptables防火墙 常用的命令
    CentOS7iptables防火墙常用的命令 iptables-Lvi/etc/sysconfig/iptablesserviceiptablesstatusnetstat-an|grep自定义的端口iptables-AINPUT-ptcp--dport自定义的端口-jACCEPTserviceiptablessavesystemctlrestartiptables.servicenetsta......
  • 第二次pta总结
    前言题目集4:主要涉及知识点为字符串的排序、删除---字符串的各种方法的使用(例如charAT--获取字符,subString--提取子串等),字符串中ArrayList<String>textList=newArrayList<>()//引用ArrayList方法,封装性、Scanner类中nextLine()等方法、String类中split()等方法、Integer类中par......
  • pta情人节
    #include<bits/stdc++.h>usingnamespacestd;typedefstruct{stringname;}Name;intmain(){Namenum[1000];inti=0;while(1){ cin>>num[i].name; if(num[i].name!="."){ i++;}elsebreak;......
  • JAVA面向对象程序设计_PTA题目集04-06总结分析
    前言:JAVA_BLOG_PTA题目集4-6_总结分析 题目集四:知识点:大体如预备知识,即:通过查询JavaAPI文档,了解Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解Chro......