OOP题目集1~3的总结

news/发布时间2024/5/3 12:54:10

目录

(一)前言

(二)作业介绍

(三)算法与代码

(四)SourceMonitor代码分析

(五)自学内容

(六)总结


一、前言

介绍本篇博客的大致内容、写作目的、意义等

本篇博客介绍如何使用Java语言基础和算法来解决题目问题,在此基础上进行对最近Java编程语言学习的总结

题目的难度为Java入门,主要考察类的设计与创建对象的使用数组的基本使用关联类结构设计等一些基础算法以及一些自学内容


二、作业介绍

展示作业题目,并梳理算法思路

题目内容

前三次PTA作业共12大题,本篇博客将挑选其中几道典型题目进行举例与分析,题目分别考查了:

类的设计与创建,题目(1)如图:

类数组的基本使用,题目(2)如图:

数组的排序与查找,题目(3)如图:

等一些基础题型,以及空间结构较复杂的题型——包含多个知识点,题目(4)如图:

答题判题程序 题目组共有三题,其中,上图的 * 答题判题程序-3* 是对 答题判题程序-1答题判题程序-2 的增补和迭代。因此,下面内容将以本题为侧重点展开分析与总结,其他基础题将简略带过


三、算法与代码

展示个人解决题目的算法思路以及答案

算法大纲

题目(1):

本题需要创建:

  • 风扇类class Fan,包含:
    • 三个速度等级常量—SlOW=1、MEDIUM=2、FAST=3
    • 整型—speed(速度)
    • 布尔型—on(开关:true=开/false=关)
    • 双精度浮点型—radius(半径)
    • 字符串型—color(颜色)

用顺序结构进行处理,修改输出格式后即可


题目(2):

本体需要创建:

  • 学生类class Student,包含:
    • 字符串型—num(学号)
    • 字符串型—name(姓名)
    • 双精度浮点型—chinese(语文成绩)
    • 双精度浮点型—math(数学成绩)
    • 双精度浮点型—physic(物理成绩)
    • 方法—getsum()(计算总分)
    • 方法—getaverage()(计算平均分)
    • 方法—printscore()(按格式输出)
  • 类数组s[ ]——存放学生信息数据

用循环结构收集输入信息,按输出格式后即可

题目(3):

本题需要创建:

  • 手机类class MobilePhone,包含:
    • 字符串型—type(型号)
    • 整型—price(价格)
  • 比较器接口class Comparable,分析价格大小,返回对应关系
  • 数组列表List[MobilePhone] list——存放手机信息数据

用循环结构收集输入信息,遍历初始List,遍历使用比较器后的List,循环顺序查找手机后输出即可


题目(4):

Tips

1、题目输入按照一定格式规律,因此可以运用正则表达式来高效处理输入数据,且处理输入时运用while( input.hasNextLine() ){ }循环,逐行收集输入信息,知道该行字符串为end时退出循环


2、在审阅题目(下两图)时,可以发现试卷信息答卷信息格式较其他输入不同,多个【题目】—【分值】/【答题顺序】-【答案】共用一个【试卷编号】/【答卷编号】,即输入信息有阶级关系,因此需要在试卷类答卷类中额外创建一个集合来存放和引用输入信息。而集合(Linked)Hashmap的特点适合这种格式,因此将会使用 HashmapLinkedHashMap相关特点自学内容中)


3、题目输出的错误提示较多且有优先级顺序输出,所以做题之前应做好输出提示的优先级排序,优先级越高的代码块 应越靠前/在越外层的循环

本题需要创建:

  • 题目类class Question,包含:

    • 整型—num(题目编号)

    • 字符串型—content(题目内容)

    • 字符串型—standardanswer(标准答案)

    • 整型—score(题目分值)

    • 整型—flag(是否被删除:true=已被删除/false=未被删除)

    • 方法—Right_Result()(答题正确输出)

    • 方法—Wrong_Result( String wrong_answer )(答题错误输出)

  • 试卷类class Exam_paper,包含:

    • 整型—paper_num(试卷编号)
    • 链表LinkedHashMap<Integer,Integer> score_map——存放试卷中的题目及对应分值
    • 方法—put_score_map(int num, int score )(score_map添加新元素)
    • 方法—Check_total_score()(检测当前试卷是否满分为100分)
  • 学生类class Student,包含:

    • 字符串型—ID(学号)
    • 字符串型—name(姓名)
  • 答卷类class Answer,包含:

    • 整型—paper_num(答卷编号)
    • 字符串型—ID(学号)
    • 链表LinkedHashMap<Integer,String> answer_map——存放答卷中的答题顺序及对应答案
    • 方法—put_answer_map(int order, String answer )(answer_map添加新元素)
  • 删除题目类class Delete,包含:

    • 整型—delete_num(删除题目编号)

