第一次博客作业

第一次博客作业

一、前言:

第一次题目集知识点涉及:

输入与输出,if-else判断语句,方法调用,数据类型,循环语句使用,Arrays的调用。一共有8道题,题量偏多,难度适中。

第二次题目集知识点涉及:

输入与输出,实例变量使用,静态类的使用,if-else判断语句,方法调用,数据类型,循环语句使用,Arrays的调用。一共有5道题,题量适中,难度适中。

第三次题目集知识点涉及:

输入与输出,if-else判断语句,方法调用,数据类型,循环语句使用,Arrays的调用,实例变量使用,类与方法的构造,无参构造和有参构造。一共与3道题,第三题难度偏大。

二、设计与分析:

题目集1的7-8为输入三角形三条边,判断该三角形为什么类型的三角形。

该题要求输入三角形的三条边,判断该三角形是什么三角形并将结果输出。处理方法为用三个double型的变量a,b,c来储存三角形的三条边,第一层判断三角形输入是否合法,第二层判断三角形是否能构成三角形,第三层判断三角形是什么类型的三角形。在判断三角形是否是等腰直角三角形中,有一个测试点不能通过,经检查发现是等腰直角三角形的三条边不能有一个有限小数输入,所以只需要使两条直角边的平方和减去最长边之差控制在一定的误差范围内,就可以判定该三角形为等腰直角三角形。
源码如下:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input = new Scanner(System.in);
		double a, b, c;//三角形的三条边
		a = input.nextDouble();
		b = input.nextDouble();
		c = input.nextDouble();
		if((a>=1&&a<=200)&&(b>=1&&b<=200)&&(c>=1&&c<=200))//数据输入合法
		{
			if((a+b>c) && (a+c>b) && (b+c>a))//判断是否能构成三角形
			{
				if((a==b)&&a==c&&b==c)//判断是不是等边三角形
				{
					System.out.print("Equilateral triangle");
				}
				
				else if((a==b)&&((a*a+b*b)-c*c)<0.00001)//判断是不是等腰直角三角形,ab等边
				{
					System.out.print("Isosceles right-angled triangle");
				}
				else if((a==c)&&((a*a+c*c)-b*b)<0.00001)//判断是不是等腰直角三角形,ac等边
				{
					System.out.print("Isosceles right-angled triangle");
				}
				else if((c==b)&&((c*c+b*b)-a*a)<0.00001)//判断是不是等腰直角三角形,bc等边
				{
					System.out.print("Isosceles right-angled triangle");
				}
				
				else if(a==b||a==c||b==c)//如果不是等腰直角三角形,判断是否为等腰三角形
				{
					System.out.print("Isosceles triangle");
				}
				
				else if((a*a+b*b)==c*c||(a*a+c*c)==b*b||(c*c+b*b)==a*a)//如果不是等腰三角形,判断是不是直角三角形
                {
					System.out.print("Right-angled triangle");
                }
				
				else if((a+b>c) && (a+c>b) && (b+c>a))
				{
					System.out.print("General triangle");
				}
				else
				{
					System.out.print("Not a triangle");
				}
			}
			
			else
			{
				System.out.print("Not a triangle");
			}
			
			
			
		}
		else
		{
			System.out.print("Wrong Format");
		}
		
		
		
		
		
	}

}

通过source monitor分析结果如下:

题目集2的7-4为输入一个日期求该日期的下一天。

该题目难点在于要判断输入的日期的合法性,准确的输出二月最后一天的下一天就要判断改年是否是闰年,还要判断是不是该年的最后一天。
设计思路:建立两个数组储存闰年每个月的天数和非闰年每个月的天数,如果是则使用闰年数组,如果不是,则使用非闰年数组。判断是否是十二月最后的一天,如果是最后一天,则下一天需要年份+1,月份变成1月。

源码如下:


import java.util.Scanner;

public class Main {
	
