OO第一次博客作业
OO第一次博客作业
pjl240428
对初次接触java的一些感想
个人思考:
因为本学期刚接触到java,可以说对java的了解少的可怜,在刚开始的一两个礼拜我对java的学习完全是蒙逼状态,既不知道java到底是干什么的也不知道到底要怎么去学习java,这甚至让自己有点焦虑。看到身边有的同学已经对java熟悉不少,顿时感觉自己已经落后了,只能说后悔寒假的时候没有自主提前去了解与学习java,不过在进行总结和心理建设后,觉得只要我现在抓紧时间,开始努力学习,就还来得及,就像那句话说的“种一棵树的最好时间是十年前,其次是现在!”当然也不能是口头功夫,这需要我付出实际行动,付出时间与努力!
关于java&面向对象:
上个学期我们学习的是c语言,它是面向过程的编程语言,这意味着C语言主要依赖于过程或算法来组织代码,而java是面向对象的编程语言,是通过类和对象的概念来组织代码,支持封装、继承和多态等特性;同时在学习难度上也有不同,C语言相对简单直接,学习起来入门容易,但要精通也需深入理解底层原理。Java由于其丰富的特性和庞大的生态系统,学习曲线可能会更陡峭一些。java的学习更要踏实走好,打好基础,理解底层原理,一步一个脚印!
对前三次作业的总结
第一次作业:
现在都觉得当时的自己太自作聪明了,以为觉得可以不用类简化代码来提高作业效率,实际给后面作业留下很大隐患,自己也在后面作业上吃到这个亏了,所以对第一次的作业总结,我不提代码的一些问题,我觉得这个态度是最要的:就是在完成任务作业时,不要抱着侥幸心理和耍一些小聪明,要踏踏实实做,按要求去完成!只有跟紧老师步伐,才不会掉队。
第二次作业:
在意识到建类的重要性后,重新建类写代码。!!!这里真的很悲伤,因为我当时是边敲代码边构建思路,导致我在花费几个小时后发现我的思路有问题,代码不够简洁,逻辑间有问题,也就是白写这么久!在这之后我真的真的认识到在写题目前先先构造大体思路,画类图以及思维导图!
同时在第二次作业中,我的代码出现了许多问题,bug。
1.类中数据访问不到,加了private后,没构造get()和set()方法。
2.数组越界问题,超过索引。
3.字符串的分割不当,导致访问不到具体值。
4.一些判断标志在改变后,没有改回去,导致输出结果错误。
第三次作业:
有了前两次的试错后,这次作业我先画了思维导图,这让我在写代码时,思路比较清晰,感觉比前两次好多了,但这次作业的测试点非常多,很多细节问题,这导致我有几个测试点一直没过。主要问题还是自己的逻辑性不够细致缜密,这也让我意思到要完成一个任务,不但要有写代码的能力,你对问题的解读能力也得非常强,这样你才能高效且准确的完成它。
同样在第三次作业中也出现了一些问题,bug.
1.数组越界
2.正则表达式判断错误
3.多层嵌套出问题
4.逻辑问题
总结:
1.没有完全读懂题目
2.代码细节问题
3.处理关系不当
代码分析
第一次作业:
由于第一次没有用类,就代码的分析也没多大逻辑,这里给出代码吧。
import java.util.*;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int questionCount = Integer.parseInt(scanner.nextLine());
//int number[]=new int[questionCount];
String content[]=new String[questionCount];
Map<Integer, String> map = new HashMap<>();
//String standardAnswer[]=new String[questionCount];
for (int i = 0; i < questionCount; i++) {
String line = scanner.nextLine();
String[] parts = line.split(":");
parts[1]=parts[1].substring(0, parts[1].length() - 2);
parts[2]=parts[2].substring(0, parts[2].length() - 2);
// parts[3]=parts[3].substring(0, parts[3].length() - 2);
parts[1]=parts[1].trim();
parts[2]=parts[2].trim();
parts[3]=parts[3].trim();
int number1 = Integer.parseInt(parts[1].substring(0));
String content1 = parts[2].substring(0);
String standardAnswer1 = parts[3].substring(0);
map.put(number1,standardAnswer1);
//number[i]=number1;
content[number1-1]=content1;
//standardAnswer[i]=standardAnswer1;
}
String[] answers=new String[questionCount];
while (true) {
String line = scanner.nextLine();
if (line.equals("end")) {
break;
}
answers = line.split(" ");
for (int i = 0; i < answers.length; i++) {
answers[i]=answers[i].substring(3);
}
}
for(int i=0;i<questionCount;i++){
System.out.println(content[i]+"~"+answers[i]);
}
for(int i=0;i<questionCount;i++){
int temp=0;
if(questionCount==1) {
if (map.containsKey(i + 1)) {
temp = i + 1;
if (map.get(temp).equals(answers[i])) {
System.out.print("true");
} else {
System.out.print("false");
}
}
}
else{
if (map.containsKey(i + 1)&&i<questionCount-1) {
temp = i + 1;
if (map.get(temp).equals(answers[i])) {
System.out.print("true ");
} else {
System.out.print("false ");
}
}
else{
temp = i + 1;
if (map.get(temp).equals(answers[i])) {
System.out.print("true");
} else {
System.out.print("false");
}
}
}
temp=0;
}
}
}
第一次作业相对比较简单,只是判断题目的正确与否。
第二次作业:
类图:
度量:
方法:
类
一个问题类,一个试卷类,一个答卷类。对应的类中构造相应的set()与get()方法。
第三次作业:
类图:
度量:
方法:
类:
一个问题类(Question),一个试卷类(paper1),一个答卷类(paper2),一个学生类(Student),一个删除题目类(Delete).
在第二次作业的基础上增加了学生类和删除题目类。
这里给出用正则表达表达式判断是否合法的代码:
//判断题目格式是否正确
String regex = "^#N:\\d+ #Q:.* #A:.*$";
//判断试卷格式是否正确
String regex = "#T:\\d+(\\s\\d+-\\d)+";
//判断学生信息格式是否正确
String regex ="#X:(\\d{8}) (\\w+)(?:-(\\d{8}) (\\w+))*$";
//判断答卷格式是否正确
String regex = "^#S:\\d+ \\d+( #A:\\d+\\-.*)*$";
//判断删除题目格式是否正确
String regex = "^#D:N-\\d+$";
总结
工具推荐
1、编辑器
typora
2、UML工具
idea自带的,选中所有类,右键--Diagrams--Show Diagram
3、复杂度分析工具:MetricsReloaded
idea菜单栏--文件--设置--Plugins--搜索MetricsReloaded--Install--重启idea
安装成功后,打开工程,选择你需要分析的类,然后右键--分析--Calculate Metrics
作业体会
1.先画思维导图
2.逻辑考虑全面
3.基础知识点要好
4.代码优化
5.细节处理(怎么建类,怎么去设计类与类间的关系)
展望
三次作业花了三周,在这三周内发现了自己很多问题,也在不断解决问题,重要的是现在的自己已经意识到java的学习要靠自己的不断练习,需要自己投入足够的时间与精力,任重而道远!希望接下来的学习能够保持热度,脚踏实地,稳步前行!