主函数

  • 数组列表List[Question] questionArrayList——存放 题目类 信息
  • 数组列表List[Exam_paper] exam_paperArrayList——存放 试卷类 信息
  • 数组列表List[Student] studentsArrayList——存放 学生类 信息
  • 数组列表List[Answer] answerArrayList——存放 答卷类 信息
  • 数组列表List[Delete] deleteArrayList——存放 删除题目类 信息
  • 链表LinkedList score——临时记录当前答卷人的各题赋分情况

本题的算法有不同种,这里只提供我的个人思路:

​ 采用循环结构利用正则表达式逐行分析输入——>判断试卷分值——>记录删除的题目——>试卷赋分——>核对试卷与答卷编号——>按照试卷顺序去答卷中查找试卷题号——>判断题目是否被删除——>判断答题是否正确并记录得分——>判断是否有题目漏答——>查找学生信息——>输出学生答题得分


代码

题目(1):

import java.util.Scanner;
class Fan
{public final int slow=1;public final int medium=2;public final int fast=3;private int speed=1;private boolean on=false;private double radius=5;private String color="white";Fan(int Speed, boolean On, double Radius, String Color){this.speed=Speed;this.on=On;this.radius=Radius;this.color=Color;}public String toString(){String s="speed "+speed+"\n";s+="color "+color+"\n";s+="radius "+radius+"\n";if(on){s+="fan is on";}else{s+="fan is off";}return s;}
}public class Main
{public static void main(String[] args){Scanner input = new Scanner (System.in);System.out.println("-------");System.out.println("Default");System.out.println("-------");Fan f1=new Fan(1,false,5,"white");System.out.println( f1.toString() );System.out.println("-------");System.out.println("My Fan");System.out.println("-------");int f2_speed=input.nextInt();boolean f2_on=input.nextBoolean();double f2_radius=input.nextDouble();String f2_color=input.next();Fan f2=new Fan( f2_speed,f2_on,f2_radius,f2_color );System.out.println( f2.toString() );}
}

题目(2):

