首页 > 其他分享 >第一次blog

第一次blog

时间:2024-04-21 23:01:54浏览次数:22  
标签:代码 List answers blog parts 第一次 line split

前言:我在大一上学期学习了c语言,然后在下学期学习了第二门语言java,因为之前c语言学的挺一般的,然后在这学期学习java感觉还是挺不简单的,要自学很多东西,在这段时间里,我学习了JAVA的基本语法。逻辑结构的使用,学习了类的使用,和类的基本概念,学会了如何封装程序,使得代码更加严谨,代码也更加简洁,一看就懂,调用的类分别装了什么,使得整个代码更加简洁。
在学习Java的过程中,前期的⽐较基础的知识点掌握得都还不错,但对于后⾯的⾯向对象的编程语⾔的特性,⽐如继承,构造器,抽象类,接⼝,⽅法的多态,重载,覆盖,Java的异常处理机制等等还理解的不够透彻,需要花费更多的时间,才能够彻底把这些概念都搞清楚,把书上⾯的例⼦反复的揣摩,修改,尝试,才能彻底领悟。还有Java的类库。基础类库⾥⾯的类⾮常⾮常多。据说有3000多个。但是平时真正⾼频率使⽤的只有⼏个,⽐如说 java.io.; java.util.; java.sql.*;等
在这三次的大作业中主要困扰我的是第三次大作业的最后一题,不知道该如何去修改之前的代码,调试题目的测试点也很多,需要慢慢的花时间去调试,还要充分理解正则表达式,以及正确运用正则表达式。还有哈希表的
学习与应用都是这道题目的难点。
设计与分析:在第2次大作业的最后一题中主要是添加了删除内容。
(这是对应第2题的uml图)
如:
public void setAnswers(List answers) {
this.answers = answers;
}
public void setAnswersList(List answersList) {
this.answers = answersList;
}

public List getAnswersList() {
return answers;
}
public List getAnswers() {
return answers;
}
,创建了 answersList ,运用确定其范围,setAnswers(List answers) 方法接收一个 List 类型的参数 answers,然后将其赋值给类中的成员变量 answers。这个方法用于设置答案。

setAnswersList(List answersList) 方法也接收一个 List 类型的参数 answersList,然后将其赋值给类中的成员变量 answers。这个方法也用于设置答案。

getAnswersList() 方法用于获取答案,它返回类中的成员变量 answers,这个方法返回的是一个 List 类型的答案列表。

getAnswers() 方法也用于获取答案,同样返回类中的成员变量 answers,这个方法也返回一个 List 类型的答案列表。

while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.equals("end")) {
break;
}

        if (line.startsWith("#N:")) {
            String[] parts = line.split(" ");
            int number = Integer.parseInt(parts[0].split(":")[1]);
            String content = parts[1].split(":")[1];
            String answer = parts[2].split(":")[1];
            questionMap.put(number, new Question(number, content, answer));
        } else if (line.startsWith("#T:")) {
            String[] parts = line.split(" ");
            int paperNumber = Integer.parseInt(parts[0].split(":")[1]);
            TestPaper testPaper = new TestPaper(paperNumber);
            for (int i = 1; i < parts.length; i++) {
                String[] qInfo = parts[i].split("-");
                testPaper.addQuestionScore(Integer.parseInt(qInfo[0]), Integer.parseInt(qInfo[1]));
            }
            testPaperMap.put(paperNumber, testPaper);
        } else if (line.startsWith("#S:")) {
            String[] parts = line.split(" ");
            int paperNumber = Integer.parseInt(parts[0].split(":")[1]);
            AnswerSheet answerSheet = new AnswerSheet(paperNumber);
            for (int i = 1; i < parts.length; i++) {
                answerSheet.addAnswer(parts[i].split(":")[1]);
            }
            answerSheets.add(answerSheet);
        }
    }

while (scanner.hasNext()) {:这是一个while循环,条件是检查输入是否还有下一行数据。scanner是一个扫描器对象,用于从输入流中读取数据。

String line = scanner.nextLine();:从输入流中读取下一行数据,并将其存储在字符串变量line中。

if (line.equals("end")) { break; }:如果当前行是"end",则退出循环,停止读取输入。这个条件检查确保循环在遇到"end"时结束,防止继续读取无关的数据。

接下来是一系列if-else语句,用于根据不同的行格式解析数据:

如果当前行以#N:开头,则表示这是一个题目信息。程序将该行按空格分割,并解析题目编号、内容和答案,然后将这些信息存储在questionMap中。
如果当前行以#T:开头,则表示这是一个考卷信息。程序将该行按空格分割,并解析考卷编号和各题的得分信息,然后将这些信息存储在testPaperMap中。
如果当前行以#S:开头,则表示这是一个答题卡信息。程序将该行按空格分割,并解析答题卡编号和各题的答案,然后将这些信息存储在answerSheets列表中。
循环结束条件是遇到了"end"行,此时会退出循环。

踩坑心得:我的第2次大作业
for (int i = 1; i <= answerSheet.getAnswers().size(); i++) {

            if (question != null) {
                totalScore += question.getAnswer().equals(answerSheet.getAnswerForQuestion(i)) ? testPaper.getScoreForQuestion(i) : 0;
            }
        }
       System.out.println(totalScore + " " + testPaper.getTotalScore() + "~" + totalScore);

    }