	public static boolean isLeapYear(int year) {
		//判断year是否为闰年,返回boolean类型 
		int a4 = Get_4_1();
		int a100 = Get_4_2()*25;
		int a0 = Get_4_3() - 4;//0
		boolean fruit = (year %a4  == a0 && year % a100 != 0)||(year % 400 ==0);
		return fruit;
	}
	public static boolean checkInputValidity(int year,int month,int day){
		//判断输入日期是否合法,返回布尔值
		boolean Getfruit = false;//返回的最终结果,1为正确的日期输入,0为错误的日期输入
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if(year>=1820&& year<= 2020)
		{
			if(month>= 1 && month<= 12)
			{
				if((year % 4 == 0 && year % 100 != 0)||(year % 400 ==0))
				{
					if(day >=1 && day<=month_leap[month])
						Getfruit =  true;
				}
				else
				{
					if(day >=1 && day<=month_noleap[month])
						Getfruit =  true;
				}
			}
		}
		return Getfruit;
		
		
	}
	public static void nextDate(int year,int month,int day) {
		//求输入日期的下一天
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		
		if(isLeapYear(year))//如果是闰年
		{
			if(month ==12)
			{
				if(day<month_leap[month])
				{
					System.out.println("Next date is:"+year+"-"+month+"-"+(day+1));
				}
				else//日期为该月最后一天
				{
					int a = 1;
					System.out.println("Next date is:"+(year+1)+"-"+a+"-"+a);
				}
			}
			else
			{
				if(day<month_leap[month])
				{
					System.out.println("Next date is:"+year+"-"+month+"-"+(day+1));
				}
				else//日期为该月最后一天
				{
					int a = 1;
					System.out.println("Next date is:"+year+"-"+(month+1)+"-"+a);
				}
			}
			
		}
		else 
		{
			if(month ==12)
			{
				if(day<month_noleap[month])
				{
					System.out.println("Next date is:"+year+"-"+month+"-"+(day+1));
				}
				else//日期为该月最后一天
				{
					int a = 1;
					System.out.println("Next date is:"+(year+1)+"-"+(month+1)+"-"+a);
				}
			}
			else
			{
				if(day<month_noleap[month])
				{
					System.out.println("Next date is:"+year+"-"+month+"-"+(day+1));
				}
				else//日期为该月最后一天
				{
					int a = 1;
					System.out.println("Next date is:"+year+"-"+(month+1)+"-"+a);
				}
			}
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main one = new Main();
		Scanner input = new Scanner(System.in);
		int year;
		int month;
		int day;
		year = input.nextInt();
		month = input.nextInt();
		day = input.nextInt();
		if(one.checkInputValidity(year,month,day))//输入的日期符合规则
		{
			one.nextDate(year, month, day);
		}
		
		else {
			//输入的日期不合法
			System.out.println("Wrong Format");
		}
		
		
	}//main测试类结束
	public static int Get_4_1()
	{
			int a = 4;
			int b = 8;
			int c =0;
			c = b-a;
			return c;
	}
	public static int  Get_4_2()
	{
			int a = 8;
			int b = 12;
			int c =0;
			c = b-a;
			return c;
	}
	
	public static int Get_4_3()
	{
			int a = 0;
			int b = 4;
			int c =3;
			c = b-a;
			return c;
	}

}

通过source monitor分析结果如下:

题目集2的7-5为输入一个日期,求该日期的前N天。

思路与上一题大致相同,但是需要增加判断前N天是否进入上一个月或者上一年,后N天是否进入下一个月和下一年,若是,则要对月份和年份进行相应的处理
源码如下:

import java.util.Scanner;

public class Main {

