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;
        }

    }
}

第一次作业相对比较简单,只是判断题目的正确与否。

第二次作业:

类图:

image-20240420141911343

度量:

方法:

image-20240420150449608

image-20240420150509010

一个问题类,一个试卷类,一个答卷类。对应的类中构造相应的set()与get()方法。

第三次作业:

类图:

Pta3

度量:

方法:

image-20240420150552259

类:

image-20240420150619071

一个问题类(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的学习要靠自己的不断练习,需要自己投入足够的时间与精力,任重而道远!希望接下来的学习能够保持热度,脚踏实地,稳步前行!

posted @ 2024-04-20 15:57  彭嘉良  阅读(13)  评论(0编辑  收藏  举报