首页 > 其他分享 >pta第三阶段题目集

pta第三阶段题目集

时间:2023-06-27 17:56:22浏览次数:38  
标签:sort 第三阶段 题目 name str3 pta int array 成绩

一、前言

本次题目集由oop8-11训练集所组成,题目集里主要由课程成绩统计程序、用set及map统计java程序中关键词的出现次数、用HashMap进行索检以及排序、ArrayList排序、身份证排序、ArrayIntegerStack、覆盖,其中课程成绩统计程序进行了三次迭代。

 

二、设计与分析

OOP8训练题集总结

第一题:课程成绩统计程序-1:

 本题我创了Student、Course、CourseLIst、Class、Choose、Score、ExamScore、AssessmentScore以及Main类

在Main类中将输入的每行内容通过空格分开,然后再依次放入字符串数组array里,再通过字符串长度来识别输入的是课程信息还是学生信息,如果长度为3,就是课程信息,把课程的名字、类型、考试方式放到CourseList的ArrayLIst里面;如果长度为4或者5,就是学生信息,就分别把学号和班号放入Choose类的的ArrayList里,把学生的考试科目以及成绩放入Student类的ArrayList里面。

while(!str.equals("end")) {
String[]array=str.split(" ");
if(array.length==3) {
course1=array[0];
sort=array[1];
examsort=array[2];
courselist.addTocourselist(array[0], array[1], array[2]);
}
if(array.length==4) {
number=Integer.parseInt(array[0]);
classnumber=number/100;
name=array[1];
course1=array[2];
score1=Integer.parseInt(array[3]);
if(!array[0].matches("[0-9]{8}")||name.length()>10||score1>100||score1<0||course1.length()>10){
System.out.println("wrong format");
}else{
choose.addclass(classnumber);
for(int i=0;i<choose.aclass.size();i++) {
if(choose.aclass.get(i).getClassnumber()==classnumber) {
choose.aclass.get(i).addstudent(number, name);
choose.aclass.get(i).student1.get(choose.aclass.get(i).student1.size() - 1).addstudentcourse(courselist, course1, score1);
break;
}
}
}
}

然后再对数据进行排序

for(int i=0;i<choose.aclass.size();i++){
Collections.sort(choose.aclass.get(i).student1,new Comparator<Student>(){
@Override
public int compare(Student o1,Student o2){
return o1.number-o2.number;
}
});
}
Collections.sort(courselist.courselist, new Comparator<Course>() {
@Override
public int compare(Course o1, Course o2) {
Comparator<Object> compare=Collator.getInstance(java.util.Locale.CHINA);
return compare.compare(o1.coursename,o2.coursename);
}
});

Collections.sort(choose.aclass, new Comparator<Class>() {
@Override
public int compare(Class o1, Class o2) {
return o1.classnumber-o2.classnumber;
}
});

在Score、ExamScore、AssessmentScore放入计算最终成绩的方法。Course类加一个有参构造,可以识别课程的类型是选修还是必修,然后再对应相应的成绩是ExamScore还是AssessmentScore,此类中还由计算课程平时分的均分、期末均分、最终成绩均分。Student类放入收集学生课程的成绩的ArrayLIst,再放入相应的添加进ArryaList的方法。Class类放入一个收集学生的学号和姓名的ArrayList。Choose类放入收集每个班级的信息的ArrayList。CourseList存入全部课程的信息。

OOP9训练题集总结

第一题:统计Java程序中关键词的出现次数

编写程序统计一个输入的Java源码中关键字(区分大小写)出现的次数。说明如下:

  • Java中共有53个关键字(自行百度)
  • 从键盘输入一段源码,统计这段源码中出现的关键字的数量
  • 注释中出现的关键字不用统计
  • 字符串中出现的关键字不用统计
  • 统计出的关键字及数量按照关键字升序进行排序输出
  • 未输入源码则认为输入非法

 

 本题总结:本题用了HashMap和Map来存取建的对象,先用字符串数组来存取全部的关键字,然后输入文本

先用正则表达式识别//,如果有//,就用//把这段文本分隔并分别放入字符串数组str1,并只取前半部分,然后再输入。

while(!str.equals("exit")) {
if(str.matches("(.*)//(.*)")) {String str1[]=str.split("//");
str2.append(str1[0]+" ");
}
else {str2.append(str+" ");
}
str=input.nextLine();
}

再对一些符号进行识别然后用空格替换

String str3=str2.toString();
Pattern n=Pattern.compile("\"(.*?)\"");
Matcher m=n.matcher(str3);
while(m.find()){
str3=str3.replace(m.group()," ");
n=Pattern.compile("\"(.*?)\"");
m=n.matcher(str3);
}
n=Pattern.compile("/\\**(.*?)/");
m=n.matcher(str3);
while(m.find()){
str3=str3.replace(m.group()," ");
m=n.matcher(str3);
}

if(str3.isEmpty()) {
System.out.println("Wrong Format");
System.exit(0);
}

然后再继续替换一些符号

str3=str3.replace("+","a");
str3=str3.replace(">","a");
str3=str3.replace("=","a");
str3=str3.replace("!","a");
str3=str3.replace(":","a");
str3=str3.replace("["," ");
str3=str3.replace("]"," ");
str3=str3.replace("-","a");
str3=str3.replace("*","a");
str3=str3.replace("/","a");
str3=str3.replace("\\","a");
str3= str3.replaceAll("[^a-zA-Z]", " ");
String []s1=str3.split("[ ' ']");

然后进行关键词匹配,如果匹配将其放入map里面

for(int i=0;i<s1.length;i++) {
for(int j=0;j<keywords.length;j++)
if(s1[i].equals(keywords[j])) {
map.put(keywords[j], 0);
}
}

for( int i = 0;i<s1.length;i++) {
for(int j=0;j<keywords.length;j++)
if(s1[i].equals(keywords[j])) {
count=map.get(keywords[j]);
map.put(keywords[j], count+1);
}
}

再对提取的关键词进行排序然后输出

Set set=map.keySet();
Object[] arr=set.toArray();
Arrays.sort(arr);
for(Object k:arr){
System.out.println(map.get(k)+"\t"+k);
}

OOP10训练题集总结

第一题:容器-HashMap-检索

输入多个学生的成绩信息,包括:学号、姓名、成绩。

学号是每个学生的唯一识别号,互不相同。

姓名可能会存在重复。

使用HashMap存储学生信息,并实现根据学号的检索功能

 

本题总结:本题主要是用hashmap去存取键和键对象,先定义一个HashMap,然后输入,再将输入的一行用空格分隔,再分别放入字符串数组array中,如果字符串数组长度为3,将学生的姓名和成绩合为一个字符串str2,再分别把学号和str2放入以学号为键的hashmap。再输入要查找的学号,如果hashmap中containskey就输出学号和键对象,如果没有就输出The student "+num+" does not exist。 第二题: 容器-HashMap-排序

输入多个学生的成绩信息,包括:学号、姓名、成绩。

学号是每个学生的唯一识别号,互不相同。

姓名可能会存在重复。

要求:使用HashMap存储学生信息。

本题总结:本题主要是用treemap去进行降序排序

TreeMap<Integer, String> treeMap = new TreeMap<>(new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});

