第六周总结

Posted srz123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第六周总结相关的知识,希望对你有一定的参考价值。

本次我基本完成了地铁查询系统的web端内容,但成品仍有很多瑕疵,只满足了最基本的内容功能,设计代码如下:

def get_station_info(station_name):

    sql = "SELECT * FROM stations WHERE name=\'%s\'" % station_name

    result = execute_sql(sql)

    if len(result) == 0:

        return None

    else:

        return result[0]

 

 

import heapq

 

def dijkstra(graph, start, end):

    # 记录每个节点的距离和前驱节点

    distances = start: 0

    path =

 

    # 将起点加入队列

    heap = []

    heapq.heappush(heap, (0, start))

 

    # 遍历所有节点

    while heap:

        (current_distance, current_node) = heapq.heappop(heap)

 

        # 如果当前节点已经访问过,则跳过

        if current_node in path: continue

 

        # 将当前节点标记为已访问

        path[current_node] = current_distance

 

        # 如果到达终点,则返回最短路径长度

        if current_node == end:

            return current_distance

 

        # 遍历当前节点的邻居节点

        for neighbor, distance in graph[current_node].items():

            new_distance = current_distance + distance

 

            # 如果通过当前节点到邻居节点的距离更短,则更新距离和前驱节点

            if neighbor not in distances or new_distance < distances[neighbor]:

                distances[neighbor] = new_distance

                heapq.heappush(heap, (new_distance, neighbor))

 

    # 如果无法

