首页 > 其他分享 >NCHU PTA7-8次PTA题目集(成绩计算系列)以及期末考试

NCHU PTA7-8次PTA题目集(成绩计算系列)以及期末考试

时间:2023-12-09 23:15:22浏览次数:38  
标签:return String NCHU PTA courseSelection int PTA7 message public

一、前言:

最近几次的pta作业改变了以往的计价系统,转而要求我们计算成绩。起初,我并没有遇到太大困难,只需要多花一些时间就能完成。然而,由于前几次作业做得不好,导致我在接下来的两次作业中也没有取得好成绩。随着我们对Java的学习越来越深入,我们学习了类的概念,并进一步探讨了父类和接口的用法。这些知识在pta作业中能够派上用场,使我们的代码更加简洁和清晰。然而,对于这些知识的运用仍然存在一定的难度,需要我们有一定的理解才能灵活运用。

二、设计与分析:

PTA7:

我遇到的问题是我最麻烦困扰我最久的问题。程序在未运行时没有标红也就是没有语法错误,但是在运行时一直传出空指针错误

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;

public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
MessageGetAndPrint messageGetAndPrint = new MessageGetAndPrint();
messageGetAndPrint.print = new Print();
for(;;){
String message = in.readLine();
if(message.equals("end")) {
messageGetAndPrint.print.personPrint(messageGetAndPrint.students , messageGetAndPrint.courseSelections);
messageGetAndPrint.print.coursePrint(messageGetAndPrint.courses , messageGetAndPrint.courseSelections);
messageGetAndPrint.print.classPrint(messageGetAndPrint.classes , messageGetAndPrint.courseSelections);
break;
}
messageGetAndPrint.getMessage(message);
}
}
}
class Class {
private String classNum;
HashMap<String , Student> students;
Class(String classNum) {
setClassNum(classNum);
}
public void setClassNum(String classNum) {
this.classNum = classNum;
}
public String getClassNum() {
return classNum;
}
public void addStudent(Student student) {
students.put(student.getStudentNum() , student);
}
public void deleteStudent(String studentNum) {
students.remove(studentNum);
}
}
class Student {
private String name;
private String studentNum;
Student(String name , String studentNum) {
setName(name);
setStudentNum(studentNum);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentNum() {
return studentNum;
}
public void setStudentNum(String studentNum) {
this.studentNum = studentNum;
}
}
class Course {
private String className;
private int classQuality;
private int assessmentMethodology;
Course(String className , int classQuality , int assessmentMethodology) {
setClassName(className);
setClassQuality(classQuality);
setAssessmentMethodology(assessmentMethodology);
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public int getClassQuality() {
return classQuality;
}
public void setClassQuality(int classQuality) {
this.classQuality = classQuality;
}
public int getAssessmentMethodology() {
return assessmentMethodology;
}
public void setAssessmentMethodology(int assessmentMethodology) {
this.assessmentMethodology = assessmentMethodology;
}
}
class CourseSelection {
Student student;
Course course;
Grade grade;
}
abstract class Grade {
int allGrade;
abstract void getAllGrade();
}
class GradeA extends Grade {
private int finalGrade;
private int usualGrade;
GradeA(int finalGrade , int usualGrade) {
setFinalGrade(finalGrade);
setUsualGrade(usualGrade);
}
public void setFinalGrade(int finalGrade) {
this.finalGrade = finalGrade;
}
public int getFinalGrade() {
return finalGrade;
}
public void setUsualGrade(int usualGrade) {
this.usualGrade = usualGrade;
}
public int getUsualGrade() {
return usualGrade;
}
@Override
void getAllGrade() {
allGrade = (int) (finalGrade*0.7+usualGrade*0.3);
}
}
class GradeB extends Grade {
private int finalGrade;
GradeB(int finalGrade) {
setFinalGrade(finalGrade);
}
public void setFinalGrade(int finalGrade) {
this.finalGrade = finalGrade;
}
public int getFinalGrade() {
return finalGrade;
}
@Override
void getAllGrade() {
allGrade = finalGrade;
}
}
class GradeC extends Grade {
ArrayList<Integer> usualGrades;
GradeC(ArrayList<Integer> usualGrades) {
this.usualGrades = usualGrades;
}
@Override
void getAllGrade() {
allGrade = 0;
for(int x:usualGrades){
allGrade+=x;
}
allGrade = allGrade/usualGrades.size();
}
}
class Print {
public void personPrint(HashMap<String , Student> students , ArrayList<CourseSelection> courseSelections) {
Set<String> set = students.keySet();
Object[] arr=set.toArray();
Arrays.sort(arr);
for(Object key:arr) {
int x = 0 , y = -1;
for (CourseSelection courseSelection : courseSelections) {
if (students.get(key).getStudentNum().equals(courseSelection.student.getStudentNum())) {
if(y == -1)
y = 0;
courseSelection.grade.getAllGrade();
x += courseSelection.grade.allGrade;
y++;
}
}
if(y == -1) {
System.out.println(students.get(key).getStudentNum()+" "+students.get(key).getName()+" did not take any exams");
continue;
}
x = x / y;
System.out.println(students.get(key).getStudentNum()+" "+students.get(key).getName()+" "+x);

}
}
public void coursePrint(HashMap<String , Course> courses , ArrayList<CourseSelection> courseSelections) {
List<String> list = courses.keySet().stream().collect(Collectors.toList());
Collections.sort(list , new SoftName());
for(String key:list) {
int x = 0 , y = -1 , f = 0 , u = 0 , uy = -1 , s = -1;
for (CourseSelection courseSelection : courseSelections) {
if (courses.get(key).getClassName().equals(courseSelection.course.getClassName())) {
if(y == -1)
y = 0;
if(courses.get(key).getAssessmentMethodology() == 1 && uy == -1)
uy = 0;
if(courses.get(key).getAssessmentMethodology() == 3 && s == -1)
s = 0;
courseSelection.grade.getAllGrade();
x += courseSelection.grade.allGrade;
if(courseSelection.grade instanceof GradeA) {
f += ((GradeA) courseSelection.grade).getFinalGrade();
u += ((GradeA) courseSelection.grade).getUsualGrade();
uy++;
}
if(courseSelection.grade instanceof GradeB) {
f += ((GradeB) courseSelection.grade).getFinalGrade();
}
y++;
}
}
if(y == -1) {
System.out.println(courses.get(key).getClassName()+" has no grades yet");
continue;
}
x = x/y;
f = f/y;
if(s == 0) {
System.out.println(courses.get(key).getClassName()+" "+x);
continue;
}
if(uy == -1) {
System.out.println(courses.get(key).getClassName()+" "+f+" "+x);
}
if(uy != -1) {
u = u/uy;
System.out.println(courses.get(key).getClassName()+" "+u+" "+f+" "+x);
}
}
}
public void classPrint(HashMap<String , Class> classes , ArrayList<CourseSelection> courseSelections) {
Set<String> set = classes.keySet();
Object[] arr=set.toArray();
Arrays.sort(arr);
for(Object key:arr) {
int x = 0 , y = -1;
for(CourseSelection courseSelection : courseSelections) {
if(classes.get(key).students.containsKey(courseSelection.student.getStudentNum())) {
if(y == -1) {
y = 0;
}
courseSelection.grade.getAllGrade();
x += courseSelection.grade.allGrade;
y++;
}
}
if(y == -1) {
System.out.println(classes.get(key).getClassNum()+" has no grades yet");
continue;
}
x = x/y;
System.out.println(classes.get(key).getClassNum()+" "+x);
}
}
public void wrongFormat() {
}
public void courseExist(String name) {
}
public void courseMatch(String studentNum , String studentName) {
System.out.println(studentNum+" "+studentName+" : access mode mismatch");
}
public void courseMatch(String name) {
System.out.println(name+" : course type & access mode mismatch");
}
static class SoftName implements Comparator<String>{
public int compare(String name1 , String name2) {
Comparator<Object> compare = Collator.getInstance(Locale.CHINA);
return compare.compare(name1 , name2);
}
}
}
class MessageGetAndPrint {
Print print;
HashMap<String , Class> classes = new HashMap<>();
HashMap<String , Student> students = new HashMap<>();
HashMap<String , Course> courses = new HashMap<>();
ArrayList<CourseSelection> courseSelections = new ArrayList<>();
public void getMessage(String getInput) {
String[] message = getInput.split(" ");
if(getInput.matches("^(\\S{1,10})( )(必修)$")) {
int i = 1, j = 1;
if(courses.containsKey(message[0])) {
return;
}
Course course = new Course(message[0], i, j);
courses.put(message[0], course);
return;
}
if(getInput.matches("^(\\S{1,10})( )(必修|选修|实验)( )(考试|考察|实验)$")) {
int i = 0, j = 0;
if(message[1].equals("必修")) {
i = 1;
}
if(message[1].equals("选修")) {
i = 2;
}
if(message[1].equals("实验")) {
i = 3;
}
if(message[2].equals("考试")) {
j = 1;
}
if(message[2].equals("考察")) {
j = 2;
}
if(message[2].equals("实验")) {
j = 3;
}
if(i == 1 && j != 1) {
print.courseMatch(message[0]);
return;
}
if(i == 3 && j != 3) {
print.courseMatch(message[0]);
return;
}
if(i != 3 && j == 3) {
print.courseMatch(message[0]);
return;
}
if(courses.containsKey(message[0])) {
return;
}
Course course = new Course(message[0], i, j);
courses.put(message[0], course);
return;
}
if(getInput.matches("^([0-9]{8})( )(\\S{1,10})( )(\\S{1,10})( )([0-9]|[1-9][0-9]|100)( )([0-9]|[1-9][0-9]|100)$")) {
for(CourseSelection courseSelection:courseSelections) {
if(courseSelection.student.getStudentNum().equals(message[0])&&courseSelection.student.getName().equals(message[1])&&courseSelection.course.getClassName().equals(message[2])) {
return;
}
}
Student student = new Student(message[1], message[0]);
students.put(message[0] , student);
String classNum = message[0].substring(0 , 6);
if(!classes.containsKey(classNum)) {
Class aClass = new Class(classNum);
classes.put(classNum , aClass);
classes.get(classNum).students = new HashMap<>();
}
classes.get(classNum).students.put(message[0], student);
if(!courses.containsKey(message[2])) {
print.courseExist(message[2]);
return;
}
if(courses.get(message[2]).getAssessmentMethodology() != 1) {
print.courseMatch(message[0] , message[1]);
return;
}
CourseSelection courseSelection = new CourseSelection();
courseSelection.student = student;
courseSelection.course = courses.get(message[2]);
int finalGrade = Integer.parseInt(message[4]);
int usualGrade = Integer.parseInt(message[3]);
courseSelection.grade = new GradeA(finalGrade , usualGrade);
courseSelections.add(courseSelection);
return;
}
if(getInput.matches("^([0-9]{8})( )(\\S{1,10})( )(\\S{1,10})( )([0-9]|[1-9][0-9]|10{2})$")) {
for(CourseSelection courseSelection:courseSelections) {
if(courseSelection.student.getStudentNum().equals(message[0])&&courseSelection.student.getName().equals(message[1])&&courseSelection.course.getClassName().equals(message[2])) {
return;
}
}
Student student = new Student(message[1], message[0]);
students.put(message[0] , student);
String classNum = message[0].substring(0 , 6);
if(!classes.containsKey(classNum)) {
Class aClass = new Class(classNum);
classes.put(classNum , aClass);
classes.get(classNum).students = new HashMap<>();
}
classes.get(classNum).addStudent(student);
if(!courses.containsKey(message[2])) {
print.courseExist(message[2]);
return;
}
if(courses.get(message[2]).getAssessmentMethodology() != 2) {
print.courseMatch(message[0] , message[1]);
return;
}
CourseSelection courseSelection = new CourseSelection();
courseSelection.student = student;
courseSelection.course = courses.get(message[2]);
int finalGrade = Integer.parseInt(message[3]);
courseSelection.grade = new GradeB(finalGrade);
courseSelections.add(courseSelection);
return;
}
if(getInput.matches("^([0-9]{8})( )(\\S{1,10})( )(\\S{1,10})( )([4-9])( )((([0-9]|[1-9][0-9]|100)( ))+)([0-9]|[1-9][0-9]|100)$")) {
for(CourseSelection courseSelection:courseSelections) {
if(courseSelection.student.getStudentNum().equals(message[0])&&courseSelection.student.getName().equals(message[1])&&courseSelection.course.getClassName().equals(message[2])) {
return;
}
}
Student student = new Student(message[1], message[0]);
students.put(message[0] , student);
String classNum = message[0].substring(0 , 6);
if(!classes.containsKey(classNum)) {
Class aClass = new Class(classNum);
classes.put(classNum , aClass);
classes.get(classNum).students = new HashMap<>();
}
classes.get(classNum).addStudent(student);
if(!courses.containsKey(message[2])) {
print.courseExist(message[2]);
return;
}
if(courses.get(message[2]).getAssessmentMethodology() != 3) {
print.courseMatch(message[0] , message[1]);
return;
}
int usualNum = Integer.parseInt(message[3]);
if(message.length-4 != usualNum) {
print.courseMatch(message[0] , message[1]);
return;
}
CourseSelection courseSelection = new CourseSelection();
courseSelection.student = student;
courseSelection.course = courses.get(message[2]);
ArrayList<Integer> usualGrades = new ArrayList<>();
for(int i = 1;i <= usualNum;i++) {
usualGrades.add(Integer.parseInt(message[3+i]));
}
courseSelection.grade = new GradeC(usualGrades);
courseSelections.add(courseSelection);
return;
}
print.wrongFormat();
}
}

首先,代码定义了几个类:Student(学生)、Course(课程)、Class(班级)、Grade(成绩)等。每个类都有相应的属性和方法来描述和操作学生、课程、班级和成绩信息。

Main 类中,程序通过读取控制台输入的信息,创建 MessageGetAndPrint 对象,并调用其中的方法来处理输入的信息。同时,还定义了 Print 类来输出不同类型的统计信息。

MessageGetAndPrint 类的 getMessage 方法根据不同的输入格式,从输入中提取信息并进行相应的处理,比如添加学生、课程,设置成绩等操作。同时,根据输入的内容,调用 Print 类的方法进行输出。

整体而言,这段代码实现了一个简单的学生成绩管理系统,可以处理学生、课程和成绩信息,并能够按照要求进行统计和输出。

 

结果分析:

从在Source Monitor上代码质量分析结果中可以看出整体代码复杂度不是很高,具有一定的可读性。从上图数据中也可以看出大部分数值都在正常范围内,没有很复杂的地方

PTA8:

此次作业又增加了一些需求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。这样就需要我们重新设计类以及代码的一些结构,很遗憾我没啥实力做不对

踩坑心得:

作为一个Java的初学者,我的学习过程中遇到了很多问题和困难。在这里,我想分享一些我在Java学习中的心得体会,希望对其他初学者有所帮助。

首先,我认为理解面向对象思想是Java编程的基础。在学习Java时,我遇到了很多有关对象、类、继承、封装等概念的问题。例如,在设计程序时,如何正确地定义类、如何合理使用继承和封装等问题。通过学习这些概念,我逐渐掌握了Java的面向对象编程思想,也能够更好地组织自己的代码结构。

其次,异常处理是Java编程中必须要掌握的知识点。在我的学习过程中,我发现如果程序没有进行异常处理,很容易出现程序崩溃的情况。因此,我学会了使用try-catch语句块来捕获异常,并及时处理或输出错误信息,以提高程序的健壮性。

另外,集合框架也是Java编程中一个非常重要的知识点。在我的学习过程中,我遇到了很多需要管理数据的情况。通过学习Java的集合框架,我能够更方便地操作和管理数据。但是,在使用集合框架时,我也遇到了一些问题,如空指针异常和并发修改异常等。通过学习和实践,我学会了如何避免这些问题,例如使用同步控制来避免并发修改异常。

同时,在实际开发中,我也经常需要处理字符串。Java提供了很多关于字符串的操作方法,例如拼接、截取、分割等。但是,在我的学习过程中,我发现如果频繁地对字符串进行修改,会导致内存浪费。因此,我学会了使用StringBuilder或StringBuffer类来处理大量的字符串操作,以提高程序的性能。

最后,我认为坚持学习和实践是学好Java编程的关键。在我的学习过程中,我遇到了很多问题和困难,但只要坚持学习、积极思考,并勇于尝试解决问题,就一定能够逐渐掌握Java编程的技巧和方法。

总之,在学习Java编程时,要注意理解面向对象思想、掌握异常处理、熟悉集合框架、了解字符串操作、注意内存管理等方面的知识。同时,坚持学习和实践也是非常重要的。

改进建议:

代码改进非常重要,重复的代码会增加程序的复杂性,降低可读性,从而使后续改进变得困难。此外,在主函数中过多的if判断语句和for循环会拖慢程序的运行速度。因此,在日后的编程中,我们应该花更多时间去优化代码,删除不必要的重复代码。同时,尽量减少在主函数中使用if语句,以降低整体复杂度。

通过不断打磨代码,我们可以提高程序的质量和可维护性。避免重复代码可以使用方法抽取等技术进行优化。另外,可以考虑使用数据结构和算法来优化循环和判断逻辑,提高程序的效率。

总之,优化代码是一个持续的过程,需要我们在编程中时刻关注并不断改进。只有通过精益求精的态度和良好的编码习惯,才能写出高质量、高效率且易于维护的代码。

总结:

在学习Java的过程中,我获得了许多宝贵的经验和技能。以下是我对这一学习经历的综合性总结:

