blog第一次作业
(1)前言
1.第一次的作业偏向于基础性的东西,没有太大的难度,主要是让我们熟悉一下java的编程模式,虽然题量较多,但是总体难度不太,主要是让我们适应一下开学后的学习以及新的课程。
2.第二次的作业整体存在一定的难度,考察我们字符串和一维数组的创建和使用,有一些新的知识点我们都还没有学到,需要自己去进行课外的学习,进而完成pta上老师发布的作业,不然仅凭老师上课所讲到的知识,是很难独立地将老师发布的作业完成。
3.而第三次的作业难度更高了点,因为老师上课只讲了一些类的系统的概念,没有细说类的创建和使用,因此需要我们去自学,再完成老师发布的作业。但是我们对类的学习还很不熟练,不能够很好地去定义并使用,还有正则表达式老师也没有讲到,因此第三次作业还是存在一定的困难的,不过值得庆幸的是,题量并不是很多。
(2)设计与分析
1.第一次作业
输入三角形三条边,判断该三角形为什么类型的三角形。
输入格式:
在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。
输出格式:
(1)如果输入数据非法,则输出“Wrong Format”; (2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”; (3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”; (3)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”; (5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”; (6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”; (7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); double a=input.nextDouble(); double b=input.nextDouble(); double c=input.nextDouble(); if(a<1||a>200||b<1||b>200||c<1||c>200) System.out.println("Wrong Format"); else if(a==b&&b==c&&a==c) System.out.println("Equilateral triangle"); else if(a==b&&a*a+b*b==c*c&&a+b>c&&b+c>a&&a+c>b||b==c&&b*b+c*c==a*a&&a+b>c&&b+c>a&&a+c>b||a==c&&a*a+c*c==b*b&&a+b>c&&b+c>a&&a+c>b) System.out.println("Isosceles right-angled triangle"); else if(a==b&&a+b>c&&b+c>a&&a+c>b||b==c&&a+b>c&&b+c>a&&a+c>b||a==c&&a+b>c&&b+c>a&&a+c>b) System.out.println("Isosceles triangle"); else if(a*a+b*b==c*c&&a+b>c&&b+c>a&&a+c>b||b*b+c*c==a*a&&a+b>c&&b+c>a&&a+c>b||a*a+c*c==b*b&&a+b>c&&b+c>a&&a+c>b) System.out.println("Right-angled triangle"); else if(a+b>c&&b+c>a&&a+c>b) System.out.println("General triangle"); else System.out.println("Not a triangle"); } }
设计思路:
使用if选择语句,首先判断输入的三角形三条边的值是否合法,再通过不同的条件筛选出是否为等边三角形、直角三角形、直角等腰三角形等情况,然后输出正确答案。
以下为部分测试结果:



2.第二次作业
输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。
要求:Main类中必须含有如下方法,签名如下:
public static void main(String[] args);//主方法
public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型
public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值
public static void nextDate(int year,int month,int day) ; //求输入日期的下一天
输入格式:
在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。
输出格式:
- 当输入数据非法及输入日期不存在时,输出“Wrong Format”;
- 当输入日期合法,输出下一天,格式如下:Next date is:年-月-日
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int days; String a; int x =input.nextInt(); int y =input.nextInt(); int z =input.nextInt(); if(checkInputValidity(x,y,z)==false) System.out.println("Wrong Format"); else nextDate(x,y,z); } public static boolean isLeapYear(int year)//判断year是否为闰年,返回boolean类型; { if(year%4==0&&year%100!=0||year%400==0) return true; else return false; } public static boolean checkInputValidity(int year,int month,int day)//判断输入日期是否合法,返回布尔值 { int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year)==true) months[1]=29; if(year<1820||year>2020||month<1||month>12||day<1||day>31||day>months[month-1]) return false; else return true; } public static void nextDate(int year,int month,int day) //求输入日期的下一天 { int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year)==true) months[1]=29; if(day==months[month-1]) { if(month==12) { year=year+1; month=1; day=1; } else { month=month+1; day=1; } } else day=day+1; System.out.println("Next date is:"+year+"-"+month+"-"+day); } }
设计思路:
通过创建的方法,完成判断输入年份是否为闰年,判断输入日期是否合法,并输出输入日期的下一天的功能。其中要注意闰年的二月末,闰年的最后一天等特殊时期,输出正确的答案。
以下为部分测试结果:


输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。
输入格式:
在一行中输入年月日的值以及n的值,可以用一个或多个空格或回车分隔。
输出格式:
- 当输入的年、月、日以及n的值非法时,输出“Wrong Format”;
- 当输入数据合法时,输出“n days ago is:年-月-日”
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int days; String a; int x =input.nextInt(); int y =input.nextInt(); int z =input.nextInt(); int n =input.nextInt(); if(checkInputValidity(x,y,z,n)==false) System.out.println("Wrong Format"); else nextDate(x,y,z,n); } public static boolean isLeapYear(int year)//判断year是否为闰年,返回boolean类型; { if(year%4==0&&year%100!=0||year%400==0) return true; else return false; } public static boolean checkInputValidity(int year,int month,int day,int n)//判断输入日期是否合法,返回布尔值 { int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year)==true) months[1]=29; if(year<1820||year>2020||month<1||month>12||day<1||day>31||day>months[month-1]||n<(-10)||n>10) return false; else return true; } public static void nextDate(int year,int month,int day,int n) //求输入日期的下一天 { int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year)==true) months[1]=29; day=day-n; if(day<0) { if(month==1) { year=year-1; month=12; day=31+day; } else { month=month-1; day=months[month-1]+day; } } else if(day>months[month-1]) { if(month==12) { year=year+1; month=1; day=day-31; } else { month=month+1; day=day-months[month-2]; } } System.out.println(n+" days ago is:"+year+"-"+month+"-"+day); } }
设计思路:同第四题思路相似,只不过把输出下一天换成了输出前N天。
以下为部分测试结果:



3.第三次作业
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。
要求:Date类结构如下图所示:

输入格式:
在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。
输出格式:
1.当输入数据非法及输入日期不存在时,输出“Date Format is Wrong”;
2.当输入日期合法,输出下一天,格式如下:Next day is:年-月-日;
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); int year =input.nextInt(); int month =input.nextInt(); int day =input.nextInt(); Date date =new Date(year,month,day); if(date.checkInputValidity(year,month,day)==false) System.out.println("Date Format is Wrong"); else date.getNextDate(); } public static class Date{ private int year; private int month; private int day; Date(){ } Date(int year,int month,int day){ this.year=year; this.month=month; this.day=day; } boolean isLeapYear(int year) { if(year%4==0&&year%100!=0||year%400==0) return true; else return false; } boolean checkInputValidity(int year,int month,int day) { int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(year)==true) months[1]=29; if(year<1900||year>2000||month<1||month>12||day<1||day>31||day>months[month-1]) return false; else return true; } void getNextDate() { int x=year; int y=month; int z=day; int[] months={31,28,31,30,31,30,31,31,30,31,30,31}; if(isLeapYear(x)==true) months[1]=29; if(day==months[y-1]) { if(y==12) { x=x+1; y=1; z=1; } else { y=y+1; z=1; } } else z=z+1; System.out.println("Next day is:"+x+"-"+y+"-"+z);} } }
设计思路:与第二次作业的7-4类似,只不过是创建了一个类用来存放的属性和方法,使程序已经初步有了面向对象的样子。
以下为部分测试结果:


7-3 一元多项式求导(类设计) (50 分)
程序未完成。
(3)采坑心得
1.没有注意编程时符号的错误,导致很多次的编译错误,不够细心,总是忘记输入“,”或者将其输成中文符号,导致编译错误;
2.static是创建静态方法,没有注意到静态方法中不能够调用非静态方法,导致编译出错;
3.没有搞清楚类的含义,不能够熟练地使用类,单纯的以为类只是另一种方法,结果最开始编写程序的时候出现了大量的错误;
4.java中并没有NextChar()的这种方法,因此最开始不知道如何输入一个字符;
5.没有搞清楚String类型下next()和nextline()的区别,导致程序的输出存在不足之处;
(4)改进建议

浙公网安备 33010602011771号