然后后面步骤和题目一大致相同,最后输出有点不一样

for(Map.Entry<Integer, String> entrySet : treeMap.entrySet()){
System.out.println(entrySet.getKey() + " " + entrySet.getValue());

}

第四题:动物发声模拟器(多态)

设计一个动物发生模拟器,用于模拟不同动物的叫声。比如狮吼、虎啸、狗旺旺、猫喵喵……。
定义抽象类Animal,包含两个抽象方法:获取动物类别getAnimalClass()、动物叫shout();
然后基于抽象类Animal定义狗类Dog、猫类Cat和山羊Goat,用getAnimalClass()方法返回不同的动物类别(比如猫,狗,山羊),用shout()方法分别输出不同的叫声(比如喵喵、汪汪、咩咩)。
最后编写AnimalShoutTest类测试,输出:
猫的叫声:喵喵
狗的叫声:汪汪
山羊的叫声:咩咩

其中,在AnimalShoutTestMain类中,用speak(Animal animal){}方法输出动物animal的叫声,在main()方法中调用speak()方法,分别输出猫、狗和山羊对象的叫声。

 

 本题总结:本题主要考察多态,创建了Dog、Cat、Goat和Animal抽象类以及Main类。

抽象类Ainmal放两个抽象方法abstract String getAnimalClass()、abstract void shout()

