OOP第三次作业

前言

        又是一次新的blog作业,在继菜单系统过后,我们的作业又来了一个选课系统。除此之外,我们还新学习了javafx以及Map、set等方法。尽管经过了菜单之后,再来做选课的系统,我还是感觉到很难,pta上的题目也不能拿到高分,但相比于菜单我在选课系统花的时间也更多了,也算是一个进步吧。总之,还是自己的编程水平不够,还得更加努力的去学习训练。

第八次作业

知识点

构造类、类与类之间关系的设计。

题目分析

这次也是只有一题,就是选课系统的设计。因为在菜单系统中我做的很差,所以在这个选课系统中想要好好的写一下,希望能够做好。但是在实际的做了之后,我花费了五六个小时,却只是拿到了二十分的成绩。这时我又一次认识到了还是自己掌握的知识不足。无法完成这些稍微复杂一点的题目。

总结

在此次作业之后,我对类之间的运用有了更加深刻的认识,也能更好的运用他们。但是这还远远不够,只是能够进行简单的储存之类的操作,对于数据的复杂难度提高,我也就不能对功能的实现了。

第九次作业

知识点

Map的检索

题目分析

这次也是只有一题的题量,难度不大,就是简单的map的使用。要用到map进行储存数据和查找数据这两个操作。

总结

这次作业是近期以来最为轻松的一次了,不仅是题量还是难度都是很低的,所以完成的时间也更快了,也认识了新的知识。而这个map比起数组和arraylist来说他的查找速度要快很多,也是一大收获了。

第十次作业

知识点

多态、map、类之间的关系

题目分析

这次作业在上次的选课系统的基础上加了其余的三道题目,这三道题目难度都很小,花费时间都不是很多,主要看我们对于map和多态的运用。难度都还是在选课系统中,在上一次的题目中进行迭代,难度又提升了,我由于第一次的作业有问题,因此对此次作业我也无能为力。

总结

这次作业除了那个选课系统的实在是写不出来之外,其余的三道题目都是满分通过的,就是简单的map的检索和储存以及多态的使用。

第十一次作业

知识点

接口、类与类之间的关系、继承、arraylist排序

题目分析

这次作业也是选课系统再加上其余的题目作为一次小作业。结果也是很上次作业一样,除了选课系统的没做出来之外,其余的都是满分通过。对于排序就是用Comparator的方法实现就可。

总结

对于Comparator的使用我也是已经可以熟练的使用了,但是对于其原理我还是不能理解,所以再写最后一个题目的时候更多的是同学在帮助我。对于接口的使用也只是能够简单的当作一个传递的作用,不能使用其别的功能。对于选课系统,第二次迭代已经不能完成的我对这次的迭代也依旧是无能为力了。总之,还是要加强训练,加强自己的能力。

踩坑心得

第八次作业

 这个是老师给的类图,因为自己写的不好,源码就自己消化了QAQ。

这次的类图可以说是十分的简单,只有一个类名和三个属性,其余的方法都要由自己来构思,所以难度是十分大的。在这次作业中,我对于arraylist在类之间的使用与传递更加熟练了,但是在进行对比之后进行储存和排序上却出现了问题,结果总是出现差错,导致无法进行下一步的操作。就是属于那种很茫然地状态,也深深的认识到了自己的不足。

第九次作业

这次是一个统计关键词的作业也是挺快就写完了的,但是有一点小瑕疵,没拿到满分。

        while (startIndex < sourceCode.length()) {
            char currentChar = sourceCode.charAt(startIndex);
            if (currentChar == '\"' && !isComment) {
                insideString = !insideString;
            }
            if (currentChar == '/' && startIndex < sourceCode.length() - 1 && sourceCode.charAt(startIndex + 1) == '/' && !insideString) {
                isComment = true;
            } else if (currentChar == '\n') {
                isComment = false;
            }
            if (!insideString && !isComment) {
                if (Character.isLetterOrDigit(currentChar) || currentChar == '_') {
                    endIndex = startIndex + 1;
                    while (endIndex < sourceCode.length() && (Character.isLetterOrDigit(sourceCode.charAt(endIndex)) || sourceCode.charAt(endIndex) == '_')) {
                        endIndex++;
                    }
                    String token = sourceCode.substring(startIndex, endIndex);
                    if (keywords.contains(token)) {
                        keywordMap.put(token, keywordMap.getOrDefault(token, 0) + 1);
                    }
                    startIndex = endIndex;
                } else {
                    startIndex++;
                }
            } else {
                startIndex++;
            }
        }