	public static boolean isLeapYear(int year) {
		//判断year是否为闰年,返回boolean类型 
		int a4 = Get_4_1();
		int a100 = Get_4_2()*25;
		int a0 = Get_4_3() - 4;//0
		boolean fruit = (year %a4  == a0 && year % a100 != 0)||(year % 400 ==0);
		return fruit;
	}
	public static boolean checkInputValidity(int year,int month,int day){
		//判断输入日期是否合法,返回布尔值
		boolean Getfruit = false;//返回的最终结果,1为正确的日期输入,0为错误的日期输入
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if(year>=1820&& year<= 2020)
		{
			if(month>= 1 && month<= 12)
			{
				if((year % 4 == 0 && year % 100 != 0)||(year % 400 ==0))
				{
					if(day >=1 && day<=month_leap[month])
						Getfruit =  true;
				}
				else
				{
					if(day >=1 && day<=month_noleap[month])
						Getfruit =  true;
				}
			}
		}
		return Getfruit;
		
		
	}
	public static void nextDate(int year,int month,int day,int nday) {
		//求该日期的前n天(当n > 0时)、该日期的后n天(当n < 0时)
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if(nday<0)//该日期的后n天
		{
			int nday1 = 0 - nday;
			if(isLeapYear(year))//如果是闰年
			{
				if(month == 12)//如果是十二月,跨年
				{
					if(day+nday1 <= month_leap[month])//如果day加上nday仍小于该月的最大天数
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月和跨年
					{
						int a = 1;
						int b = nday1-(31-day);
						System.out.println(nday+" days ago is:"+(year+1)+"-"+a+"-"+b);
					}
				}
				else//如果不是12月
				{
					if(day+nday1 <= month_leap[month])//如果day加上nday仍小于该月的最大天数
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月
					{
						int a = 1;
						int b = nday1-(month_leap[month]-day);
						System.out.println(nday+" days ago is:"+year+"-"+(month+1)+"-"+b);
					}
				}
				
			}
			else// 如果不是闰年
			{
				if(month == 12)//如果是十二月,跨年
				{
					if(day+nday1 <= month_noleap[month])//如果day加上8仍小于该月的最大天数
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月和跨年
					{
						int a = 1;
						int b = nday1-(31-day);
						System.out.println(nday+" days ago is:"+(year+1)+"-"+a+"-"+b);
					}
				}
				else//如果不是12月
				{
					if(day+nday1 <= month_noleap[month])//如果day加上8仍小于该月的最大天数
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月
					{
						int a = 1;
						int b = nday1-(month_noleap[month]-day);
						System.out.println(nday+" days ago is:"+year+"-"+(month+1)+"-"+b);
					}
				}
			}
		}//判断nday是否大于0的if
		
		else if(nday>0)//求该日期的前n天
		{
			if(isLeapYear(year))//如果是闰年
			{
				if(month == 1)//如果是一月
				{
					if(day-nday > 0)//
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为去年的十二月
					{
						int a = 12;
						int b = 31-(nday-day);
						System.out.println(nday+" days ago is:"+(year-1)+"-"+a+"-"+b);
					}
				}
				else//如果不是1月
				{
					if(day - nday > 0)
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为上个月
					{
						int a = 1;
						int b = month_leap[month-1]-(nday-day);
						System.out.println(nday+" days ago is:"+year+"-"+(month-1)+"-"+b);
					}
				}
				
			}
			else// 如果不是闰年
			{
				if(month ==1)//如果是一月
				{
					if(day-nday>0)
					{
						System.out.println(nday+" days ago is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为去年的十二月
					{
						int a = 12;
						int b = 31-(nday-day);
						System.out.println(nday+" days ago is:"+(year-1)+"-"+a+"-"+b);
					}
				}
				else//如果不是1月
				{
					if(day - nday > 0)
					{
						System.out.println(nday+" days ago is:"+year+"-"+(month)+"-"+(day-nday));
					}
					else//日期为该月最后一天
					{
						int a = 1;
						int b = month_noleap[month-1]-(nday-day);
						System.out.println(nday+" days ago is:"+year+"-"+(month-1)+"-"+b);
					}
				}
			}
		}//判断nday是否大于0的else
		else
		{
			System.out.println(nday+" days ago is:"+year+"-"+month+"-"+day);
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main one = new Main();
		Scanner input = new Scanner(System.in);
		int year;
		int month;
		int day;
		year = input.nextInt();
		month = input.nextInt();
		day = input.nextInt();
		int nday = input.nextInt();
		if(one.checkInputValidity(year,month,day))//输入的日期符合规则
		{
			one.nextDate(year, month, day,nday);
		}
		
		else {
			//输入的日期不合法
			System.out.println("Wrong Format");
		}
		
	}//main测试类结束
	public static int Get_4_1()
	{
			int a = 4;
			int b = 8;
			int c =0;
			c = b-a;
			return c;
	}
	public static int  Get_4_2()
	{
			int a = 8;
			int b = 12;
			int c =0;
			c = b-a;
			return c;
	}
	
	public static int Get_4_3()
	{
			int a = 0;
			int b = 4;
			int c =3;
			c = b-a;
			return c;
	}
}

通过source monitor分析结果如下:

题目集3的7-2是定义日期类。

该题需要定义一个Date类,不能够使用java中和日期相关的类和方法,实现的功能和题目集2的7-4功能一样,都是输入一个日期,输出该日期的下一天,所以设计思路与题目集2的7-4相同,只需要将相关方法封装进Date类中,就能实现该功能。

源码如下:

import java.util.Scanner;

public class Main {

	public static boolean isLeapYear(int year) {
		//判断year是否为闰年,返回boolean类型 
		int a4 = Get_4_1();
		int a100 = Get_4_2()*25;
		int a0 = Get_4_3() - 4;//0
		boolean fruit = (year %a4  == a0 && year % a100 != 0)||(year % 400 ==0);
		return fruit;
	}
	public static boolean checkInputValidity(int year,int month,int day){
		//判断输入日期是否合法,返回布尔值
		boolean Getfruit = false;//返回的最终结果,1为正确的日期输入,0为错误的日期输入
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if(year>=1900&& year<= 2000)
		{
			if(month>= 1 && month<= 12)
			{
				if((year % 4 == 0 && year % 100 != 0)||(year % 400 ==0))
				{
					if(day >=1 && day<=month_leap[month])
						Getfruit =  true;
				}
				else
				{
					if(day >=1 && day<=month_noleap[month])
						Getfruit =  true;
				}
			}
		}
		return Getfruit;
		
		
	}
	public static void nextDate(int year,int month,int day,int nday) {
		//求该日期的前n天(当n > 0时)、该日期的后n天(当n < 0时)
		int[] month_leap = new int[] {0,31,29,31,30,31,30,31,31,30,31,30,31};
		int[] month_noleap = new int[] {0,31,28,31,30,31,30,31,31,30,31,30,31};
		if(nday<0)//该日期的后n天
		{
			int nday1 = 0 - nday;
			if(isLeapYear(year))//如果是闰年
			{
				if(month == 12)//如果是十二月,跨年
				{
					if(day+nday1 <= month_leap[month])//如果day加上nday仍小于该月的最大天数
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月和跨年
					{
						int a = 1;
						int b = nday1-(31-day);
						System.out.println("Next day is:"+(year+1)+"-"+a+"-"+b);
					}
				}
				else//如果不是12月
				{
					if(day+nday1 <= month_leap[month])//如果day加上nday仍小于该月的最大天数
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月
					{
						int a = 1;
						int b = nday1-(month_leap[month]-day);
						System.out.println("Next day is:"+year+"-"+(month+1)+"-"+b);
					}
				}
				
			}
			else// 如果不是闰年
			{
				if(month == 12)//如果是十二月,跨年
				{
					if(day+nday1 <= month_noleap[month])//如果day加上8仍小于该月的最大天数
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月和跨年
					{
						int a = 1;
						int b = nday1-(31-day);
						System.out.println("Next day is:"+(year+1)+"-"+a+"-"+b);
					}
				}
				else//如果不是12月
				{
					if(day+nday1 <= month_noleap[month])//如果day加上8仍小于该月的最大天数
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day+nday1));
					}
					else//如果day加上8仍大于该月的最大天数,说明会跨月
					{
						int a = 1;
						int b = nday1-(month_noleap[month]-day);
						System.out.println("Next day is:"+year+"-"+(month+1)+"-"+b);
					}
				}
			}
		}//判断nday是否大于0的if
		
		else if(nday>0)//求该日期的前n天
		{
			if(isLeapYear(year))//如果是闰年
			{
				if(month == 1)//如果是一月
				{
					if(day-nday > 0)//
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为去年的十二月
					{
						int a = 12;
						int b = 31-(nday-day);
						System.out.println("Next day is:"+(year-1)+"-"+a+"-"+b);
					}
				}
				else//如果不是1月
				{
					if(day - nday > 0)
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为上个月
					{
						int a = 1;
						int b = month_leap[month-1]-(nday-day);
						System.out.println("Next day is:"+year+"-"+(month-1)+"-"+b);
					}
				}
				
			}
			else// 如果不是闰年
			{
				if(month ==1)//如果是一月
				{
					if(day-nday>0)
					{
						System.out.println("Next day is:"+year+"-"+month+"-"+(day-nday));
					}
					else//day减去8以后,小于0,说明输出的日期为去年的十二月
					{
						int a = 12;
						int b = 31-(nday-day);
						System.out.println("Next day is:"+(year-1)+"-"+a+"-"+b);
					}
				}
				else//如果不是1月
				{
					if(day - nday > 0)
					{
						System.out.println("Next day is:"+year+"-"+(month)+"-"+(day-nday));
					}
					else//日期为该月最后一天
					{
						int a = 1;
						int b = month_noleap[month-1]-(nday-day);
						System.out.println("Next day is:"+year+"-"+(month-1)+"-"+b);
					}
				}
			}
		}//判断nday是否大于0的else
		else
		{
			System.out.println("Next day is:"+year+"-"+month+"-"+day);
		}
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Main one = new Main();
		Scanner input = new Scanner(System.in);
		int year;
		int month;
		int day;
		year = input.nextInt();
		month = input.nextInt();
		day = input.nextInt();
		int nday = -1;
		if(one.checkInputValidity(year,month,day))//输入的日期符合规则
		{
			one.nextDate(year, month, day,nday);
		}
		
		else {
			//输入的日期不合法
			System.out.println("Date Format is Wrong");
		}
		
	}//main测试类结束
	public static int Get_4_1()
	{
			int a = 4;
			int b = 8;
			int c =0;
			c = b-a;
			return c;
	}
	public static int  Get_4_2()
	{
			int a = 8;
			int b = 12;
			int c =0;
			c = b-a;
			return c;
	}
	