然后在其子类Dog、Cat、Goat类中复写方法String getAinmalClass()、void shout()。

在Main类中写出静态方法speak(Animal animal),然后分别newCat、Dog、Goat的对象,再分别把他们三个的对象当作speak方法的参数。

第三题:课程成绩统计程序-2

 本题总结:本题相较于oop8的成绩统计程序-1,本题增加了实验课,且实验课的成绩必须为实验,

实验课程成绩信息包括:学号、姓名、课程名称、实验次数、每次成绩,实验次数至少4次,不超过9次。

在成绩统计程序-1的基础上我加了一个ExperimentScore类,为Score的子类。在Main类里,在识别字符串长度时加入一个长度大于5和第4个数字是否为4-9的数字的判断,如果大于5并且满足低个数字为4-9,说明是学生的实验成绩,然后对其判断是否为合法输入,如果是分别将学生的信息和考试成绩信息放入相应的ArrayList里面,

if(array.length>5){
if(array[3].matches("^[4-9]")) {
Score score = new AssessmentScore();
number = Integer.parseInt(array[0]);
name = array[1];
course1 = array[2];
number1 = Integer.parseInt(array[3]);
classnumber = number / 100;
choose.addclass(classnumber);
if (!array[0].matches("[0-9]{8}") || name.length() > 10 || course1.length() > 10) {
System.out.println("wrong format");
} else {
choose.addclass(classnumber);
for (int i = 0; i < choose.aclass.size(); i++) {
if (choose.aclass.get(i).getClassnumber() == classnumber) {
choose.aclass.get(i).addstudent(number, name);
for (int j = 4; j < array.length; j++) {
score.addExperimentscorelist(Integer.parseInt(array[j]));
}
choose.aclass.get(i).student1.get(choose.aclass.get(i).student1.size() - 1).addstudentcourse(courselist, course1, number1, score);
break;
}
}
}
}
else System.out.println("wrong format");
}

在Student类里面加一个加入实验成绩到ArrayList的方法,这样就能录入实验的成绩了。

 

