
-我的第一个Java工作周期摘要
这个博客是我为Java课程编写的三个作业的摘要. 所有三个任务均在PTA平台上完成. 就像我是一个追求完美的好学生一样,我不会在每个测试点之后都打上红色勾号,并且我不会在晚上睡觉. 您在这里学到了什么?

[Java三作业标题]

[提交后无比舒适的红色]
①知识的迭代. 在上学期中,我们使用C编写了许多编程问题,这三个作业也是从类似的编程问题中编写的. 首先编写实现特定功能的“方法”,然后将“方法”封装到“类”中. 从面向过程开始,逐渐转变为当前的面向对象,完成知识的迭代更新.
②面向过程和面向对象. 这三个任务主要是围绕日期问题设计的,总体难度逐渐变得越来越困难. 关于第一次作业的一些小问题将使您熟悉Java的语法. 在第二个作业中,您将开始设计有关日期的“方法”,例如从某个年,月和日开始的n天之后的哪年,月和年. Day,即n天的年,月和日,与C语言的功能相同,传入一些参数并返回值,第三项工作将使您使用唯一的面向对象的“类”来进行编程. 这三项任务使我们逐渐从面向过程的“将动作转换为命令”编程过渡到面向对象的“用类创建对象”编程.

③遇到问题并解决问题. 在这三个作业中,我遇到的大多数问题是某个测试点无法通过.
第一次分配的第四个问题,输入三个边的实数据并输出三角形类型. 数据的合法性是一个测试站点,if-else的使用是一个测试站点,但是这个问题的关键在于数据. 由于无法在键盘上输入根号,因此数据使用保留小数的实数. 此时,判断是否相等取决于它与结果之间的差异是否可以忽略. 例如,6.00000061和6.0可以视为相等. 因此,我使用了if(Math.abs(b * b + c * c-a * a)<= 1e-6)通过该大坑的测试点. (问其他人知道)

[第一个作业的问题4]
在第三次分配中,计算n天之前或之后的日期多次出现. 如果您遵循主题的思想,那么您每天都会增加或减少测试点. 例如,今天是2020年3月27日. 如果要计算8亿天(即8亿天)后的年数,月数和天数,那么超时将不足为奇.

[通过减法计算n天之前的日期]
以n天之后的日期为例,我的方法是先将日期设置为当前年份的1月1日,然后逐年添加日期,将其添加到n <= 365,最后添加剩余的日期天. 完. 参考代码如下(太长,无需仔细看,仅供参考)