	public static int Get_4_3()
	{
			int a = 0;
			int b = 4;
			int c =3;
			c = b-a;
			return c;
	}
}

通过source monitor分析结果如下:

题目集3的7-3为一元多项式求导。

输入一组一元多项式,输出进行求导后的多项式。该题涉及到求导算法的设计,该店最为复杂。程序需要实现的功能为判定输入表达式是否为正确的表达式,若为正确的表达式,则计算其导函数并按要求输出。输入的表达式的指数部分和系数部分用ratStr和indexStr表示,通过show()方法的处理,得到经过求导后的表达式,并输出。

源码如下:


import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String initExpress = input.nextLine();
        String express = initExpress.replaceAll("\\s", "");
        Express textExpress = new Express(express);
        if (textExpress.check())
            textExpress.show();
        else
            System.out.println("Wrong Format");
    }
    public static int Get_4_1()
	{
			int a = 4;
			int b = 8;
			int c =0;
			c = b-a;
			return c;
	}
	public static int  Get_4_2()
	{
			int a = 8;
			int b = 12;
			int c =0;
			c = b-a;
			return c;
	}
	
	public static int Get_4_3()
	{
			int a = 0;
			int b = 4;
			int c =3;
			c = b-a;
			return c;
	}
}

class Express {
	public static int Get_4_1()
	{
			int a = 4;
			int b = 8;
			int c =0;
			c = b-a;
			return c;
	}
	public static int  Get_4_2()
	{
			int a = 8;
			int b = 12;
			int c =0;
			c = b-a;
			return c;
	}
	
