zoukankan      html  css  js  c++  java
  • 20165334 第十周课堂测试分析

    20165334 第十周课堂测试分析

    第二题

    在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法:

    • 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List)
    • 没有类的源代码,或者多种排序,新建一个类,实现Comparator接口 调用Collection.sort(List, Compatator)

    针对下面的Student类,使用Comparator编程完成以下功能:

    1. 在测试类StudentTest中新建学生列表,包括自己和学号前后各两名学生,共5名学生,给出运行结果(排序前,排序后)
    2. 对这5名同学分别用学号和总成绩进行增序排序,提交两个Comparator的代码
    3. 课下提交代码到码云
    class Student {
       private String id;//表示学号
       private String name;//表示姓名
       private int age;//表示年龄
       private double computer_score;//表示计算机课程的成绩
       private double english_score;//表示英语课的成绩
       private double maths_score;//表示数学课的成绩
       private double total_score;// 表示总成绩
       private double ave_score; //表示平均成绩
    
       public Student(String id, String name){
           this.id = id;
           this.name = name;
    }
       public Student(String id, String name, char sex, int age){
           this(id, name);
           this.sex = sex;
           this.age = age;
    }
       public String getId(){
           return id;
    }//获得当前对象的学号,
       public double getComputer_score(){
           return computer_score;
    }//获得当前对象的计算机课程成绩,
       public double getMaths_score(){
           return maths_score;
    }//获得当前对象的数学课程成绩,
       public double getEnglish_score(){
           return english_score;
    }//获得当前对象的英语课程成绩,
    
       public void setId(String id){
           this.id=id;
    }// 设置当前对象的id值,
       public void setComputer_score(double computer_score){
           this.computer_score=computer_score;
    }//设置当前对象的Computer_score值,
       public void setEnglish_score(double english_score){
           this.english_score=english_score;
    }//设置当前对象的English_score值,
       public void setMaths_score(double maths_score){
           this.maths_score=maths_score;
    }//设置当前对象的Maths_score值,
    
       public double getTotalScore(){
           return computer_score+maths_score+english_score;
    }// 计算Computer_score, Maths_score 和English_score 三门课的总成绩。
       public double getAveScore(){
           return getTotalScore()/3;
    }// 计算Computer_score, Maths_score 和English_score 三门课的平均成绩。
    
    }
    
    class Undergraduate extends Student{
       private String classID;
    
       public Undergraduate(String id, String name, char sex, int age,String classID){
           super(id,name,sex,age);
           this.classID=classID;
       }
       public String getClassID(){
           return classID;
       }
       public void setClassID(String classID){
           this.classID=classID;
       }
    }
    

    未提交原因:

      由于自己对知识理解的不是特别透彻,只是会模仿书上的例子,以及纠结如何Collection.sort(List, Compatator)创建一个类实现关于学号和成绩的测试,后来在老师ppt的启发下实现了关于测试类的创建,但又不知道如何在StudentTest类中调用测试类,输出排序结果,后来想到了在StudentTest中创建关于学号和成绩的测试类,在相应类下输出排序结果,但由于做完时时间过长,导致未提交。总之,这次测试很失败,发现自己缺乏深度思考的习惯,导致对知识理解的不够透彻,没有在规定的时间类完成测试。

    运行成功截图如下

    代码链接如下

    第三题

    参见附件,补充MyList.java的内容,提交运行结果截图(全屏)
    课下推送代码到码云

    public class MyList {
    public static void main(String [] args) {
    //选用合适的构造方法,用你学号前后各两名同学的学号创建四个结点
    
    
    //把上面四个节点连成一个没有头结点的单链表
    
    //遍历单链表,打印每个结点的
    
    //把你自己插入到合适的位置(学号升序)
    
    //遍历单链表,打印每个结点的
    
    //从链表中删除自己
    
    //遍历单链表,打印每个结点的
    }
    }
    

    自己仿照书上的例子实现了功能截图如下,但没有按照老师的要求。

    代码如下

    /**
     * Created by 李天龙
     */
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.LinkedList;
    
    public class Mylist {
        public static void main(String [] args) {
            LinkedList<String> mylist=new LinkedList<String>();
            mylist.add("20165332");
            mylist.add("20165333");
            mylist.add("20165335");
            mylist.add("20165336");
            //选用合适的构造方法,用你学号前后各两名同学的学号创建四个结点
            //把上面四个节点连成一个没有头结点的单链表
            System.out.println("打印初始链表");
            Iterator<String> iter=mylist.iterator();
            while (iter.hasNext()) {
                String te=iter.next();
                System.out.println(te);
            }
            //遍历单链表,打印每个结点的
            mylist.add("20165334");
            //把你自己插入到合适的位置(学号升序)
            System.out.println("打印插入后链表");
            Collections.sort(mylist);
            iter=mylist.iterator();
            while(iter.hasNext()){
                String te=iter.next();
                System.out.println(te);
            }
            //遍历单链表,打印每个结点的
            mylist.remove("20165334");
            //从链表中删除自己
            System.out.println("打印插入后链表");
            iter=mylist.iterator();
            while(iter.hasNext()){
              //  String te=iter.next();
                System.out.println(iter.next());
            }
    
            //遍历单链表,打印每个结点的
        }
    }
    

    课下通过再次思考发现

    Node<T>也是一种链表模式,通过在MyList中套用 Node<T>模板,指定T的类型为int的包装类Integer,在删除自己学号时我钻了牛角尖,自己想到了用覆盖的方法覆盖自己的节点,但是自己学号前面的节点与覆盖后的自己学号的节点是否相连,通过分析,只要覆盖节点的数据域的信息,地址域储存的后继节点信息并没有改变。但是发现这样就把问题复杂化,其实只要绕过自己学号的节点,把自己学号前的节点与自己学号后的节点连在一起即可,关键代码实现如下

     s = S1;
            while (s != null) {
                if (s.next.data == 20165334) {
                    s.next = s.next.next;  //把s与s3相连
                    break;
                }
                else {
                    s = s.next;
                }
            }
    

    符合老师要求代码链接如下

    符合要求的运行截图

    课本代码分析(关键代码分析)

    由于15—4之前的代码在这次测试中已经分析几次,这里不再赘述

    //Example15_4代码分析
     hashtable=new HashMap<String,String>();//存储键数据,对象的值
     while(sc.hasNext()){
                 String englishWord=sc.next();
                 String chineseWord=sc.next(); 
                 hashtable.put(englishWord,chineseWord); 把//englishWord,chineseWord建立联系
              }
    if(hashtable.containsKey(englishWord)) {//判断是否有输入的的键值
    

    其他代码见以下链接

    第十五章代码

    课后编程题目

    1、1.使用堆栈结构输出an的若干项,其中an=2an-1+2an-1,a1=3,a2=8

    运行截图

    代码链接

    2.编写一个程序,将链表中的学生英语成绩单存放到一个树集中,使得按成绩自动排序,并输出排序结果。

    运作截图

    代码链接

    3、有10个U盘,有两个重要的属性:价格和容量。编写一个应用程序,使用TreeMap

    运行截图

    代码链接

  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/ltl123/p/8997450.html
Copyright © 2011-2022 走看看