第一次博客作业
第一次作业:
1.计算两个数的和。 通过键盘为变量a和b赋值,然后计算变量a与b的和,并将和赋值给变量sum,最终输出变量sum的值;
2.
国际标准中电话键盘上字母和数字之间的对应关系如下图所示。编写一个程序,从键盘读入一个输入的字母,将其转换成所对应的数字。
3.学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办法是:小于60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序,对输入的成绩进行等价划分
4.计算税率
5.读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。
6.本题目要求使用一维数组,存储5个整数,输出5个整数的平均值
7.先从键盘输入一个整数n,n代表需要排序的整数数量,然后再从键盘输入n个整数,对这些数从小到大排序并输出。
8.输入三角形三条边,判断该三角形为什么类型的三角形。
第二次作业:
1.一个IP地址是用四个字节(每个字节8位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
2.合并两个升序排序的整型数组为一个新的升序整型数组并输出。
3.判断闰年及星期几
4.求下一天
5.求前n天
第三次作业:
- 创建Account账户类
- 定义日期类
- 一元多项式求导
(1)前言:
1)第一次题目集较为简单,但也需要仔细思考,让我熟悉java的语法风格,从c语言中转变过来。题量适中,不过7-4的计算税率有些复杂,需要静下心来认真做,7-8中需要仔细思考三角形之间的关系并给出判断,有些难度。题目集1中的知识点:
1.定义变量时需要初始化,如:int sum=0;
2.数据的强制类型转换,如:sum = (double)(m*0.1);
3.数组的创建,如:int a[]=new int [5];
4.输入语句,如:int a =input.nextInt(); 需要import java.util.Scanner;和Scanner input = new Scanner(System.in);
5.输出语句,如:System.out.println(sum);
2)第二次题目集有一定的难度,但说难也不难吧,就是需要时间,自己的时间没有管理好,导致最后几个小时没有做完这个题目集二,题目集二中知识点:
- a.length()的使用,计算一个字符串的长度。
- substring()方法,substring()方法是String类的一个方法,故该方法的调用者为String类的对象,即字符串。str.substring(indexStart,indexEnd)功能为:截取方法调用者(即str)的从indexStart到indexEnd(包括indexStart,不包括indexEnd;即含头不含尾、或左闭右开区间内的子字符串)。
- integer.parseint()是将整型数据Integer转换为基本数据类型int。
- 数组的直接赋值示例(不同于c语言):int [] num1 = new int [] {0,30,29,31,30,31,30,31,31,30,31,30,31};
3)而题目集三中前两题较为简单,毕竟是之前做过的,而第三题对于我而言就有点难了,正则表达式学的有点迷糊对于find()和group()没搞清楚用法而且只用了一个pattern,不进行多次判断。
题目集三中的知识点:
- 输出指定小数位数的数据,如:String.format("%.2f",account.getBalance() )
- LocalDate()的使用,需要import java.time.LocalDate;,LocalDate time = LocalDate.now();和private LocalDate dateCreated = LocalDate.of(2020,7,31);
- 利用类进行问题的求解,如:创建了Account账户类
- 理解类的封装性,
- 构造方法的使用,如:无参的构造方法:public Account() {
super();
// TODO Auto-generated constructor stub
}
有参的构造方法:public Account(int id, double balance) {
super();
this.id = id;
this.balance = balance;
}
- 正则表达式的基本知识,
Pattern的使用:Pattern r = Pattern.compile(pattern);需要import java.util.regex.Pattern;
Matcher的使用:Matcher m = r.matcher(line);需要import java.util.regex.Pattern;
m.find()和m.group()方法的使用
(2)设计与分析:
1.题目集1的7-8:平均复杂度为4.5,最大复杂度为5,没有使用其他类,只使用了一个主类Main
,使用了5个if else语句进行对三角形的判断,但是判断的结果不太理想,一直有一个点没过去。
- 题目集2的7-4:
使用了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) ;//求输入日期的下一天
四个方法,在主方法里使用了较多的if else语句进行判断日期的输出,导致最大复杂度为52,平均复杂度为16.75
让人读起来十分的不方便,代码的可读性很差。
- 题目集2的7-5:
代码的最大复杂度为99,平均复杂度为23.60;题目集2的7-5中是求前n天或后n天(通过n的正负来判断),所以我分了n>0,n<0还有n=0三种情况进行判断,多出了2倍的if else语句,而在n>0和n<0的情况中还有闰年和非闰年的判断,又使代码的复杂度提高,代码的最大复杂度才达到让我自己都羞愧的99。
- 题目集3的7-2:
本题的代码最大复杂度为54,平均复杂度为6.25;本题是定义日期类,在getNextDate()方法中使用了很多的if else语句进行对日期的下一天的判断,大部分的代码复杂度都在getNextDate()方法中,
- 题目集3的7-3:
这个题目(7-3)我没有做完,主要是我自己花的时间不够多,对正则表达式的学习时间也不够多,只是基本的了解了一下正则表达式的基本内容就开始做题目了,在一知半解的情况下做题目是非常错误的选择,既浪费时间,还折磨自己的心态,不是为了通过pta的测试而做题,而是为了增长自己的知识而做题,做题目的目的没有搞清楚,这也是我的错误。
(3)采坑心得:
1.提交源码的时候不能添加package,不然会显示答案错误;自己在eclipse里一开始会创建package,然后粘贴到pta上的时候会显示答案错误,尽管自己的测试数据没有问题
2.提交源码的时候其他类前面不能又public,不然会显示编译错误;
3.在题目集3的7-1中,判断取款不合法时,条件本应该是money>20000||money<0,而自己却顺手写成money>20000&&money<0,导致几个测试点出错,然后自己又花了一些时间来找代码的错误,这样浪费自己的时间,仅仅是因为一个个小小的问题,非常不值得。
4.在题目集3的7-1中,在输出的The Account'balance:的时候,输出的只是19800,而并非是19800.00,于是在网上查阅资料java然后输出指定位数的小数,最后使用了String.format("%.2f",account.getBalance() ),就我自己查阅的资料,一共又五种保留小数位数的输出方式,而最后在于选择更合适的方式输出。
(4)改进建议:在写选择关系的时候优先考虑循环语句如for循环,switch循环,也可以选择用数组,;例如:月份的选择可以switch循环,if(days%7==0) {
return "Sunday";
}
else if(days%7==1) {
return "Monday";
}
else if(days%7==2) {
return "Tuesday";
}
else if(days%7==3) {
return "Wednesday";
}
else if(days%7==4) {
return "Thursday";
}
else if(days%7==5) {
return "Friday";
}
else
return "Saturday";
}
可以改为int n=days%7;
switch(n) {
case 0:return "Sunday";
case 1:return "Monday";
case 2:return "Tuesday";
case 3:return "Wednesday";
case 4:return "Thursday";
case 5:return "Friday";
case 6:return "Saturday";
}
(5)总结:
1.这三次题目集很好的锻炼了我的逻辑思考能力,通过这些日期的判断,如:判断闰年及星期几,求下一天,求前n天等等,这些都可以培养逻辑思考能力。
2.通过题目集3的7-2,理解了一些关于类的封装性知识。
3.通过题目集3的7-3,发现自己的自学能力不够,还需要自己多多培养,多花时间。
4.自己还需要加强对正则表达式的学习,不能在一知半解的去做题了。
5.目前自己还有很多问题,最主要的就是代码复杂度太高了,只会使用if else语句,这还是c语言的那套,一点也没有体现java的特点。
建议:
1.个人建议老师能够在题目集结束的时候,能提供一个参考答案,不然题目集结束了,会的就过去了,不会的也过去了,懂得是懂,不懂的还是不懂。

浙公网安备 33010602011771号