首页 > 其他分享 >OOP题目集1~3的总结

OOP题目集1~3的总结

时间:2024-04-19 20:23:28浏览次数:23  
标签:总结 题目 String int num OOP score public

目录

(一)前言

(二)作业介绍

(三)算法与代码

(四)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 );

        //遍历原始list
        System.out.println( "排序前,链表中的数据:" );
        for ( MobilePhone mobilePhone:list )
        {
            System.out.println( mobilePhone );
        }

        Comparable comparable = new Comparable();

        list.sort( comparable );

        //遍历排序list
        System.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结束


        //判断试卷分值是否100
        for( 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;
            //选中删除题目,修改flag
            for(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<>();
                    //检测#A
                    int 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 invalid
                                    else 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 null
                    if( 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 found
                    if( 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 exist
                else
                {
                    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中既然测试点远大于给出样例,为了方便学生理解,测试点提示应该更加准确具体易懂,否则不停的调试搞错了方向也是徒劳无功

标签:总结,题目,String,int,num,OOP,score,public
From: https://www.cnblogs.com/nchu22022202java01/p/18146605

相关文章

  • linux运维常用命令总结
    1.tarzcf打包目录时,排除其中的一些目录或者文件tar--exclude=dir1--exclude=dir2--exclude=file1-czvfarchive.tar.gzsource_directory 2.yum只下载不安装包yum-yinstallnfs-utilsrpcbind--downloadonly--downloaddir/home/nfs 3.查看本机出网IP地址......
  • 记一次hadoop yarn环境无法提交任务的问题排查
    1.集群环境ambari-version:2.7.5HDP-version:3.02.问题描述hadoop-yarn的启动之后,运行一段时间,莫名其妙的出现新的任务无法提交上去,查看yarn的状态之后,发现yarn的状态都是正常的,并且所有的资源都是充足的,但是提交任务之后就会一直处于accept状态3.问题表现4.问题排查4.......
  • hadoop
    创建hduser:sudegeoupadhadcupaudouaeriddgridoogbdussraidocaowrehdao:n02oc0/spe/werkyyec4/xpark/ha<oop-3.3.5sudupazewdlduserhdusari-p..ual"i.zek/ii_roy.puba-/.a2h/01to0rinen.knyachmndaoo:"i.ast/autanr'aaakeyaelmodo......
  • 大数据之Hadoop(入门)
    大数据概论大数据部门业务流程分析大数据部门组织结构Hadoop生态框架Hadoop是什么Hadoop官网官网地址:http://hadoop.apache.org/releases.html下载地址:https://archive.apache.org/dist/hadoop/common/Hadoop优势Hadoop组成HDFS架构概述YARN架构概述MapRed......
  • 30 天精通 RxJS (25):Subject 总结
    Subject其实在RxJS中最常被误解的一部份,因为Subject可以让你用命令式的方式虽送值到一个observable的串流中。很多人会直接把这个特性拿来用在不知道如何建立Observable的状况,比如我们在30天精通RxJS(23)中提到的可以用在ReactJS的Event中,来建立event的observab......
  • Java题目集1-3总结
    (1)前言:第一次大作业的知识点包括类与对象正则表达式以及数组对象和不同类之间的关系;题量较小,难度不大,关键是理清question,test-paper,answer-paper之间的关系。第二次大作业的知识点增加了List,ArrayList,HashMap,三种变长数组的使用,增加了正则表达式的难度,题量增加,难度上升,试卷中的......
  • 30天【代码随想录算法训练营34期】第七章 回溯算法part06 (● 332.重新安排行程 ● 51
    332.重新安排行程木有看懂,没视频所以也没看懂51.N皇后自己写出来还是有难度的classSolution:defsolveNQueens(self,n:int)->List[List[str]]:result=[]#存储最终结果的二维字符串数组chessboard=['.'*nfor_inrange(n)]#初始化......
  • vue3+elementplus+axios+router的入门项目总结
    一、使用vite方式创建项目:1、创建空文件夹,用vscode打开空文件夹,终端上运行如下命令$npminitvite-app[项目名]:初始化项目$cd[项目名]:进入项目$npminstall:安装项目依赖$npmrundev:启动项目2、启动项目后会出现访问地址: 3、进入访问地址: 二、引入elementpuls......
  • 前端面试题解析与总结
    在2024年的前端行业,面试是进入理想公司的一道门槛。不同公司的面试流程和考察点各有不同,下面将结合三家知名公司的面试题目进行分析和总结,为广大前端开发者提供一份参考指南。一、某对外电商一面:笔试题:弹窗组件防抖截流代码实现关系型数组转换成树形结构对象数组全排列......
  • 图文总结:正向代理与反向代理
    1介绍在计算机网络领域,代理服务器扮演着至关重要的角色,它在服务器与客户端之间充当中间人的角色,有效地提高系统的安全性、性能和可扩展性。其中正向代理和反向代理是两种最为常见的代理方式。本文将详细介绍这两种代理方式的概念、特点、使用场景以及用途,帮助读者更好地理解它......