import java.util.Scanner;
class Student
{private String num;private String name;private double chinese;private double math;private double physic;Student(String num, String name,double chinese, double math,double physic){this.num=num;this.name=name;this.chinese=chinese;this.math=math;this.physic=physic;}public  int getsum(){return (int)( chinese + math + physic );}public  double getaverage(){return ( chinese + math + physic ) / 3;}public String printscore(){//format四舍五入保留两位小数String average = String.format( "%.2f", getaverage() );return num + " " + name + " " + getsum() + " " + average;}
}public class Main
{public static void main(String[] args){Scanner input = new Scanner (System.in);Student[] s = new Student[5];for(int i=0;i<5;i++){String num = input.next();String name = input.next();double chinese = input.nextDouble();double math = input.nextDouble();double physics = input.nextDouble();s[i]=new Student(num,name,chinese,math,physics);}for(int i=0;i<5;i++){System.out.println( s[i].printscore() );}}
}

题目(3):

import java.util.*;
class MobilePhone
{public String type;public int price;public MobilePhone(String type, int price){this.type = type;this.price = price;}//主动调用 toString 库函数,用toString函数产生的字符串来输出public String toString(){return "型号:" + type + ",价格:" + price;}
}class Comparable implements Comparator<MobilePhone>
{public int compare(MobilePhone phone1 , MobilePhone phone2 ){if( phone1.price > phone2.price )return 2;else if( phone1.price == phone2.price )return 0;else return -1;}
}class Main
{public static void main(String[] args){Scanner input = new Scanner(System.in);List<MobilePhone> list = new ArrayList<>();//依次输入for( int i = 0 ; i<3 ; i++ ){MobilePhone mobilePhone = new MobilePhone( input.next()  , input.nextInt() );list.add( mobilePhone );}String inputString = input.next();int inputInteger = input.nextInt();MobilePhone search = new MobilePhone( inputString , inputInteger );//遍历原始listSystem.out.println( "排序前,链表中的数据:" );for ( MobilePhone mobilePhone:list ){System.out.println( mobilePhone );}Comparable comparable = new Comparable();list.sort( comparable );//遍历排序listSystem.out.println( "排序后,链表中的数据:" );for ( MobilePhone mobilePhone:list ){System.out.println( mobilePhone );}//查找输入手机for( MobilePhone mobilePhone : list ){if( mobilePhone.price == search.price ){System.out.print( search.type + "与链表中的" + mobilePhone.type + "价格相同");return;}}System.out.print("链表中的对象,没有一个与" + search.type + "价格相同的");}}

题目(4):

import java.util.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;//1、题目信息  "#N:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案
class Question
{int num;String content;String standardanswer;int score;int flag=1;public Question(int num,String content,String standaanswer){this.num = num;this.content = content;this.standardanswer = standaanswer;}//主动调用 toString 库函数,用toString函数产生的字符串来输出public String toString(){return num+" "+content+" "+standardanswer+" "+score+" "+flag;}public void Right_Result(){System.out.println(content+"~"+standardanswer+"~true");}public void Wrong_Result( String wrong_answer ){System.out.println(content+"~"+wrong_answer+"~false");}
}//2、试卷信息  "#T:"+试卷号+" "+题目编号+"-"+题目分值
class Exam_paper
{int paper_num;LinkedHashMap<Integer,Integer> score_map = new LinkedHashMap<>();public void put_score_map(int num, int score ){score_map.put( num , score );}public Exam_paper(int paper_num){this.paper_num=paper_num;}public void Check_total_score(){int total_score=0;// 迭代值for (Integer score : score_map.values()){total_score=total_score+score;}if(total_score!=100){System.out.println( "alert: full score of test paper"+ paper_num +" is not 100 points" );}}public String toString(){return paper_num+" "+score_map;}
}//3、学生信息  "#X:"+学号+" "+姓名+"-"+学号+" "+姓名....+"-"+学号+" "+姓名
class Student
{String ID;String name;public Student(String ID,String name){this.ID=ID;this.name=name;}public String toString(){return ID+" "+name;}
}//4、答卷信息  **"#S:"+试卷号+" "+"#A:"+答案内容**
class Answer
{int paper_num;String ID;LinkedHashMap<Integer,String> answer_map = new LinkedHashMap<>();public Answer(int paper_num,String ID){this.paper_num=paper_num;this.ID=ID;}public void put_answer_map(int order, String answer ){answer_map.put( order,answer );}public String toString(){return paper_num+" "+ID+" "+answer_map;}
}class Delete
{int delete_num;public Delete(int delete_num){this.delete_num=delete_num;}public String toString(){return String.valueOf(delete_num);}
}public class Main
{public static void main(String[] args){Scanner input = new Scanner(System.in);String regex_Question = "#N:\\s*(\\d+)\\s*#Q:(.+) #A:(.+)";Pattern pattern_Question = Pattern.compile(regex_Question);String regex_Exam_paper = "#T:\\s*(\\d+)(\\s*\\d+-\\d+)*\\s*";Pattern pattern_Exam_paper = Pattern.compile(regex_Exam_paper);String regex_Student = "#X:(-*\\s*\\d+\\s+.*\\s*)*";Pattern pattern_Student = Pattern.compile(regex_Student);String regex_Answer = "#S:\\s*(\\d*)\\s*(\\d*)(\\s*#A:\\d+-[^#]*)*";Pattern pattern_Answer = Pattern.compile(regex_Answer);String regex_Delete = "^#D:\\s*N\\s*-\\s*(\\d+)\\s*$";Pattern pattern_Delete = Pattern.compile(regex_Delete);List<Question> questionArrayList = new ArrayList<>();List<Exam_paper> exam_paperArrayList = new ArrayList<>();List<Student> studentsArrayList = new ArrayList<>();List<Answer> answerArrayList = new ArrayList<>();List<Delete> deleteArrayList = new ArrayList<>();//输入while( input.hasNextLine() ){//当前一行的输入字符串String inputString = input.nextLine();Matcher pmatcher_Question = pattern_Question.matcher(inputString);Matcher pmatcher_Exam_paper = pattern_Exam_paper.matcher(inputString);Matcher pmatcher_Student = pattern_Student.matcher(inputString);Matcher pmatcher_Answer = pattern_Answer.matcher(inputString);Matcher pmatcher_Delete = pattern_Delete.matcher(inputString);//输入字符串是end,则输入完毕退出循环if(inputString.equals("end"))break;//inputString==输入1、题目信息  "#N:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案else if(pmatcher_Question.matches()){Question question = new Question(Integer.parseInt(pmatcher_Question.group(1).trim()), pmatcher_Question.group(2).trim(), pmatcher_Question.group(3).trim());questionArrayList.add(question);}//inputString==输入2、试卷信息  "#T:"+试卷号+" "+题目编号+"-"+题目分值else if(pmatcher_Exam_paper.matches()){//试卷编号Exam_paper exam_paper = new Exam_paper( Integer.parseInt( pmatcher_Exam_paper.group(1).trim() ) );Pattern pattern = Pattern.compile("(\\d+)\\s*-\\s*(\\d*)");Matcher patternmatcher = pattern.matcher(inputString);while ( patternmatcher.find() )  //局部匹配,调用第二次会继续向下匹配{//Map<题目编号-分值>exam_paper.put_score_map( Integer.parseInt( patternmatcher.group(1).trim() ) , Integer.parseInt( patternmatcher.group(2) ) );}exam_paperArrayList.add(exam_paper);}//inputString==3、学生信息   "#X:"+学号+" "+姓名+"-"+学号+" "+姓名....+"-"+学号+" "+姓名else if( pmatcher_Student.matches() ){Pattern pattern = Pattern.compile("(\\d+)\\s+([^-]+)");Matcher patternmatcher = pattern.matcher(inputString);while ( patternmatcher.find() ){//学号-姓名Student student = new Student( patternmatcher.group(1).trim(),patternmatcher.group(2).trim() );studentsArrayList.add(student);}}//inputString==4、答卷信息  "#S:"+试卷号+" "+学号+"#A:"+试卷题目的顺序号+"-"+**+答案内容+...else if(pmatcher_Answer.find()){//试卷编号-学号Answer answer = new Answer( Integer.parseInt(pmatcher_Answer.group(1)),pmatcher_Answer.group(2));Pattern pattern = Pattern.compile("#A:\\s*(\\d+)-([^#|\\n]*)");Matcher patternmatcher = pattern.matcher(inputString);while ( patternmatcher.find() ) //局部匹配,调用第二次会继续向下匹配{answer.put_answer_map( Integer.parseInt(patternmatcher.group(1).trim()),patternmatcher.group(2).trim() );}answerArrayList.add(answer);}//inputString==5、删除题目信息  "#D:N-"+题目号else if(pmatcher_Delete.matches()){Delete delete = new Delete( Integer.parseInt(pmatcher_Delete.group(1).trim()) );deleteArrayList.add(delete);}//输入信息只要不符合格式要求,均输出”wrong format:”+信息内容       例如:wrong format:2 #Q:2+2=else{System.out.println("wrong format:"+inputString);}}//总while结束//判断试卷分值是否100for( int i=0;i<exam_paperArrayList.size();i++ ){exam_paperArrayList.get(i).Check_total_score();}if( exam_paperArrayList.size()==0 ){Exam_paper exam_paper = new Exam_paper( 0 );exam_paper.put_score_map( 0 , 0 );exam_paperArrayList.add(exam_paper);}//删除题目并记录for( int i=0;i<deleteArrayList.size();i++ ){int num=deleteArrayList.get(i).delete_num;//选中删除题目,修改flagfor(int j=0;j< questionArrayList.size();j++){if( questionArrayList.get(j).num==num ){questionArrayList.get(j).flag=0;}}}for( int S=0;S<answerArrayList.size();S++ )  //几份答卷{boolean flag=false;for( int T=0;T<exam_paperArrayList.size();T++ ){if( answerArrayList.get(S).paper_num == exam_paperArrayList.get(T).paper_num ){flag=true;}}for( int T=0;T<exam_paperArrayList.size();T++ )  //几份试卷分则{//判断试卷编号是否相同if( flag ){//当前试卷题目赋分值for( Integer num: exam_paperArrayList.get(T).score_map.keySet() )  //当前试卷分则有几份分值{//根据#T 搜索题号Optional<Question> questionOptional = questionArrayList.stream().filter(question -> num == (question.num)).findFirst();//搜到了题号if( !questionOptional.isEmpty() ){questionOptional.get().score=exam_paperArrayList.get(T).score_map.get(num);}}//记录分数LinkedList<Integer> score = new LinkedList<>();//检测#Aint t=1;//#T里的第几个Cycle:for( Integer current_num: exam_paperArrayList.get(T).score_map.keySet() ){//循环查找题目for( Integer current_order: answerArrayList.get(S).answer_map.keySet() ){if (current_order == t){//搜索当前题号current_num信息int finalCurrent_num = current_num;Optional<Question> questionOptional = questionArrayList.stream().filter(question -> finalCurrent_num == (question.num)).findFirst();//找到current_num题目if (!questionOptional.isEmpty()){//题目有效if (questionOptional.get().flag == 1){//判断是否答对  计算分数if (answerArrayList.get(S).answer_map.get(current_order).equals(questionOptional.get().standardanswer)){questionOptional.get().Right_Result();score.add(questionOptional.get().score);t++;continue Cycle;}else{questionOptional.get().Wrong_Result(answerArrayList.get(S).answer_map.get(current_order));score.add(0);t++;continue Cycle;}}//#S:里的#A:答了删除的题目                                    the question 2 invalidelse if (questionOptional.get().flag == 0){System.out.println("the question " + current_num + " invalid~0");score.add(0);}}//没找到else{System.out.println("non-existent question~0");score.add(0);t++;continue Cycle;}}}t++;}//输入的#A检测完//#S:里的#A: < #T里的个数  输入的答案信息少于试卷的题目数量        answer is nullif( answerArrayList.get(S).answer_map.size() < exam_paperArrayList.get(T).score_map.size() ){int count=exam_paperArrayList.get(T).score_map.size()-answerArrayList.get(S).answer_map.size();while( count>0 ){System.out.println("answer is null");score.add(0);count--;}}//搜索学生int finalS = S;Optional<Student> studentOptional = studentsArrayList.stream().filter(student -> answerArrayList.get(finalS).ID.equals(student.ID)).findFirst();//#S:里的学号在#X:里没有  学号引用错误                          20201103 not foundif( studentOptional.isEmpty() ){System.out.println(answerArrayList.get(S).ID+" not found");}else{System.out.print(studentOptional.get().ID+" "+studentOptional.get().name+": ");//输出分数int total_score=0;if(score.size()==0 ){System.out.print("0");}for( int k=0;k<score.size();k++ ){total_score=total_score+score.get(k);System.out.print( score.get(k) );if( k!= score.size()-1 ){System.out.print(" ");}else{System.out.println("~"+total_score);}}}}//#S:里的paper_num和#T:里的papernum不等  试卷号引用错误         The test paper number does not existelse{System.out.println("The test paper number does not exist");}break;}}}
}

可以看到最后一题的算法复杂度高,且又因为我是Java初学者,故需要自学一些内容,下面将进行个人对自学内容一些重点的整理


四、SourceMonitor代码分析

题目(1):

题目(2):

题目(3):

题目(4):


五、自学内容

展示自学内容,并进行重点的归纳和整理(这里只展示个人认为比较重要且题目需要用到的知识点)

正则表达式

推荐正则表达式的网上测试工具网址:<正则表达式在线测试 | 菜鸟工具 (jyshare.com)>里面附带下图最基本的正则表达式语法参考


Pattern类Matcher 方法

(1) Matcher 匹配器类,通过 Pattern 执行匹配操作,基本用法为:

Pattern [pattern名称] = Pattern.compile([正则表达式/固定字符串]);
Matcher [matcher名称] = [pattern名称].matcher([被匹配的字符串]);

(2).matches() 方法:对整个字符串进行匹配,匹配成功返回true

例:正则表达式:\d+ //至少一个数字

​ 被匹配字符串:12345 //匹配成功

​ 被匹配字符串:12345abc //匹配失败

//(1)代码
if( [matcher名称].matches() ){System.out.println("匹配成功");
}

(3).find() 方法:对字符串进行局部匹配,匹配成功返回true

.find()方法在匹配后会从匹配部分的下个位置开始

例:正则表达式:\d+ //至少一个数字

​ 被匹配字符串:123abc //匹配成功一次

​ 被匹配字符串:123abc123 //匹配成功两次

//(1)代码
if( [matches名称].find() ){System.out.println("匹配成功");
}

(4).group() 方法:通过对括号内的字符分组,对每个组进行处理的方法

group( [组数] ),括号中的整型(>0) 对应 正则表达式中按括号分组的局部字符段;整型(=0)对应整个字符串

Pattern pattern = Pattern.compile("(\\w+)-(\\d+)");  	//[至少一个数字]-[至少一个字母]
Matcher matcher = pattern.matcher("a-1,b-b,c-3,d-d");
while ( matcher.find() )  	//循环局部匹配
{System.out.println("整组:" + matcher.group(0));System.out.println("组1:" + matcher.group(1));System.out.println("组2:" + matcher.group(2));
}

输出如图:

ArrayListLinkedList

需要导入 java.util.Array 、java.util.LinkedList 包

异同

相同处:没有固定大小的限制,可以添加或删除元素

不同处:1)ArrayList按线性的顺序存储数据;LinkedList是在每一个节点里存到下个节点地址的线性表

​ 2)ArrayList适用频繁访问列表中的某个元素,查找和修改操作效率较低

​ LinkedList需要通过循环迭代来访问列表中的元素,增加和删除操作效率较高

(1)创建

ArrayList<E> [表名称] =new ArrayList<>();  	//E—>泛型LinkedList<E> [表名称] = new LinkedList<E>();  	//E—>泛型,普通创建
LinkedList<E> [表名称] = new LinkedList(Collection<? extends E> c); 	 //E—>泛型,集合创建

(2).add() 方法:添加元素

List.add( [元素] );  	//尾插一个新元素

(3). get() 方法:访问元素

List.get( n-1 );  	//访问第n个元素

(4)size() 方法:计算大小

List.size();  	//返回整型=表的元素个数

(5)for each 方法:迭代遍历

for ( [元素类型] [循环变量] : [表名称] ) 
{System.out.println([循环变量]);
}

HashMapLinkedHashMap

需要导入 java.util.HashMap 、java.util.LinkedHashMap 包

异同

相同处:没有固定大小的限制的散列表,它存储的内容是键值对(key-value)映射

不同处:1)HashMap每次添加元素的存放位置是无序的;LinkedHashMap保证迭代顺序,即按 照储存顺序排列

​ 2) LinkedHashMap额外加了 头节点header标志位accessOrder 两个成员变量

(1)创建

HashMap<[key类型], [value类型]> [表名称] = new HashMap<{[key类型], [value类型]}>();  	//E—>泛型,{}中内容可以省略LinkedHashMap<[key类型], [value类型]> [表名称] = new LinkedHashMap<{[key类型], [value类型]}>();  	//E—>泛型,{}中内容可以省略

(2).put() 方法:添加元素

Map.put( [key],[value] );  	//尾插一个新元素

(3). get(key) 方法:访问键值对应映射值

Map.get( [key] );  	//访问key的value

(4)size() 方法:计算大小

Map.size();  	//返回整型=表的元素个数

(5)for each 方法:迭代遍历

// 输出 key 和 value
for ([key类型] key : [表名称].keySet() )   	//.keySet()方法当前获取键值
{System.out.println( "key: " + key + " value: " + [表名称].get(key) );
}

Comparator 和 **Comparable **方法

需要导入 java.util.Comparator 包

异同

相同处:可以对 集合Collections 进行排序

不同处:Comparator 可以有更多的排序方法

数值排序

class [方法名称] implements Comparator<[排序对象类型]>
{public int compare( [排序元素1] , [排序元素2] )  	//Comparator接口的方法 int compare(object o1,object o2);{if([排序元素1]>[排序元素2]) return 1;else if([排序元素1]>[排序元素2])  return -1;else return 0;}
}

字符串排序

class [方法名称] implements Comparator<[排序对象类型]>
{public int compare( [排序元素1] , [排序元素2] )  	{return [排序元素1].compareTO( [排序元素2] );  	//.compareTo()方法用于字符串之间的比较}
}

六、总结

答题技巧

1)、在面对像答题判题程序-3这种工程量大,情况案例多的题目时,应在正式敲代码前提前设计好类设计算法思路,否则在过程需要更多的时间精力进行修改调试,甚至还会出现大代码块需要删除重新设计的情况

2)、在完成答题判题程序-3题目时,因为有错误格式Wrong Format的情况,应该适当的降低输入门槛,即设计的正则表达式应该尽可能地让更多种输入格式不会报错,如:题目内容仅仅是数学题——>题目内容可以是由数字,字母,汉字组成答卷#S里的#A格式必须是【答题顺序】—【答案】——>可以为【答题顺序】—【空】或全为空