这里便是找出关键字的功能实现,就是对map的遍历实现的,然后用标识符将其标记即可。

第十次作业

前两次都是对map的使用,第一次是map的检索,第二次是对map的排序,都很简单,代码就放这里了。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Map<String, String> map = new HashMap<>();
        while (true) {
            String sc = input.nextLine();
            if (sc.equals("end"))
                break;
            String[] arr = sc.split(" ");
            map.put(arr[0],arr[1] + " " + arr[2]);
        }
        String id = input.nextLine();
        String score = map.get(id);
        if (score == null)
            System.out.println("The student " + id + " does not exist");
        else
            System.out.println(id + " " + score);
    }
}

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Map<Integer, String> map = new HashMap<>();
        while (true) {
            String sc = input.nextLine();
            if (sc.equals("end"))
                break;
            String[] arr = sc.split(" ");
            map.put(Integer.valueOf(arr[0]),arr[1] + " " + arr[2]);
        }
        List<Map.Entry<Integer,String>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
            @Override
            public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
                return o2.getKey() - o1.getKey();
            }
        });

        for (Map.Entry s: list
             ) {
            System.out.println(s.getKey() + " " + s.getValue());
        }
    }
}

之后的动物发生系统也是很简单的类的使用,也就放个代码把

//动物发生模拟器.  请在下面的【】处添加代码。
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        Goat goat = new Goat();
        speak(cat);
        speak(dog);
        speak(goat);
    }
    //定义静态方法speak()
    public static void speak(Animal animal) {
        System.out.print(animal.getAnimalClass() + "的叫声:");
        animal.shout();
    }

}

//定义抽象类Animal
abstract class Animal{
    public abstract String getAnimalClass();
    public abstract void shout();
}
//基于Animal类,定义猫类Cat,并重写两个抽象方法
class Cat extends Animal{
    public String getAnimalClass() {
        return "";
    }
    public void shout() {
        System.out.println("喵喵");

    }

        }
//基于Animal类,定义狗类Dog,并重写两个抽象方法
class Dog extends Animal{
    public String getAnimalClass() {
        return "";
        }
    public void shout() {
        System.out.println("汪汪");

        }
}
//基于Animal类,定义山羊类Goat,并重写两个抽象方法
class Goat extends Animal{
    public String getAnimalClass() {
        return "山羊";
        }
    public void shout() {
        System.out.println("咩咩");

        }
        }

对于那选课系统实在是无能为力了。对于这三个代码如果有哪里能够进行该近的可以评论告诉我哦,欢迎给出意见。

第十一次作业

前两题没啥好说的,和上面的map排序是一样的,上代码直接

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<Student> Inscore = new ArrayList<>();
        while (true) {
            String in = input.nextLine();
            if (in.equals("end")) {
                break;
            }
            String[] arr = in.split(" ");
            int sc = Integer.parseInt(arr[2]) + Integer.parseInt(arr[3]);
            Student student = new Student(arr[0],arr[1],sc);
            Inscore.add(student);
        }
        Collections.sort(Inscore, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getScore() - o1.getScore();
            }
        });
        for (int i = 0;i < Inscore.size();i ++) {
            System.out.println(Inscore.get(i).getId() + " " + Inscore.get(i).getName() + " " + Inscore.get(i).getScore());
        }
    }
}
class Student {
    private String id;
    private String name;
    private int score;

    public Student() {
    }

    public Student(String id, String name, int score) {
        this.id = id;
        this.name = name;
        this.score = score;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

}

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String num = input.nextLine();
        String t;
        String[] id = new String[Integer.parseInt(num)];
        for (int i = 0;i < id.length;i ++) {
            id[i] = input.nextLine();
        }
       for (int j = 0;j < id.length - 1;j ++) {
           for (int k = j + 1;k < id.length;k ++) {
               if (Integer.parseInt(id[j].substring(6,14)) > Integer.parseInt(id[k].substring(6,14))) {
                   t = id[j];
                   id[j] = id[k];
                   id[k] = t;
               }
           }
       }
       while (true) {
           String type = input.nextLine();
           if (type.equals("e"))
               break;
           if (type.equals("sort1")) {
               for (int i = 0;i < id.length;i ++) {
                   System.out.println(id[i].substring(6,10) + "-" + id[i].substring(10,12) + "-" + id[i].substring(12,14));
               }
           }
           if (type.equals("sort2")) {
               for (int i = 0;i < id.length;i ++) {
                   System.out.println(id[i]);
               }
           }
       }
       System.out.println("exit");

    }
}

第三题