  1. 基础知识的扎实掌握:学习Java的第一步是掌握基础知识,例如变量、数据类型、运算符等。通过系统的课程学习和练习,我能够熟练地运用这些基础知识,并且理解Java语言的核心概念和特性。

  2. 面向对象编程的应用:Java是一种面向对象的编程语言,因此深入理解面向对象编程的思想是非常重要的。我通过学习Java中的类、对象、继承、多态等概念,能够编写出结构清晰、易于维护的代码。

  3. Java API和开发工具的使用:Java提供了大量的API,包括集合框架、输入输出、网络编程等。我通过学习和使用这些API,能够更加高效地编写代码。同时,我还学会了开发工具的使用,例如Eclipse和IntelliJ IDEA等,使编程工作更加方便和舒适。

  4. Web开发技术的应用:Java在Web应用程序开发中广泛应用,例如Servlet、JSP、Spring框架和SpringMVC等。我通过学习这些技术,能够熟练地开发Web应用程序,并且了解RESTful API的设计和实现。

  5. 数据库操作和ORM框架的应用:Java还提供了强大的数据库操作支持,例如JDBC和Hibernate等ORM框架。我学会了使用MySQL等关系型数据库,并能够利用JDBC技术进行数据的增删改查操作。同时,我还学习了Hibernate等ORM框架的使用,简化了数据库操作的流程。

总的来说,学习Java是一项非常有价值的经历。在这个过程中,我不仅获得了扎实的编程基础和丰富的开发技能,还培养了自主学习和探索精神。这些知识和技能将对我的职业发展起到重要的支持作用,并且我会继续保持学习的态度,不断提升自己的技术水平。

标签:return,String,NCHU,PTA,courseSelection,int,PTA7,message,public
From: https://www.cnblogs.com/wqwq5240yy/p/17891970.html

相关文章