看似没有什么问题,但哈希表确定的范围有问题,修改后加上了 Question question = questionMap.get(i);
在后续两个作业集中思路是大概一致的但是多了学号,试卷,答卷的输入与输出,和删除题目的功能。

来分别获取学号,答卷的信息,要重新设计正则表达式来匹配对应的字符串输入。然后分别进行处理把数据存入哈希表。
改进建议:这段代码已经相当不错了,但是还有一些改进的地方可以考虑:

异常处理:在解析整数时,应该考虑到可能抛出NumberFormatException异常。可以在解析整数的地方添加异常处理机制,以处理非法输入的情况。
try {
int number = Integer.parseInt(parts[0].split("

标签:代码,List,answers,blog,parts,第一次,line,split
From: https://www.cnblogs.com/zhujiangbing/p/18149692

相关文章

  • Blog1-3
    Blog1-3总结1.前言三个礼拜左右的pta训练,让我成功认知到了学校对java这门课程的重视。总体而言,这三次pta难度都是比较大的,让我的头发掉了一根又一根,而且题目难度跨度太大了,让人有点难以适应,也是因为难度跨度很大,导致分数的分配也不是很均匀。还有就是有些测试点真的有点奇怪,让......
  • 第一次Blog
    一.前言在前三次大作业中,设计的均为我们学习生活中常见的答题判题程序,适用于常见的一些网上答题系统,例如我们常见的学习通考试系统。总结前三次大作业,主要知识点第一则为类。利用类能够很好的解决前三次大作业的问题。在后两次大作业中则额外考查了动态数组,链表以及hashmap的知识......
  • OOP课程第一次Blog
    目录1.前言:2.设计与分析:第一次大作业7-5:第一次大作业7-5总结:第二次大作业7-4:第二次大作业7-4总结:第三次大作业7-3:第三次大作业7-3总结:3.踩坑心得:4.改进建议:5.总结:1.前言:题目集1:这次的作业题目量较大,而且最后一题难度不小,然后是第一次使用Java语言编写代码,对于类的使用以及Java的......
  • 第一次blog
    一、作业总结从难度来看,这三次的大作业最后一题都是由一种题目发展扩充来的,不断的深入。因为每次的最后一题涉及的范围越来越广、对每条输入的格式严格要求以及在不同情况下输出不同的语句,所以显而易见的,三次作业的难度在逐渐提升,这也就代表着我们需要更好的思维和逻辑以及方法。......
  • 第一次题目总结
    前言:本次发布的题目集1-3,主要是对类和对象的使用的考察,题量比较适中,难度设置合理,如风扇类设计比较简单,整体就是为了熟悉类的使用,后续的题目加入了一些要求,加强对类和对象的熟悉,难点集中在每次的答题系统迭代上,非常考验类之间的关联使用。每次题目集都会有一些简单的基础题目来熟......
  • 第一次Blog
    前言:个人感觉第一次练习主要是类的构建和相互运用的基础练习,像是第一题便是从风扇类的构建入手,然后逐渐添加对类的运用和类之间关联的需求,最后一题除了是这些需求的结合版以外,还是接下来两次练习最后一题的基底第二次练习在第一次练习的基础上不仅增加了类与类之间关系掌握和......
  • 第一次Blog
    (1)前言:面向对象程序设计(java)是一种区别于c语言的设计语言,其最大的区别便是c语言为面向过程,逻辑为线性逻辑,而java将所要进行的操作分散到各个类当中去,分别完成某项任务,直观的讲便是,c语言是一条简单的流水线,这条流水线上便可完成所有内容,故为线性逻辑,而java则是一座大型工厂,里面有不......
  • OOP课程第一次vlog-23201914-钱文浩
    一、前言1.知识点:第一次题目初步考察了正则表达式,其中包括正则表达式的判断(matches函数)和分割(split函数)。初步考察了类与对象的设计,比如实体类(试卷类,题目类等)、控制类(改卷类等),考查学生对实际问题的需求提取与分析。第二次题目进一步加强对上述各方面内容的考察。而且因为题目加......
  • 23201228-第一次Blog
    一、前言:从大一下学期开始学习java到现在,已经完成了三次PTA用java实现的大作业,三次PTA作业的难度在逐渐增大,每次最后一题都是从第一次PTA大作业里迭代而来,难度很大且每次提升,涉及的内容有很多,比如类,方法,Arraylist等,但最主要的还是类的设计,通过这三次作业,很深刻的认识的了设计对于......
  • 南昌空大学第一次PTA小结blog
    不相同与上学期的C语言,java在面向对象与面向过程,安全性与垃圾回收,跨平台性,速度与效率,应用领域,语法特性等方面存在显著的差异,而且java也是我们软件工程以后所使用的基础,接下来我分享第一次作业的总结。本次作业分为以下部分:(1)总结三次题目集的知识点、题量、难度等情况。(2)设计与......