心得体会

1)、除答题判题程序题目组外,其他题目相对较简单,考察新手对Java编程语言的一些基础且重要的知识点,例如类的设计和对象类的封装性

2)、相对C语言,Java语言的单一职责原则体现得更为显著,要培养将相同对象的不同自定义方法函数放进类中,而不是像C一样通过更多的自定义函数来处理。因为Java中的存在,Java的代码量更大,空间复杂度更高,也随着题目难度的上升,任务更重

3)、这次答题判题程序-3共有28个测试得分点,而样例却只给出10个,因此开发程序时,思维不能固化,要学会主动联想特殊情况,如答卷的答案漏答,或答题的题目已被删除等特殊情况也要纳入代码的考虑范围内,这样才能增加代码的质量,适用范围更广

个人建议

​ PTA中既然测试点远大于给出样例,为了方便学生理解,测试点提示应该更加准确具体易懂,否则不停的调试搞错了方向也是徒劳无功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/50624010.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

实验二:用户需求分析

一、实验题目 :需求分析 二、实验目的 1、掌握StarUML软件的安装; 2、掌握利用StarUML工具分析、设计、绘制用例图; 3、掌握利用StarUML工具分析、设计、绘制类图; 4、掌握利用StarUML工具分析、设计、绘制状态图; 5、掌握利用StarUML工具分析、设计、绘制顺序图。 6、掌握…

