PTA题目集1~3总结

一.前言(总结三次题目集的知识点、题量、难度等情况)

题目集1题量较大,难度较低,主要考察基本数据类型的数学运算;

题目集2题量较小,但是7-2有一定难度,需仔细阅题和分析;主要考察输入输出,对输入数据的分析处理;

题目集3题量较小,难度提升。需要完成的时间并不比题目集1,2要小,同样应该严格按照题目要求来。主要考察对类的掌握,包括类的属性方法和类与类之间的关系。

二.设计与分析

题目集1:

7-1: 身体质量指数(BMI)测算;
7-2:长度质量计量单位换算;

7-3:奇数求和 ;

7-4:房产税费计算2022 ;

7-5:游戏角色选择 ;

7-6:学号识别;

7-7:巴比伦法求平方根近似值;

7-8: 二进制数值提取;

7-9:判断三角形类型 ;

题目集1偏向简单和基础(虽然我没有拿到满分)。考察类型有,if语句和for循环,简单的输入输出,和基本数据类型的运算,对接收的数据的分析处理,对合法和非法输入的理解掌握。基本可以用在C语言的经验解决,基本都和数学运算有关。

题目集2:

7-1:字母-数字转换

7-2:串口字符解析

7-3: String的格式判断与内容提取

题目集2对输入输出掌握有了更高的要求。注意java 里String类要用charAt(i)方法单个输出字符,或者定义一个char类型数组,char[] c= str.toCharArray();其实不算很难,但偏偏7-2跪了。这里分析一下。

我觉得很重要的原因是题目看了,但没有完全看懂,导致理解上出现偏差,错误点分散。

 我的理解点如下:

每出现一次起始位,将当前位和后十位的部分复制到新的char 数组再来分析

1.数据小于十一位或者未起始位,输出"null date";

2.输出“parity check error”的情况:奇偶校验不合格,即八位有效数据全为"1"

(个人猜测可能是这一步错了)

3.输出“validate error”的情况:

        a.该组数据结束位为0

        b.该组数据结束符为0且奇偶校验不合格

4.正常的输出:改组数据足11位且结束为1,有效数据不全是“1”

题目集3:

7-1:用类解一元二次方程式 

7-2:日期类设计

7-3:日期问题面向对象设计(聚合一)

7-4: 日期问题面向对象设计(聚合二)

题目集3的7-1是四个中比较简单的,定义一个名叫“QuadraticEquation”的类,计算实数根的数量和根的值并返回,该类需要写的方法在主方法中可以找到。

7-2设计一个日期的类“DateUtil”,需要写的方法在题目中有明确要求,照做就行了。

 我的源码如下

class DateUtil {
	int year;
	int month;
	int day;
//	int n;
	int sum;
	int[] daymax= {31,28,31,30,31,30,31,31,30,31,30,31};//该月份天数
	int getYear() {
		return year;
	}
	int getMonth() {
		return month;
	}
	int getDay() {
		return day;
	}
	DateUtil(int year,int  month, int day){
		this.year=year;
		this.month=month;
		this.day=day;
	}
	public boolean checkInputValidity() {
		boolean x=false;
		if(year<=2020&&year>=1820) {
			if(month>=1&&month<=12) {
				if(day>=1&&day<=daymax[month-1]) {
					x=true;
				}
			}
		}
		if(isLeapYear(year)&&month==2&&day==29)
			x=true;
		return x;	
	}
	public boolean isLeapYear(int year) {
		boolean x=false;
		if((year%4==0&&year%100!=0)||year%400==0) {
			x=true;
		}
		return x;
	}
	
	public DateUtil getNextNDays(int n) {//取得year-month-day的下n天日期
		int newyear=this.year;
		int newmonth=this.month;
		int newday=this.day;
		for(;n>0;n--) {
			if(isLeapYear(newyear)&&newmonth==2&&newday==28)//闰年2月28号
				newday++;
			else if(isLeapYear(newyear)&&newmonth==2&&newday==29){//闰年2月29号
				newday=1;newmonth++;
			}
			else if(newday<daymax[newmonth-1])
				newday++;
			else if(newmonth<12) {
				newmonth++;
				newday=1;
			}
			else if(newmonth==12) {
				newyear++;
				newmonth=1;
				newday=1;
			}
		}
		return new DateUtil(newyear,newmonth,newday);
	}

	public DateUtil getPreviousNDays(int n) {//取得year-month-day的前n天日期
		int newday=this.day;
		int newmonth=this.month;
		int newyear=this.year;
		for(;n>0;n--) {
			if(newday>1)
				newday--;
			else if(newmonth>1) {
				newmonth--;
				if(isLeapYear(newyear)&&newmonth==2)
					newday=29;
				else
					newday=daymax[newmonth-1];
			}
			else  {
				newyear--;
				newmonth=12;
				newday=daymax[newmonth-1];
			}
		}
		return new DateUtil(newyear,newmonth,newday);
	}
	
	public boolean compareDates(DateUtil date) {//比较当前日期与date的大小(先后)//如果date的日期更大(后),返回true
		boolean dt=false;
		int dy=0;
		if(date.year==this.year) {
			if(date.month==this.month) {
				dy=date.day-this.day;
			}
			else
				dy=date.month-this.month;
		}
		else
			dy=date.year-this.year;
		if(dy>0)
			dt=true;
		return dt;
			
	}
	
	public boolean equalTwoDates(DateUtil date) {//判断两个日期是否相等
		boolean dt=false;
		if(date.year==this.year)
			if(date.month==this.month)
				if(date.day==this.day)
					dt=true;
		return dt;
	}
	
	public int getDaysofDates(DateUtil date) {//求当前日期与date之间相差的天数
		int i=0;
		if(equalTwoDates( date))
			return i;
		else if(compareDates( date)) {//date更晚
			for(int n=1;;n++) {
				if(equalTwoDates(date.getPreviousNDays(n)))//n天前两日期相等
					return n;
			}
		}
		else {//date更早
			for(int n=1;;n++) {
				if(equalTwoDates(getNextNDays(n)))//n天后两日期相等
					return n;
			}
		}
	}
	
	public String showDate() {//以“year-month-day”格式返回日期值
		String str = String.valueOf(this.year+"-"+this.month+"-"+this.day);
		return str;
	}
	
}

 但是在“下n天的整型数最大值测试”里运行超时了。

7-3也是题目明确要求了类的的属性和方法

 

 相比7-2,要求更详细,而且类也分成了好几个,优点是方法更为简短,职责明确。

三.踩坑心得

1.在使用eclipse时因为不熟练常常出现一些操作性问题,伤害不大,但是烦人又费时

2.不会设置测试用例,面对多且杂的测试点一筹莫展,只会把源码看一遍又一遍。好在老师前几天讲课讲了如何设置测试点,很有帮助

3.一定要仔细审题

4.不能太拖拉,不会的东西一定要搞懂。对于一些没有通过的地方,本来是准备躺平了,没想到一个blog作业把我踩起来了,而且对于拖拉的人真的有一定的震慑作用。

四.改进建议

降低耦合度,模块的功能设计得尽可能单一,属性和方法少用public,多用private,还有就是避免把一个类作为另一个类的属性。

五.总结

学到了java的一些基本操作,了解了Java输入输出,熟悉了一遍C语言中学过的if语句和for语句,明白了如何创建class,以及浅显地理解了类和C语言函数的不同之处。在设计测试用例和类间关系的掌握上有明显不足,都要下去慢慢研究。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值