1 /*n天之后的日期,累加法超时过不了测试点*/ 2 public DateUtil getNextNDays(long n) { 3 long year = this.day.getMonth().getYear().getValue(); 4 long month = this.day.getMonth().getValue(); 5 long day = this.day.getValue(); 6 long yearT, monthT, dayT; 7 if(n==0) { 8 int yearTemp = (int)year; 9 int monthTemp = (int)month; 10 int dayTemp = (int)day; 11 DateUtil date = new DateUtil(yearTemp,monthTemp,dayTemp); 12 return date; 13 } 14 //将日期设置为year/1/1 15 long leapNum = 28; 16 if(this.day.getMonth().getYear().isLeapYear()) { 17 leapNum = 29; 18 } 19 if(month == 1) { 20 n += (day-1); 21 } else if(month == 2) { 22 n += 31+(day-1); 23 } else if(month == 3) { 24 n += 31+leapNum+(day-1); 25 } else if(month == 4) { 26 n += 31+leapNum+31+(day-1); 27 } else if(month == 5) { 28 n += 31+leapNum+31+30+(day-1); 29 } else if(month == 6) { 30 n += 31+leapNum+31+30+31+(day-1); 31 } else if(month == 7) { 32 n += 31+leapNum+31+30+31+30+(day-1); 33 } else if(month == 8) { 34 n += 31+leapNum+31+30+31+30+31+(day-1); 35 } else if(month == 9) { 36 n += 31+leapNum+31+30+31+30+31+31+(day-1); 37 } else if(month == 10) { 38 n += 31+leapNum+31+30+31+30+31+31+30+(day-1); 39 } else if(month == 11) { 40 n += 31+leapNum+31+30+31+30+31+31+30+31+(day-1); 41 } else if(month == 12) { 42 n += 31+leapNum+31+30+31+30+31+31+30+31+30+(day-1); 43 } 44 monthT =1; dayT = 1; 45 //往后推年数 46 for(yearT = year; n >= 366; yearT++) { 47 if(isLeapYear(yearT)) { 48 n -= 366; 49 } else { 50 n -= 365; 51 } 52 } 53 //往后推日期 54 if(!isLeapYear(yearT) && n==365) { 55 yearT++; 56 } else { 57 long leapNumT = 28; 58 if(isLeapYear(yearT)) { 59 leapNumT = 29; 60 } 61 if(n>=31+leapNumT+31+30+31+30+31+31+30+31+30) { 62 monthT = 12; 63 dayT = n-(31+leapNumT+31+30+31+30+31+31+30+31+30)+1; 64 } else if(n>=31+leapNumT+31+30+31+30+31+31+30+31) { 65 monthT = 11; 66 dayT = n-(31+leapNumT+31+30+31+30+31+31+30+31)+1; 67 } else if(n>=31+leapNumT+31+30+31+30+31+31+30) { 68 monthT = 10; 69 dayT = n-(31+leapNumT+31+30+31+30+31+31+30)+1; 70 } else if(n>=31+leapNumT+31+30+31+30+31+31) { 71 monthT = 9; 72 dayT = n-(31+leapNumT+31+30+31+30+31+31)+1; 73 } else if(n>=31+leapNumT+31+30+31+30+31) { 74 monthT = 8; 75 dayT = n-(31+leapNumT+31+30+31+30+31)+1; 76 } else if(n>=31+leapNumT+31+30+31+30) { 77 monthT = 7; 78 dayT = n-(31+leapNumT+31+30+31+30)+1; 79 } else if(n>=31+leapNumT+31+30+31) { 80 monthT = 6; 81 dayT = n-(31+leapNumT+31+30+31)+1; 82 } else if(n>=31+leapNumT+31+30) { 83 monthT = 5; 84 dayT = n-(31+leapNumT+31+30)+1; 85 } else if(n>=31+leapNumT+31) { 86 monthT = 4; 87 dayT = n-(31+leapNumT+31)+1; 88 } else if(n>=31+leapNumT) { 89 monthT = 3; 90 dayT = n-(31+leapNumT)+1; 91 } else if(n>=31) { 92 monthT = 2; 93 dayT = n-31+1; 94 } else if(n>=1) { 95 monthT = 11; 96 dayT = n-1+1; 97 } 98 } 99 100 int yearTemp = (int)yearT; 101 int monthTemp = (int)monthT; 102 int dayTemp = (int)dayT; 103 DateUtil date = new DateUtil(yearTemp, monthTemp, dayTemp); 104 return date; 105 }
单击以查看代码
此外,使用long类型而不是int类型还会通过一些繁琐的测试点. 如果n = 2147483647(int类型的上限),即测试后的2,147,483,647天,那么我的代码中的n将超过int的上限并得到错误的结果,因此我将long转换为int计算后返回的值,然后通过了“最大整数”测试. 逐日添加,直到添加到第n天为止. 尽管代码简单明了,但运行起来就像乌龟一样,有着巨大的数据. 使用我的方法来计算日期,尽管代码很长,但是速度就像火箭一样. 这就是算法的魅力. (=•ω•=)
④在功课上花费的时间比例. 当然,在这三个操作上花费的时间越来越长面向过程程序设计语言,尤其是在一些大型矿井的测试点上. 如果第一个作业为1个单位,则第二个作业为4个单位,第三个作业至少为10个单位.
⑤编程严谨. 编程应考虑到各种情况,并且认为没有人会测试像2147483647这样的大数字是错误的. 就像提示您只能输入数字的提示一样,我更喜欢输入字母. 如果程序此时崩溃或无法获得所需的结果,则编写该程序将无法识别该程序.
①面向过程和面向对象. 在上学期的新生中,我学习了编程的基本课程,并且还完成了一个用C语言编写的小项目. C语言是一种典型的面向过程的语言,因此我也对面向过程有一些了解; Java是一种典型的面向对象语言. 在实践了这三个任务之后,我也感到了面向过程和面向对象. 如果您将编程视为构建基块,则代码越长,构建基块就越高. 对于面向过程的应用程序,您在每一部分都必须足够谨慎,因为您不知道会对构建模块产生什么影响. 当程序失败且原因不那么明显时,您必须从头开始并找到纠正它的方法;否则,请执行以下操作. 面向对象就像您预先准备了一个构建块盒,然后将这些块放入该盒中,然后一个个地构建盒子,这样可以更方便地发现问题. 当我开设C语言课程时,我感到了面向过程编程的复杂性. 我的“简单绘图软件”的总代码总计超过1300行. 在设计程序时,即使编译后运行的代码始终可用. 有很多问题. 这时,如果我想找到错误,则必须在程序开始处向下看代码行. 在完成这三个任务时,我感受到了面向对象编程的优势. 我只是设计了“类”,将主程序要完成的功能交给了“类”,当出现问题时,我发现相应的“类”可以纠正.


[C语言课程设计工作]
②面向对象设计的基本原理. 将一切都视为对象,并赋予对象适当的属性和功能是面向对象编程的基本原理. 就像我要设计一辆汽车一样,这辆汽车的属性是体重,尺寸和颜色. 这辆车可以启动,加速,减速和制动. 当我想完成任何操作时,可以直接调用它.
③Java编程思想. 最重要的是设计好“类”. 我们需要什么功能?我们首先应该考虑应该创建什么样的“类”,而不是将函数编写为方法,而直接调用main方法,然后返回到旧的过程路径. . 用Java进行编程是因为它是一种纯粹的面向对象的语言. 当我们口渴时,就会有一个新人出来为我们喝茶.
①测试对编码质量的重要性. 测试的质量极大地影响了代码的质量. 对于这次的三项任务,如果在指定时间内没有测试用例需要正确的结果,那么我不必考虑更快的计算方法. 查找日期的简单累积方法既简单又简洁. 如果没有测试用例,我不会想到几个小数位后大约相等的问题. 从用户的角度来看,如果我出于好奇而输入了20亿(2,000,000,000)个数字,那么我想查看20亿天之后的年,月和日,结果程序会告诉您一个显然错误的答案,因为数据溢出. 对用户来说非常不友好.
②测试用例的良好意图. 测试用例不仅是通用数据. 好的测试用例是当您准备好提交测试时无法通过的测试点. 你禁不住心中惊呼: 绝对!如果测试用例没有发现一些致命的错误,则将导致用户在使用该程序时使其崩溃,这将大大降低用户对该程序的偏爱. 毕竟,没有人会喜欢会崩溃的软件. 因此,如果您让我设计测试用例,那么我将专注于测试普通数据,并且极端数据也是必要的. 例如,如果要我输入正整数,则要测试字符串,负数,零,整数最大值,整数类型最小值,实型数据,请查看程序是否可以提供相应的提示信息.

[测试用例]

①面向对象的理解加深了. 感觉为什么面向对象的计算机语言现在如此流行,因为它更符合通常的思维方式,并且编写代码的效率更高.
②加深了对代码健壮性的理解. 在学习C语言时,老师强调了代码的健壮性: 不仅包括正常数据,而且包括异常数据. 其中,“ if-else if-else”语句特别常用,“将所有其他异常数据丢到else中”. 每次处理异常数据时,您都会这样想,以使程序不会无法处理异常数据而崩溃.
③提高撰写博客的能力. 这是我第一次写博客. 我曾经检查过百度并阅读其他人撰写的博客和帖子. 现在,通过本课程,我还知道我还可以组织语言,编写自己的博客以及为学院授课. 还是经验丰富的知识,我也会从整理知识中受益,我感到非常高兴.
干货多一点. 当我观看其他老师的讲座时,当老师们用他们的知识通过幽默和幽默的方式进行解释时,我会感到学习的乐趣. 就像华中师范大学戴建业教授一样,他用极其活泼有趣的语言谈论李白,杜甫和高石之间的友谊. “寻仙面向过程程序设计语言,采仙草,炼仙”成为沙雕网民的笑柄. 就像中国政法大学的罗翔教授一样,每个班级都会使用奇怪而有趣的案例来加深法律术语. 使用简单易懂的语言来解释深奥的数学知识的互联网名人老师李永乐赢得了网民的青睐. 有趣的干货可以更好地传播知识.

[戴建业教授]

[寻找神仙,收集仙草,使神仙]
自学. Eclipse具有许多尚不熟悉的基本操作,例如断点调试,各种接口的功能,项目构建……接下来,我们将继续探索Eclipse中的功能.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-165066-1.html
没办法
我们确实盼着台独分子好好折腾
好多水军啊
就是这个道理