小心!这些错误操作可能导致企业信息泄露!

在当今的数字经济中,企业信息安全已成为保障公司持续运营的核心要素。每一个不经意的操作,都可能成为导致敏感信息泄露的关键。在这篇文章中,我们将聚焦于那些看似无害但实际上充满风险的日常操作,帮助企业识别并避免这些潜在的威胁。内部员工的不当行为是导致企业信息泄露…

ROS笔记5--动作通讯

1、动作通讯简介 机器人是一个复杂的智能系统,并不仅仅是键盘遥控运动、识别某个目标这么简单,我们需要实现的是送餐、送货、分拣等满足具体场景需求的机器人。在这些应用功能的实现中,另外一种ROS通信机制也会被常常用到——那就是动作。 从这个名字上就可以很好理解这个概…

使用rollup打包一个npm包

使用rollup打包一个npm包 前言:在这个都在使用 npm install,来安装包的时代,你是否想发布一个自己的npm包,或者你工作中是否要发布一个npm包,来到你的项目中到处使用呢?(不晓得npm是什么的请移步:npm) 那么今天我们就来学习一下怎样打包一个自己的npm包 1.首先准备环境 …

矩阵求导(一)

前言 在大学的微积分课程中,我们学习过关于标量函数的导数。但是当我们求解一个多元函数的极值时,单独一个自变量的偏导数往往不能告诉我们太多信息,于是我们有一种天然的想法是要把每个自变量的偏导数放在一起,看看他们的联合效果如何。这个过程其实是一个向量求导的过程。…