达终点,则返回无穷大

    return float(\'inf\')

 

def calculate_distance(from_station, to_station):

    from_station_info = get_station_info(from_station)

    to_station_info = get_station_info(to_station)

    

    if not from_station_info or not to_station_info:

        return None

 

    graph = build_graph()

    distance = dijkstra(graph, from_station_info["id"], to_station_info["id"])

    return distance

 

def build_graph():

    graph =

    sql = "SELECT * FROM graph"

    result = execute_sql(sql)

    for row in result:

        from_station_id, to_station_id, distance = row["from_station_id"], row["to_station_id"], row["distance"]

 

        # 构建起点到终点的连接关系和权重

        if from_station_id not in graph:

            graph[from_station_id] =

        graph[from_station_id][to_station_id] = distance

 

        # 构建终点到起点的连接关系和权重

        if to_station_id not in graph:

            graph[to_station_id] =

        graph[to_station_id][from_station_id] = distance

 

    return graph

20182315 第六周学习总结

20182315 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结

教材学习内容总结

  • 多态:定义为“有多种形式”,多态引用是指一个在不同时刻可以指向不同类型对象的引用变量。

  • 通过继承实现多态:

(1):当某类名声明一个引用变量,该变量可引用这个类的任意对象,还可以引用继承他的类的任何对象。

(2):Mammal pet; Horse secretariat=new Horse(); pet=secretasriat;该程序将父类定义的变量pet赋给子类Horse使用。但反过来的操作会丢失一些数据,因为子类包括的方法可能是父类所不具备的,所以会引起数据丢失。

(3): Animal creature=new Horse();这种思路也是可行的。

(4):Mammal继承于Animal,Horse继承于Mammal。而Animal定义的变量可调用三个类的方法。如果三个类都有move这个方法,那如何调用?在使用前应提前声明

  • 接口:Java的接口是一组常量和抽象方法,抽像方法是一个没有被实现的方法,接口是不能被实现的。接口的抽象方法通常都不加abstract,默认接口都是公共的。

  • 继承适用于接口!

教材学习中的问题和解决过程

  • 问题1:接口由implements接入,如果一个程序想用多个接口,如何处理?
  • 问题1解决方案:一:接口可以连接其他的接口,通过接口之间的传递关系调用接口。二:接口在使用时可以逗号连接两个接口。
    技术图片

  • 问题2:对通过接口实现多态的理解存在不足。
  • 问题2解决方案:通过深入思考,以课本为例:Speaker为接口,Philosopher实现了该接口,Speaker current; current =new Speaker;可将Philosopher中的对象赋给Speaker声明的current使用,类似父类与子类。即可认为实现Speaker接口的类都可被current引用。以实现多态。Speaker guest; guest=new philosopher(); guest.Speaker(); guest=new Dog(); guest.Speaker;与类实现多态一致,先声明再使用。

  • 问题3:finally子句具体作用不明确。
  • 问题3解决方法:如果try语句执行完没有错误,即运行完执行finally语句。若try出现错误则先运行catch语句,然后再运行finally。finally常用来管理资源,如释放缓冲区,或连接数据库。
    技术图片

  • 问题4:try抛出问题后,是否会继续执行程序?
  • 问题4解决方法:若为try-catch语句,发现异常处理后可继续运行,若为try-finally语句,则结束运行。

代码调试中的问题和解决过程

  • 问题1:在Comparable接口中的“object o”不理解,不会使用。
  • 问题1解决方案:object即为object类。所有的类皆为object引伸而出。因为多态,object类可以被声明为其他任何类型,即可灵活使用。
  • 问题2:对于自定义异常后报错后继续与运行程序的使用方法掌握存在盲点。
  • 问题2解决方案:(一):操作步骤如下:1.在报错方法头加上throws "+异常类名"。2.在准备抛异常的位置写上throw new "类名"(参数);。3.catch的字句加上异常方法名,再加一个对象,用于引出异常类里的方法。(二):对于另外一种情况,抛出异常后终止操作,要先实例化一个对象,例如pp10_2_1 problem=new pp10_2_1(a);然后直接throws problem;
    技术图片

技术图片

代码托管

(由于本人在本周使用新建文件夹,因此本周的代码量不包括之前的代码量)
技术图片

上周考试错题总结

  • 错题1及原因,错题1.The instruction super( ); does which of the following?

A .calls the method super as defined in the current class

B .calls the method super as defined in the current class‘parent class

C .calls the method super as defined in java.lang

D .calls the constructor as defined in the current class

E .calls the constructor as defined in the current class‘parent class

解析:instruction super表示对当前类的父类中某些内容的调用。因为除了super()之外没有消息,所以它是对父类构造函数的调用。

  • 错题2Which of the following is true regarding Java classes?

A .All classes must have 1 parent but may have any number of children (derived or extended) classes

B .All classes must have 1 child (derived or extended) class but may have any number of parent classes

C .All classes must have 1 parent class and may have a single child (derived or extended) class

D .All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes

E .All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes

解析:Java支持继承,但不支持多重继承,因此Java类可以有任意数量的子节点,但只有一个父级。此外,由于所有Java类都直接或间接从对象类继承,因此所有Java类只有一个父类。
答案:A

  • 错题3 原因分析
    nheritance through an extended (derived) class supports which of the following concepts?

A. interfaces

B. modular

C. information hiding

D. code reuse

E. correctness

分析:通过扩展一个类并继承它,新类不必重新实现任何这些继承的方法或实例数据,从而节省了程序员的工作量。因此,代码重用是为了您的需要扩展它而重用其他代码的好处。

答案:D

结对及互评

  • 基于评分标准,我给本博客打分:12分。得分情况如下:
  1. 正确使用Markdown语法加1分:

  2. 模板中的要素齐全加1分

  3. 教材学习中的问题和解决过程, (加4分)

  4. 代码调试中的问题和解决过程, (加2分)

  5. 周五前发博客的加1分

  6. 进度条中记录学习时间与改进情况的加1分

  7. 错题学习深入的加1分

  8. 结对学习情况真实可信的加1分

点评过的同学博客和代码

其他(感悟、思考等,可选)

Java在自学的过程中难免会遇到困难,但在解决困难的过程中,可以锻炼自身的分析问题,解决问题的能力。对答案的检索,以及优质学习平台的发掘都有不可代替的作用

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 800/1000 3/4 20/18
第六周 700/900 3/3 20/19
  • 计划学习时间:20小时

  • 实际学习时间:21小时

参考资料

以上是关于第六周总结的主要内容,如果未能解决你的问题,请参考以下文章

第六周总结

20165236 第六周Java学习总结

20182315 第六周学习总结

20165232 第六周学习总结

第六周计划总结

20182310第六周学习总结