public void addstudentcourse(CourseList courselist, String name,int number,Score experimentscorelist) {
Score score1=new ExperimentScore();
int i = 0;
int flag=0;
for (Course course : courselist.courselist) {
if (course.getCoursename().equals(name)) {
for (int j = 0; j < course1.size(); j++) {
if (course1.get(j).getCoursename().equals(name)) {
flag = 1;
}
}
if (flag == 0) {
if (course.examsort.equals("考察")) {
System.out.println(getNumber() + " " + getName() + " : access mode mismatch");
} else {
Course course2 = new Course(course.coursename, course.sort, course.examsort);
course2.score.setExperimentallscore(experimentscorelist.getExperimentallscore());
for(int m:experimentscorelist.experimentscorelist){
course2.score.experimentscorelist.add(m);
}
course1.add(course2);
courselist.courselist.get(i).coursescore += experimentscorelist.getExperimentallscore();
courselist.courselist.get(i).cnt++;
}
}
}
i++;
}

在Course类里面加入sort是否为实验的判断,如果是就为ExperimentScore.

public Course(String coursename, String sort, String examsort) {
this.coursename = coursename;
this.sort = sort;
this.examsort = examsort;
if (sort.equals("必修")) {
this.score = new ExamScore();
}
if (sort.equals("选修")) {
if (examsort.equals("考察")) {
this.score = new AssessmentScore();
} else {
this.score = new ExamScore();
}
}
if(sort.equals("实验")){
this.score=new ExperimentScore();
}
}

在Score类里加一个ArrayList来放置实验的成绩,加一个加入这个ArrayList的方法,加一个计算实验的成绩的方法。

public int getExperimentallscore(){
int sum=0;
for(int i=0;i<experimentscorelist.size();i++){
sum+=experimentscorelist.get(i);
}
experimentallscore=sum/experimentscorelist.size();
return experimentallscore;
}

OOP9训练题集总结

第一题:容器-ArrayList-排序

输入多个学生的成绩信息,包括:学号、姓名、数学成绩、物理成绩。

学号是每个学生的唯一识别号,互不相同。

姓名可能会存在重复。

要求:使用ArrayList存储学生信息。

 

 本题总结:本题有两个类:Student、Main类,在Student类中有私有属性学号number、姓名name、成绩total,然后写出Student类的有参和无参构造,再分别写它们三个的setter和getter方法。在Main类里面先定义一个Student的ArrayList,再输入,然后再一行一行的识别,每一行中以空格分隔,算出成绩总分sum,再将学号、姓名、总分放入Student的有参构造里面,再将student中的值set,将Student的对象student放入ArrayList中

String []array=str.split(" ");
number=Integer.parseInt(array[0]);
name=array[1];
sum=Integer.parseInt(array[2])+Integer.parseInt(array[3]);
Student student=new Student(number,name,sum);
student.setNumber(number);
student.setName(name);
student.setTotal(sum);
list.add(student);

再用Collections.sort进行排序

Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o2.getTotal()- o1.getTotal();
}
});

最后输出

 第二题:课程成绩统计程序-3

本题由于时间原因未能全部写出,但在假期里再会研究这题。

第三踢:jmu-Java-02基本语法-03-身份证排序

  1. 输入n,然后连续输入n个身份证号。
  2. 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
    输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
    输入sort2,将所有身份证按照里面的年月日升序输出。

注意:处理输入的时候,全部使用ScannernextLine()方法,以免出错。

 本题总结:本题首先是输入,然后再创建两个字符串数组sfz、sr,然后再依次输入到sfz中,再识别输入的是sort1还是sort2还是e,如果是e就输出exit结束循环,如果为sort1,将sfz中的部分用substring提取出来,然后就以题目给定的形式放到sr中,再用Arrays.sort进行排序,再依次输出。如果是sort2,将sfz的部分用substring提取出来放入sr,再用Arrays.sort进行排序,最后输出。

String str=in.nextLine();
if(str.equals("e")){
System.out.println("exit");
break;
}else if(str.equals("sort1")){
for(int i=0;i<n;i++){
sr[i]=sfz[i].substring(6,10)+'-'+sfz[i].substring(10,12)+'-'+sfz[i].substring(12,14);
}
Arrays.sort(sr);
for (int i=0;i<n;i++){
System.out.println(sr[i]);
}
}else if(str.equals("sort2")){
for(int i=0;i<n;i++){
sr[i]=sfz[i].substring(6,14);
}
Arrays.sort(sr);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(sfz[j].contains(sr[i])){
System.out.println(sfz[j]);
break;
}

第五题: jmu-Java-03面向对象基础-05-覆盖

1. 新建PersonOverride类

a. 属性:String nameint ageboolean gender,所有的变量必须为私有(private)。

b. 有参构造方法,参数为name, age, gender

c. 无参构造方法,使用this(name, age,gender)调用有参构造方法。参数值分别为"default",1,true

d.toString()方法返回格式为:name-age-gender

e. equals方法需比较name、age、gender,这三者内容都相同,才返回true.

2. main方法

2.1 输入n1,使用无参构造方法创建n1个对象,放入数组persons1。
2.2 输入n2,然后指定name age gender。每创建一个对象都使用equals方法比较该对象是否已经在数组中存在,如果不存在,才将该对象放入数组persons2。
2.3 输出persons1数组中的所有对象
2.4 输出persons2数组中的所有对象
2.5 输出persons2中实际包含的对象的数量
2.5 使用System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));输出PersonOverride的所有构造方法。

