首页 > 技术文章 > Java 长跑

SKYOFROC 2014-09-27 16:07 原文

1、因为人数不定,所以需要用到线性表或者链表,粗看之下,链表似乎效率高(事实貌似未必。。。)

2、用一个package存放链表的定义,其中MyList为接口,MyAbstractList 实现接口,MyLinedList 继承MyAbstraList

3、刚百度了下接口和继承的区别,原来java不能多重继承,【多重继承就一个子类继承多个父类】,但是允许实现多个接口

4、另外,如果一个有一个父类,那么他应该被定义成Abstract

5、每个人都有很多信息,比如学号,起点、终点、用时,总距离,平均速度,在C语言中,这些信息应该存放在结构体,但是在java中我们用一个自定义类:datasheet来存放

6、在main函数里,首先要读取一行,然后split成多段,用字符串数组保存,然后 new 一个新的datasheet对象stu,先初始化他的编号,接着遍历已有的list,看看有无同名,有,则用update函数,无则把这个stu 添加到list里面,循环,直到结束,然后遍历所有list,把距离、速度、学号输出

7、思路很简单,一开始就想到了,只是以前没有干过这种事情,所以在具体实现上有困难,所以现在要趁热回顾一下

8、新建datasheet对象student并且初始化它的编号

            DataSheet student = new DataSheet();        //放入DataSheet里
            student.setNumber(subline[0]);    

9、遍历已有的list,看看有无同名的记录

            int temp = list.indexOfNumber(student); 

10、此处的遍历是具体的遍历,仅仅查找有无 number一样的记录,所以要具体写indexOfNumber

  首先,此方法对象是list,所以应该写在MyLinkedList里

  但是,蛋疼的是,对比的东西是 number,而number又是datasheet里的变量,所以要把进行比较的两个变量转化成datasheet类型(关键)

    public int indexOfNumber(Object o){
        if(first == null)return -1;
        Node current = first;
        for(int i=0; i<size; i++){
            DataSheet student = (DataSheet)current.element;
            if(student.equals(o))return i;
            else current = current.next;
        }
        return -1;
    }

11、上一步还要重写 equals 方法

  因为 equals 的对象是 student 这是datasheet里的变量,所以根据对象是谁,就把方法重写在哪的原则

  equals 应该重写在 datasheet 里(关键)

  具体重写很简单,只用 eclipse 自带的重写equals 功能根据变量 number 重写就OK了

12、写完 indexOfNumber方法后,就简单了

            if(temp == -1){
                student.initial(subline[0], subline[1].charAt(0), Long.parseLong(subline[2]));    
                list.addLast(student);                        //列表末未添加一个记录
            }
            else{
                student = (DataSheet)list.get(temp);
                student.update(subline[0], subline[1].charAt(0), Long.parseLong(subline[2]));
                list.set(temp, student);                    //更新此人的数据
            }

13、但是最后还有一个关卡,要遍历所有的记录,把 number、speed、distance 输出来

  只要在datasheet里重写 toString 方法就OK了

    public String toString() {
        // TODO Auto-generated method stub
        return String.format("Number:%s , Distance:%d , Speed:%f",
                number, distance, speed)  ;
    }

 

推荐阅读