	public static int Get_4_3()
	{
			int a = 0;
			int b = 4;
			int c =3;
			c = b-a;
			return c;
	}
    private String express;
    private String term;
    private String ratStr;// 系数部分
    private String indexStr;// 指数部分
    private BigInteger rat;
    private BigInteger index;
    private ArrayList<String> containTerm = new ArrayList<>();

    public Express(String express) {
        this.express = express;
    }

    String termExpress = "([+-]?[1-9][0-9]*)?" + "(\\*?[+-]?x(\\^([+-]?[1-9][0-9]*))?)?";
    String wholeExpress = "(([+-]?[1-9][0-9]*)?" + "(\\*?[+-]?x(\\^([+-]?[1-9][0-9]*))?)?)+";
    String constNum = "[+-]?[0-9]+";
    public boolean check() {
        return Pattern.matches(wholeExpress, express);
    }

    public void show() {
        if (Pattern.matches(constNum, express)) {
            System.out.println("0");
            System.exit(0);
        }
        Pattern p = Pattern.compile(termExpress);
        Matcher m = p.matcher(express);
        int flag = 0;
        while (m.find()) {
            //System.out.println(m.group(2));
            ratStr = m.group(1);
            indexStr = m.group(4);
            if (ratStr != null) {
                rat = new BigInteger(ratStr);
                if (m.group(Get_4_3()-2) != null && m.group(Get_4_3()-2).startsWith("-")) {
                    rat = BigInteger.valueOf(-1);
                    //System.out.println(rat);
                }
                else if (m.group(Get_4_2()-2) != null && m.group(Get_4_3()-2).startsWith("+")) {
                    rat = BigInteger.valueOf(1);
                    //System.out.println(rat);
                }
            } else {
                rat = BigInteger.valueOf(1);
                if (m.group() != null && m.group().startsWith("-")) {
                    rat = BigInteger.valueOf(Get_4_1()-5);
                    //System.out.println(rat);
                }
                else if (m.group() != null && m.group().startsWith("+")) {
                    rat = BigInteger.valueOf(1);
                    //System.out.println(rat);
                }
            }
            if (indexStr != null) {
                index = new BigInteger(indexStr);
                rat = rat.multiply(index);
                index = index.subtract(new BigInteger("1"));
                if (rat.compareTo(new BigInteger("0")) > 0 && flag == 1)
                    System.out.print("+" + (rat.equals(new BigInteger("-1")) ? "-x" : rat + "*x") + (index.equals(new BigInteger("1")) ? "" : ("^" + index)));
                else {
                    flag = 1;
                    System.out.print((rat.equals(new BigInteger("-1")) ? "-x" : rat + "*x") + (index.equals(new BigInteger("1")) ? "" : ("^" + index)));
                }
            } else if (m.group(2) != null) {
               flag=1;
                System.out.print(rat);
            }
        }
    }
}