提示:使用ArrayList代替数组大幅复简化代码,请尝试重构你的代码。

 

 本题总结:本题有两个类Main、PersonOverride类,在PersonOverride类里面加入有参构造和无参构造,其中无参构造调用有参构造

public PersonOverride() {
this("default", 1, true);
}

然后复写方法String toString()和boolean equals()

public String toString() {
return name + "-" + age + "-" + gender;
}

public boolean equals(PersonOverride personOverride) {
if (personOverride.name.equals(this.name)) {
if (personOverride.age == this.age) {
if (personOverride.gender == this.gender) {
return true;
}else return false;
}return false;
}
return false;
}

在Main类里面,先输入,然后再创立PersonOverride属性的ArrayList--person1s、person2s,在person1s中加入无参构造,在person2s中加入有参构造,然后判断是否有相等的,如果有就不添加,最后输出。

三、踩坑心得

在写课程成绩统计程序-1时,因为一开始没有构思好,所以少创建了几个ArrayList,有些还少加了ArrayList的add方法。在这题中对一些非法输入和错误输入的判断,开始了解的不够,导致后面有些错误样例没过。一开始也并不知道怎样去对数据进行排序,通过后面的学习才知道,要用Collections.sort的方法,在课程成绩统计-2中也用了这样的排序,2中加了一个实验课,一开始不知道怎样去识别实验课成绩那一行,后面通过观察字符串长度大于5等一些条件可以识别出。在HashMap排序中,最后输出,我以为treemap的输出和hashmap一样,但并非如此,我通过查资料,把treemap.entrySet遍历赋值给Map.Entry<Integer,String>entrySet,再输出entrySet.getkry、entrySet.getValue。

四、改进建议

 

在写这种类关系比较复杂或者有多个类的题目时,应该先多分析类与类的关系。要分清楚Map、HashMap、TreeMap的用法以及相应的语法,不能弄混。在用Collections.sort进行排序时一定要注意是顺序还是逆序。用substring方法是,不要弄错目标对应的序号,要减一位。 五、总结 这几次oop训练集较前几次来说,会较为复杂一点,在课程成绩统计中,要求熟练了解与运用类与类之间的关系以及多态的运用。后面的oop题集中考察了Map、HashMap、TreeMap的用法以及相应的语法,然后还考察了ArrayList的排序以及自定义接口ArrayIntegerStack,还有Collection.sort的用法,对于课程成绩统计-3的那个题,对我来说,可能有点难度,时间上的条件也不是很好,所以这个题尽我所能了还没有做完,但在之后的假期中,我会投入更多的精力去解决。这次内容较多,知识点也较难一点,需要及时巩固与复习,在后面的假期中也会去继续去了解和学习java的知识点。      

标签:sort,第三阶段,题目,name,str3,pta,int,array,成绩
From: https://www.cnblogs.com/xk159753963w/p/17509570.html

