20201401-戴文杰---blog作业01总结
(1)前言:
前三次作业题目由易到难,且每次作业针对性都比较强,尤其是第二次作业和第三次作业。在这三次作业中,有难有易,也常常让我感到焦虑。不过更多的是要将自己压迫到一种学习的氛围当中去,让自己去感受那种编程的乐趣。只有不断努力学习不断获取知识,我们才能获得学习知识的成就感
(2)设计与分析:
题目集一: 第一周的话,普遍题目都比较简单,值得一谈的是7-8题,判断直角等腰三角形时有一点小坑;
| 题目 | 考察知识 | 难度 |
| 1.计算两个数的和 | 基础的输入即输出 | 基础 |
| 2.电话键盘字母数字转换 | 处理字符 | 基础 |
|
3.成绩分级管理 |
对判断switch语句的使用 | 基础 |
| 4.计算税率 | 对判断if语句的使用 | 基础 |
| 5.计算钱币 | 取余数和循环操作 | 简单 |
| 6.使用一维数组求平均值 | 基础的数组处理 | 简单 |
| 7.对多个整数进行排序 | 数组排序 | 简单 |
| 8.判断三角形类型 | 精度处理 | 较简单 |
7-8中要判断的东西比较多,要判断是哪一种三角形,要使用很多if语句,比较繁琐,而且是有一个精度的处理,第一次都是这歌精度问题,一直通过不了,以为3个有理数无法组合成一个等腰直角三角形,只能是斜边的平方与两直角边的平方差小于一个很小
的数假设他就是一个等腰直角三角形,比较难想。
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
double a=in.nextDouble();
double b=in.nextDouble();
double c=in.nextDouble();
double x;
if(b>a)
{
x=a;
a=b;
b=x;
}
if(c>a)
{
x=a;
a=c;
c=x;
}
if(c>b)
{
x=c;
c=b;
b=x;
}
if(a>200||b<1||c<1)
{
System.out.print("Wrong Format");
}
else if(a>=(b+c))
{
System.out.print("Not a triangle");
}
else if(a==b&&b==c)
{
System.out.print("Equilateral triangle");
}
else if(a==b||b==c||a==c)
{
if(Math.abs(a*a-b*b-c*c)<0.00001)
{
System.out.print("Isosceles right-angled triangle");
}
else
{
System.out.print("Isosceles triangle");
}
}
else if(a*a==(b*b+c*c))
{
System.out.print("Right-angled triangle");
}
else
{
System.out.print("General triangle");
}
}
}
题目集二:比起题目集一难度有所提升,当然让我们学习到的东西也就更多了,挺满足的感觉学到的东西越来越多了,与此同时我也应该把更多的时间和精力放在掌握更多的编程的知识,面临的问题就是想让自己的成绩变好,总是因为自己贪玩而浪费了学习的时间。
| 题目 | 知识点 | 难度 |
| 题目一:IP地址装换 |
next()与nextline() 字符串函数charAt()length() 数学函数Math.pow() |
入门级(较难) |
| 题目二:合并俩个有序数组为新的有序数组 | 数组定义与灵活使用 | 入门级(要动脑子) |
| 题目三:判断闺年及星期几 | if语句复合使用switch语句使用 | 入门级(复杂型) |
| 题目四:求下一天 | 类似与上一题if语句更复杂的使用 | 入门级(比较难还难) |
| 题目五:求前n天 | 类似与上一题if语句进阶级使用 | 中级难度 |
7-4这到题其实是比较简单的,就是比较麻烦一点,要判断闰年,这个月有多少天,下一天是不是到下一个月了,是不是到下一年了,要考虑挺多的。
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int year=in.nextInt();
int month=in.nextInt();
int day=in.nextInt();
if(year<1820||year>2020)
{
System.out.println("Wrong Format");
System.exit(0);
}
if(month>12||month<1)
{
System.out.println("Wrong Format");
System.exit(0);
}
else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day<=0||day>31)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
if(month==2)
{
if(isLeapYear(year))
{
if(day<=0||day>29)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
else
{
if(day<0||day>28)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
if(month==4||month==6||month==9||month==11)
{
if(day<=0||day>30)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
if(isLeapYear(year))
{
if(month==1||month==3||month==5||month==7||month==8||month==10)
{
day=day+1;
if(day==32)
{
month=month+1;
day=1;
}
}
else if(month==2)
{
day=day+1;
if(day==30)
{
month=month+1;
day=1;
}
}
else if(month==4||month==6||month==9||month==11)
{
day=day+1;
if(day==31)
{
month=month+1;
day=1;
}
}
if(month==12)
{
day=day+1;
if(day==32)
{
year=year+1;
month=1;
day=1;
}
}
}
else
{
if(month==1||month==3||month==5||month==7||month==8||month==10)
{
day=day+1;
if(day==32)
{
month=month+1;
day=1;
}
}
if(month==2)
{
day=day+1;
if(day==29)
{
month=month+1;
day=1;
}
}
if(month==4||month==6||month==9||month==11)
{
day=day+1;
if(day==31)
{
month=month+1;
day=1;
}
}
if(month==12)
{
day=day+1;
if(day==32)
{
year=year+1;
month=1;
day=1;
}
}
}
System.out.print("Next date is:"+year+"-"+month+"-"+day);
}
public static boolean isLeapYear(int year) //判断year是否为闰年,返回boolean类型
{
if((year%4==0&&year%100!=0)||year%400==0)
{
return true;
}
else
{
return false;
}
}
}
7-5其实就是7-4多加几个条件,就是比7-4要复杂一点,思路其实是一样的。
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int year=in.nextInt();
int month=in.nextInt();
int day=in.nextInt();
int x=in.nextInt();
if(year<1820||year>2020)
{
System.out.println("Wrong Format");
System.exit(0);
}
if(month>12||month<1)
{
System.out.println("Wrong Format");
System.exit(0);
}
else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day<=0||day>31)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
if(month==2)
{
if(isLeapYear(year))
{
if(day<=0||day>29)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
else
{
if(day<0||day>28)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
if(month==4||month==6||month==9||month==11)
{
if(day<=0||day>30)
{
System.out.println("Wrong Format");
System.exit(0);
}
}
if(isLeapYear(year))
{
if(month==5||month==7||month==10)
{
day=day-x;;
if(day<0)
{
month=month-1;
day=30+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==2)
{
day=day-x;;
if(day<0)
{
month=month-1;
day=31+day;;
}
else if(day>29)
{
month=month+1;
day=day-29;
}
}
else if(month==4||month==6||month==9||month==11)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;;
}
else if(day>30)
{
month=month+1;
day=day-30;
}
}
else if(month==12)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;
}
else if(day>31)
{
month=1;
year=year+1;
day=day-31;
}
}
else if(month==8)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==1)
{
day=day-x;
if(day<0)
{
year=year-1;
month=12;
day=31+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==3)
{
day=day-x;
if(day<0)
{
month=month-1;
day=day+29;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
}
else
{
if(month==5||month==7||month==10)
{
day=day-x;;
if(day<0)
{
month=month-1;
day=30+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==2)
{
day=day-x;;
if(day<0)
{
month=month-1;
day=31+day;;
}
else if(day>28)
{
month=month+1;
day=day-28;
}
}
else if(month==4||month==6||month==9||month==11)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;;
}
else if(day>30)
{
month=month+1;
day=day-30;
}
}
else if(month==12)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;
}
else if(day>31)
{
month=1;
year=year+1;
day=day-31;
}
}
else if(month==8)
{
day=day-x;
if(day<0)
{
month=month-1;
day=31+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==1)
{
day=day-x;
if(day<0)
{
year=year-1;
month=12;
day=31+day;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
else if(month==3)
{
day=day-x;
if(day<0)
{
month=month-1;
day=day+28;
}
else if(day>31)
{
month=month+1;
day=day-31;
}
}
}
System.out.print(x+" days ago is:"+year+"-"+month+"-"+day);
}
public static boolean isLeapYear(int year) //判断year是否为闰年,返回boolean类型
{
if((year%4==0&&year%100!=0)||year%400==0)
{
return true;
}
else
{
return false;
}
}
}
题目集三:第三周的话,第一题和第二题都是对类的创建,因为第二题写过类似的,所以相对简单,第三题则是这个月的重头戏,初步学习了正则表达式,并且使用,用于提取多项式中的单项式,难度较大。
| 题目 | 考察知识 | 难度 |
| 创建账户类Account | 创建基础的类 | 简单 |
| 定义日期类 | 基础的类知识 | 中等 |
| 一元多项式求导(类设计) | 正则表达式 | 难 |
7-3很难要使用到正则表达式,是比较复杂的,写了一个星期才写完,但是没有全对,实在没有办法,那代码就不写出来了,应为里面还是有毛病的,就不误导大家了。
(3)采坑心得:
第一次作业中,提交代码时经常会有编译错误,编译错误的问题比较容易解决。一般就是代码格式不符合要求。比如public class Main,类必须是Main,这是第一次提交作业时遇到的简单的编译问题。
第一次作业的7-8题,判断三角形的类型,有一个函数需要使用就是Math.abs(),该函数用来判断等腰直角三角形。由于等腰直角三角形斜边为直角边的 √2倍,需要让斜边的平方减去另外两边的平方和小于0.000001,才可以判断出是等腰直角三角形。第一次作业相对来说比较简单,没有太多问题,主要是对Java的了解和熟悉的过程。
第二次作业相对第一次作业,难度上有了很大的提升。不过和第一次作业相似,基本上代码都是在主函数里完成的,使用的方法和c语言相似。不同的是,我开始在主方法外定义方法,并且在主方法中调用自己定义过的方法。
在第二次作业7-3中就使用了isLeapYear(int y),numOfDays(int y,int m ,int d),String getWhatDay(int days)几种方法,其中判断闰年的isLeapYear(int y)函数是用Boolean型定义的。
Boolean型定义判断是否为闰年非常方便快捷。让我们的编程效率得到了很大提高。
第三次作业难度大有提升,前两题还好并不是太难做出来,第三题求一元多项式的倒数,我至今还没有实现。前两道题目类似,但也还是比较复杂,第三次作业是和类有关的。我们开始自己使用类来编写程序,比如7-1中让我们创建账户类,并要求使用私有属性。使用指定的方法,在这个题中,一共有两个类,第一个类中是主方法。账户类中有自己定义的属性,自己定义的方法。程序要求使用构造方法,一开始不怎么理解构造方法,不知道为什么要有个无参构造方法,还要有个有参的构造方法。构造方法原来是为了给类中的属性初始化,还有getter和setter方法,一开始都不是很理解,通过不断查阅资料才发现这种方法也是为了该类中的属性。
第三次作业也不简单,了解了类和属性等概念。不过最后一个求导的题,可能就会相比前两道题来说要麻烦许多。我自己没有做出来这道题,这道题中把输入的一元多项式分解成单项式需要用到正则表达式。通过学习正则表达式仅仅把一元多项式分解成了单项式,这次学习正则表达式的过程较为缓慢,以至于后面的题目无法完成。
这三次作业遇到的困难还是很多的,但很多问题可以通过查阅资料来解决,相信以后通过编码,以及不断地查阅资料可以提高自己的编程能力。
(4)改进建议:
代码多处都有改进的空间,比如将能改的if语句改为switch语句这样能减少圈复杂度,
还能将多余的代码简化,减少变量的定义。
掌握类和方法的使用能是代码更简洁,让读者更看得懂。
(5)总结:
这个月可谓学到了很多的知识,我充分认识到自己对于Java的了解还只是冰山一角,Java包含的内容十分丰富,我应该在日常的学习中不断
拓展,丰富自己在此领域了解的内容。我们锻炼了自己的自学能力,以及上网查询资料的能力,仅仅在一个星期就已经可以灵活运用java的基础
语法且初步体验到了面向对象的处理事情的方法,把复杂问题简单化,学会了创建类,使用类里的函数,理解了各个类之间的关系,懂得了什么
时候应该去创建类,把问题分解。并且学到了从未接触的正则表达式,触摸到了我从未接触的东西,题目很具有挑战性,很大程度的锻炼了我们
的能力,平时课程为线上线下双教学模式,是我们从未接触的上课方式,老师上课讲的东西更具有针对性,可以自学的都会让我们自己去学习,
唯独困难的,不易理解的才会讲,对我们的作业有启发。而课下也是需要自己去钻研,锻炼了我们要有不怕累,不怕苦的精神,这个月不仅仅是对
java的学习,更是对我们的磨砺!

浙公网安备 33010602011771号