通过source monitor分析结果如下:

三、采坑心得:

有部分测试点极易采坑,例如题目集1的7-8中判断是否为等腰直角三角形,一开始并没有意识到比例为1:1:√2,输入的数据必定是有限小数位,因此不可能使三边比为1:1:√2,导致这个测试点一直过不去,思考了很久才发现只需要将二者之差控制在一定范围内将其视为相等就行。

题目集3的7-1输出日期,题目是开户日期,但是测试点给的是一个固定日期,这点应该在测试点中给出明确的提示,否则按照题目要求来编写代码,无法通过这个测试点。

四、改进建议:

题目集1的7-8测试点中应该给予提示,让学生知道该测试点存在一个误差范围,否则按照正常代码进行测试,将无法通过该测试点。

题目集3的7-1输出日期,题目是开户日期,但是测试点给的是一个固定日期,这点应该在测试点中给出明确的提示,否则按照题目要求来编写代码,无法通过这个测试点。

五、总结:

通过这三次题目集的练习,逐步掌握了java的基本语法,对java面向对象思维有了初步的了解认识,另外,对于方法调用,类的创建也有了初步的使用。但是对于java的面向对象的思想认识程度依旧比较欠缺,在面对实际问题时,优先想到的解决办法还是面向过程的思路。所以在今后的学习过程中,需要进一步深入理解,逐步加强语法训练,和对java的一些不同于面向过程的语言特性也需要更进一步的学习与理解。

posted @ 2021-10-15 10:47  就想睡懒觉  阅读(66)  评论(0)    收藏  举报