相关文章

  • 题目集7~11总结心得
    1.前言本次题目集为7~11。其中题目集7是由题目集5、6两次的迭代,对于前两次已经拿到很多分的人困难不大,只要在基础上进行部分修改即可。之后从第八次题目集开始就进行另一个较难程序的练习,课程成绩统计程序,这个练习与前面的菜单程序非常相似,主要考察我们不同类与对象的关系,用到了......
  • pta第三次总结
    前言题目集7:本次题目集由于是系统的建立因此其中的功能涉及多个维度包括时间、数组、字符。其中不仅要不断的去完成各个类中功能设计,同时还要清楚各个类之间的联系与调用,其中日期类问题考察了包括Calender类和data类的使用,数组包括字符数组也包括整形数组,要求运用split的方法和wh......
  • 南昌航空大学软件学院pta第三阶段总结22201116-廖振波
    22201116廖振波前言 这是我们这个学期最后一次blog作业,最后的pta作业还是比较多的,有五次的题目集,第题目集7和题目集8题目比较简单,题目集9是统计代码中java关键字的次数,第十次题目集是java实现学生成绩管理系统。第11次题目集是对题目集10的改进,还考察了hashmap的使用,第12次题......
  • 题目49学生宿舍水电费信息管理
    学生宿舍水电费信息管理设计程序实现水电费管理系统功能。设计要求:(1)记录每个宿舍的名称、编号、用水量、用电量、水电价格、宿舍学生等信息;(2)能够对系统中各宿舍用水,电等信息进行统计;(3)对宿舍预存水、电设置最低数量值.当系统中预存值数量低于设定值时报警提醒;(4)......
  • PromptAppGPT:基于ChatGPT的自然语言开发框架
    近日首个自研全开源自然语言低代码GPT应用快速开发框架PromptAppGPT迎来重要更新。框架简介可以参考往期文章: 真低代码!首个基于ChatGPT的自然语言开发框架PromptAppGPT:全自动编译、运行、界面生成。项目网站:https://promptappgpt.wangzhishi.net/项目代码:https://github.......
  • 第三阶段PTA题目集总结及课程的教学评价
    目录前言:PTA题目集:7-1统计Java程序中关键词的出现次数设计与分析:具体代码踩坑心得改进建议课程成绩统计程序-1设计与分析:具体代码踩坑心得改进建议课程成绩统计程序-2设计与分析:具体代码踩坑心得改进建议课程成绩统计程序-3设计与分析:具体代码踩坑心得改进建议总结:课程的教学评价......
  • C/C++C/C++语言课程设计参考题目[2023-06-25]
    C/C++C/C++语言课程设计参考题目[2023-06-25]《高级程序设计技术综合课程设计》C/C++语言课程设计参考题目目录信息管理类 1工资管理系统 1职工工资信息管理系统 2职工工资管理系统 2院职工工资管理系统 3公司职工工资管理系统 3工资纳税计算系统 3校际运动会管理系统......
  • OOP面向对象第三阶段学习总结
    OOP面向对象第三阶段学习总结目录 · 前言 · 设计与分析 · 踩坑心得 · 改进建议 · 总结 一、前言不知不觉OOP学习就已经来到了尾声,也即将要步入大二,回头望来,总总令人感慨。第三阶段的学习主要包括,一些set和map的用法。更加抽象点的提升呢,就是对自身对于......
  • pta题目集7~11总结性Blog
    前言:第七次题目集:本次题目集是菜单计价系统的一次迭代,在原有功能的基础上对输入的特色菜分为川菜,晋菜和浙菜三类,并在最后输出一桌的价格的时候还要将三种特色菜的点菜的口味程度一起输出,还要求对每位顾客的姓名和手机号进行格式的规范。本次题目需要在之前的菜单计价系统的基础之......
  • PTA题目集6-8的总结性Blog
    一、前言在这个PTA题目集中,涉及到了成绩计算中所需要的各种计算方式,容器-HashMap,容器-ArrayList,以及 jmu-Java-02基本语法和接口-自定义接口等方面的知识。总体来说,难度适中,但需要考生对这些概念有一定的了解。二、设计与分析首先是7-1容器-HashMap-检索输入多个学生的成绩......