改善算法，添加异常处理、评论，完善测试用例