20165202 week10课下补做

相关知识点总结

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

  • 有类的源代码,针对某一成员变量排序,让类实现Comparable接口,调用Collection.sort(List)
  • 没有类的源代码,或者多种排序,新建一个类,实现Comparator接口 调用Collection.sort(List, Compatator)
  • 泛型类声明:
    class 名称<泛型列表>
  • 创建链表
    LinkedList<String> mylist=new LinkedList<String>();
  • 向链表增加节点
    list.add(E obj);
  • 从链表中删除节点
    list.remove(index)
  • 升序排序
    public static sort(List<E>list)
  • 折半查找list是否含有和参数key一样的元素
    int binarySearch(List<T>,Tkey,compareTo<T>c)
  • 树映射 TreeMap适合用于数据的排序
  • 通过关键字进行排序TreeMap<StudentKey,Student> treemap= new TreeMap<StudentKey,Student>()

课上内容的补做及结果截图

习题2:
成绩排序已提交,学号排序忘记传了:

习题3:

  • 代码实现:
import java.util.*;
class Stu implements Comparable{
    int id;
    String name;
    Stu(String n, int i){
        name=n;
        id=i;
    }
    public int compareTo(Object b){
        Stu st=(Stu)b;
        return (this.id-st.id);
    }
}
public class MyList {
    public static void main(String [] args) {
        //选用合适的构造方法,用你学号前后各两名同学的学号创建四个结点
        LinkedList<Stu> list=new LinkedList<>();
        list.add(new Stu("其米仁增",5239));
        list.add(new Stu("李梓豪",5201));
        list.add(new Stu("夏云霄",5203));
        list.add(new Stu("贾普涵",5204));
        //把上面四个节点连成一个没有头结点的单链表
        Iterator<Stu> iter=list.iterator();
        //遍历单链表,打印每个结点的
        System.out.println("初始单链表为:");
        while (iter.hasNext()){
            Stu st=iter.next();
            System.out.println(st.id+" "+st.name);
        }
        //把你自己插入到合适的位置(学号升序)
        list.add(new Stu("贾海粟",5202));
        Collections.sort(list);
        //遍历单链表,打印每个结点的
        iter=list.iterator();
        System.out.println("插入我的学号和姓名后单链表为:");
        while (iter.hasNext()){
            Stu st=iter.next();
            System.out.println(st.id+" "+st.name);
        }
        //从链表中删除自己
        list.remove(1);
        iter=list.iterator();
        //遍历单链表,打印每个结点的
        System.out.println("删除我的学号和姓名后单链表为:");
        while (iter.hasNext()){
            Stu st=iter.next();
            System.out.println(st.id+" "+st.name);
        }

    }
}
  • 运行截图

教材第十五章的代码分析

补做教材第十五章的编程题目

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

  • 代码实现
import java.util.*;
public class E1 {
    public static void main(String args[]) {
        Stack<Integer> stack=new Stack<Integer>();
        stack.push(new Integer(3));
        stack.push(new Integer(8));
        int k=1;
        while(k<=10) {
            for(int i=1;i<=2;i++) {
                Integer F1=stack.pop();
                int f1=F1.intValue();
                Integer F2=stack.pop();
                int f2=F2.intValue();
                Integer temp=new Integer(2*f1+2*f2);
                System.out.println(""+temp.toString());
                stack.push(temp);
                stack.push(F2);
                k++;
            }
        }
    }
}
  • 结果截图

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

  • 代码实现
import java.util.*;
class Student implements Comparable {
    int english=0;
    String name;
    Student(int english,String name) {
        this.name=name;
        this.english=english;
    }
    public int compareTo(Object b) {
        Student st=(Student)b;
        return (this.english-st.english);
    }
}
public class E2 {
    public static void main(String args[]) {
        List<Student> list=new LinkedList<Student>();
        int score []={100,76,45,99,77,88,75,79};
        String name[]={"一文","李悦","江流","胡克","魏凡","周平","赵剑","魏派"};
        for(int i=0;i<score.length;i++){
            list.add(new Student(score[i],name[i]));
        }
        Iterator<Student> iter=list.iterator();
        TreeSet<Student> mytree=new TreeSet<Student>();
        while(iter.hasNext()){
            Student stu=iter.next();
            mytree.add(stu);
        }
        Iterator<Student> te=mytree.iterator();
        while(te.hasNext()) {
            Student stu=te.next();
            System.out.println(""+stu.name+" "+stu.english);
        }
    }
}
  • 结果截图

3.有10个U盘,有两个重要的属性:价格和容量,编写一个应用程序,使用TreeMap<K,V>类,分别按照价格和容量排序输出10个U盘的详细信息。

  • 代码实现