这题要注意的便是在类之间数组的使用要用数组的底数用来控制输出。还有便是要在类之中用Tostring对数组进行转换。

import java.util.*;
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        ArrayIntegerStack A = new ArrayIntegerStack(n);
        int m = in.nextInt();
        for(int i = 0;i < m;i++) {
            System.out.println(A.push(in.nextInt()));
        }

        System.out.println(A.peek() + "," + A.empty() + "," + A.size());
        System.out.println(A.toString());

        int x = in.nextInt();
        for(int i = 0;i < x;i++) {
            System.out.println(A.pop());
        }

        System.out.println(A.peek() + "," + A.empty() + "," + A.size());
        System.out.println(A.toString());
        in.close();
    }

}

interface IntegerStack{
    public Integer push(Integer item);
    public Integer pop();
    public Integer peek();
    public boolean empty();
    public int size();
}

class ArrayIntegerStack implements IntegerStack{
    Integer date[];
    int Max,Size = 0;
    public ArrayIntegerStack(int n) {
        date = new Integer[n];
        Max = n;
    }
    public Integer push(Integer item) {
        if(item == null)
            return null;
        else if(Size == Max)
            return null;
        else {
            date[Size] = item;
            Size++;
            return item;
        }
    }

    public Integer pop() {
        if(Size == 0)
            return null;
        Size--;
        return date[Size];
    }

    public Integer peek() {
        if(Size == 0)
            return null;
        else
            return date[Size - 1];
    }

    public boolean empty() {
        if(Size == 0)
            return true;
        else
            return false;
    }

    public int size() {
        return Size;
    }

    public String toString() {
        return Arrays.toString(date);
    }

}

对于第五题,其实我有一部分是由室友帮忙完成的,没这两个功能我也不能够完成这一题了。而我认为重点也就在这部分我不会的部分,也提醒我要加油学习了。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner se=new Scanner (System.in);
        int n1=se.nextInt();
        PersonOverride persons1[] =new PersonOverride[n1];
        for(int i=0;i<n1;i++) {
            persons1[i]=new PersonOverride();
            System.out.println(persons1[i].toString());
        }
        int n2=se.nextInt();
        ArrayList<PersonOverride> persons2=new ArrayList<PersonOverride>();
        for(int i=0;i<n2;i++) {
            PersonOverride a=new PersonOverride(se.next(),se.nextInt(),se.nextBoolean());
            if(!persons2.contains(a)) {
                persons2.add(a);
                System.out.println(a.toString());
            }
        }
        System.out.println(persons2.size());
        System.out.println(Arrays.toString(PersonOverride.class.getConstructors()));
    }
}

class PersonOverride {
    private String name;
    private int age;
    private boolean gender;
    public PersonOverride() {
        this.name = "default";
        this.age = 1;
        this.gender = true;
    }
    public PersonOverride(String name, int age, boolean gender) {
        super();
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

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

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + (gender ? 1231 : 1237);
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PersonOverride other = (PersonOverride) obj;
        if (age != other.age)
            return false;
        if (gender != other.gender)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public boolean isGender() {
        return gender;
    }
    public void setGender(boolean gender) {
        this.gender = gender;
    }
}

就是hashcode这部分,没了这个我的代码一直都不能够实现功能。之后便是选课系统,无话可说QAQ。

补充

在做这几次作业的时候老师还让我们学生自己讲述javafx的内容,由学生来讲解知识点,其实也是一次特别的体验。这能更加促进学生们对自学能力的提升,也提高了学生对于知识点的掌握,毕竟学生才懂学生。在这次学生课堂中,我学会了动画的展示,也是特别有趣的一部分内容。

总结

先说说收获吧

这几次作业上,我学到了很多新的知识,比如容器啊,map和arraylist的排序啊等等。也对以前的知识有了巩固,对于类之间的传递更加熟练了,对于多态也更加了解了。最主要的是,还学习了一下动画的制作,虽然只是一点简单的动画过程,但也算是一个收获吧。

再说说不足吧

最主要的还是那选课系统,让我认识到了自己的很多不足:

1.自己解决问题的能力不是很足,出现问题还要向同学询问;

2.对于难度大的题目还是无法完成,自己的能力还是有很大的进步空间;

3.在自学方面还是要加强,还是不能很好的自学;

4.当我在台上讲解属于我的那部分知识的时候,由于过于紧张,在讲解是遗漏了很多知识点,这也提醒我要加强心理素质。

 

posted @ 2023-06-27 22:40  小鹏的blog  阅读(18)  评论(0)    收藏  举报