  • 第三次blog-7-8次PTA题目集及期末考试总结
    一、前言第三次作业主要针对课程成绩统计程序的迭代以及期末考试的总结课程程序2是在第一次的基础上增加了实验课的情况,由于我程序1的框架打的不好,时间过了很久之后记忆不深,加之程序2开始的比较晚,又重新打了一个框架,但仍然很乱很碎,最后匆忙赶了两天也只拿了80分课程程序3在第二......
  • pta7,8加期末
    1.前言在当今信息爆炸的时代,Java作为一门强大且广泛应用的编程语言,已经成为了众多开发者的首选。它的跨平台性、健壮性以及丰富的生态系统,使得它在企业级应用、移动应用、大数据处理等领域都有着广泛的应用。本博客我们将会深入探讨Java语言的基础概念和核心特性,如面向......
  • 7-8次PTA题目集(成绩计算系列)以及期末考试
    一、前言第7-8次的题目集相对于前几次的题目集而言题量虽多了点,但是难度有适当的降低,比较考察学生上课学习到基本的算法和知识,考察多的为课程成绩统计程序2-3这一类题目,这两题代码量还是比较大的,不比之前写的菜单计价少,但难度相比菜单计价还是低了一点的,整个题目集主要都考察多态......
  • PTA|C语言|结构体
    --------------------------------------------------------------------------------计算两个复数之积本题要求实现一个计算复数之积的简单函数。函数接口定义:structcomplexmultiply(structcomplexx,structcomplexy);其中structcomplex是复数结构体,其定义如下:structcompl......
  • 7-8次PTA和期末成绩总结
     (1)前言:总结之前所涉及到的知识点、题量、难度等情况课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式(修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成)。......
  • 记录issue:iptables (legacy): Couldn't load match `comment':No such file or direct
    用nerdctl起容器碰到如下issue:FATA[0001]failedtocreateshimtask:OCIruntimecreatefailed:runccreatefailed:unabletostartcontainerprocess:errorduringcontainerinit:errorrunninghook#0:errorrunninghook:exitstatus1,stdout:,stderr:tim......
  • iptables 学习
    iptables一、图二、规则写法格式:iptables[-ttable]COMMANDchainCRETIRIA-jACTION-ttable:3个filternatmangleCOMMAND:定义如何对规则进行管理chain指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候是可以省略的CRETIRIA:指定匹配标准-jA......
  • PTA-第三次机考题解
    PTA-第三次机考题解7-1玩游戏一典型的二分模版题,之前发的第十一次练习题目中对二分有详细的讲解,这道题就是二分的第二种模版,原封不动。相信认真看过的同学还是有思路的。嘿嘿!给没有看过的同学下面再讲一次二分:直接讲整数二分,浮点数二分只需要修改细节就好(直接讲两种模版,所有......
  • PTA-2023第十二次练习题目题解
    PTA-2023第十二次练习题目题解(祝大家机考顺利)以下代码已做防抄袭处理,切勿抄袭。注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。6-24实验8_3_设计函数利用冒泡排序的思想,将每一列的最小值放到每列的最后一个位置。voi......
  • PTA7、8、期末考试总结
    PTA7、8、期末考试总结写在前面:此次的7、8两次PTA作业总体难度没有之前难,主要考察的是哈希表以及动态数组的运用,只要肯研究,肯学习就可以写的可以。PTA总结:7-1容器-HashMap-检索分数10全屏浏览题目切换布局作者 蔡轲单位 南昌航空大学输入多......