import java.util.*;
class UDiscKey implements Comparable {
    double key=0;
    UDiscKey(double d) {
        key=d;
    }
    public int compareTo(Object b) {
        UDiscKey disc=(UDiscKey)b;
        if((this.key-disc.key)==0)
            return -1;
        else
            return (int)((this.key-disc.key)*1000);
    }
}
class UDisc{
    int amount;
    double price;
    UDisc(int m,double e) {
        amount=m;
        price=e;
    }
}
public class E3 {
    public static void main(String args[ ]) {
        TreeMap<UDiscKey,UDisc>  treemap= new TreeMap<UDiscKey,UDisc>();
        int amount[]={2,4,8,16,32};
        double price[]={32,50,64,128};
        UDisc UDisc[]=new UDisc[4];
        for(int k=0;k<UDisc.length;k++) {
            UDisc[k]=new UDisc(amount[k],price[k]);
        }
        UDiscKey key[]=new UDiscKey[4] ;
        for(int k=0;k<key.length;k++) {
            key[k]=new UDiscKey(UDisc[k].amount);
        }
        for(int k=0;k<UDisc.length;k++) {
            treemap.put(key[k],UDisc[k]);
        }
        int number=treemap.size();
        Collection<UDisc> collection=treemap.values();
        Iterator<UDisc> iter=collection.iterator();
        while(iter.hasNext()) {
            UDisc disc=iter.next();
            System.out.println(""+disc.amount+"G "+disc.price+"元");
        }
        treemap.clear();
        for(int k=0;k<key.length;k++) {
            key[k]=new UDiscKey(UDisc[k].price);
        }
        for(int k=0;k<UDisc.length;k++) {
            treemap.put(key[k],UDisc[k]);
        }
        number=treemap.size();
        collection=treemap.values();
        iter=collection.iterator();
        while(iter.hasNext()) {
            UDisc disc=iter.next();
            System.out.println(""+disc.amount+"G "+disc.price+"元");
        }
    }
}
  • 结果截图

4.编程题目码云链接

原文地址:https://www.cnblogs.com/jhs888/p/8997664.html

时间: 2024-10-06 08:32:26

20165202 week10课下补做的相关文章

20165315 第二次考试课下补做

20165315 第二次考试课下补做 课上内容的补做,结果截图 参考http://www.cnblogs.com/rocedu/p/6766748.html 编程实现1!+2!+3!+... + N!的功能,N由命令行传入,比如类名为SumofRecur, java SumofRecur 8 给出1!+2!+3!+... + 8!的值, 提交运行结果的截图(至少五张),注意测试正常,异常,边界情况, 比如java SumofRecur -8,java SumofRecur 0,java Sumo

20165235 第十周课下补做

20165235 祁瑛 第十周课下补做 相关知识点的总结 LinkedList<String> mylist=new LinkedList<String>()来创建一个链表. mylist.add();来添加结点. get(int index)来获取链表中第index个位置的结点的对象. public static sort(List<E>)将链表中的元素升序排列 public static binarySearch(List<T>,T key,Compar

20165322 第十周课下补做

第十周课下补做 课程知识点总结 在数据结构和算法中,排序是很重要的操作,要让一个类可以进行排序,有两种方法: Comparable:"可比较的",(欲参与比较的对象对应的元素类需实现Comparable接口) 使用这种策略来比较时,两个对象(这里两个对象是指一个类的两个不同实例)本身必须是"可比较的",比较的标准由对象所在的类来定义,这种可比较的能力是对象本身固有的,因此不需要第三方参与就可以完成比较.要使得两个对象本身是可比较的,那么对象所在的类必须实现Compa

20165308 2017-2018-2 第十周课下补做

20165308 2017-2018-2 第十周课下补做 一.教材十五章代码分析 代码分析有的是以注释的形式写出,对整个代码的理解是写在前面的 1.p442-443 Example15_1.java Cone.java 此类不关心怎么样计算面积,计算面积由后面的类完成,只需调用即可,只关心计算体积. public class Cone<E> { double height; E bottom; //用泛型类E声明对象bottom public Cone(E b) { //参数b是泛型类型 bo

20165315 第四次考试课下补做

20165315 第四次考试课下补做 一.相关知识点的总结 泛型 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>",而且必须要用具体的类型替换"<>"中的泛型 链表

第十周课下补做

20165339第十周课上测试补做 一.相关知识点 创建链表:LinkedList<String> mylist=new LinkedList<String>(); 增加节点:list.add(E obj) 删除节点:list.remove(index) 遍历链表:(迭代器)链表对象用iterator()方法获得一个Iterator对象.用get(int index)方法返回列表中的第index个对象. 排序:public static sort(List<E> lis

20165231 第四周测试课下补做

1. 相关知识点的总结 递归: 递归是一种常见的解决问题的方法,寄把问题逐渐简单化.递归的基本思想就是"自己调用自己",有条件判断什么时候停止. 递归的调用:通过Integer.parseInt(args[i]),来实现从String类型到int类型的转化. 递归的编写:主要是应用for.if-else等循环语句. 2. 课上内容的补做,结果截图 ++递归++ JDB N=1: N=2: N=3: 3. 补做教材第二章,第三章编程题目 ++Text2_1++ 代码截图: 运行结果: +

第三周课下补做 20165216

一:相关知识点 1:关于Scanner的运用 (在使用前 使用  import java.util.*:使用 Scanner XXX =new Scanner(System.in)表示读取输入) 2:相关语言语法 对于阶乘的程序可用一个表示阶乘的函数来求和 sum=sum+fact(x); 3:关于断点的调试 熟悉进入main(1)调试,调整行数进行断点调试,可用List观察断点位置 二:课上内容补做内容截图 1: 循环与递归 2:JDB调试 三:第二章编程题 原文地址:https://www.

20165311 第一次考试课下补做

第一个测试: 第二个测试: 第三个测试: 知识点: 第一个测试 源代码名称随着public类名称的改变而改变 第二个测试 打包文件时,需要先在总目录中输入javac -d bin *.java,再输入java -cp .:bin packagename.*,在bin目录中的字节码运行出结果即可 第三个测试 源文件的名称与public类名称相同 运行时应运行主类所在的文件名称 Java语言中区分大小写 写java命令不能携带扩展名和目录 测试未完成原因:虚拟机一开始没有安装jdk 课下发现可以用g