UCB CS61B proj1

2023/11/21
回来补一下链接和一些挂掉的图片……

2023/10/31
这个proj最后还是没能做完,暑假结束之后很难再抽出时间像假期那样一搞一整天了。不过数据结构部分还是写完了,只是由于我自己的问题没能用上那几个包实现音乐的部分(好可惜,这才是这个项目最好玩的部分)。不过由于之前发的proj0在我意料之外的居然真的有朋友在看,所以时隔两个月还是决定把这篇(烂尾的)记录发上来。虽然记的很烂,很稀碎,但是还是很希望某一个点能够帮到正在看的你!

2023/08/27

proj1 手撕双端队列。

实现A部分(LinkedListDeque)的数据结构,B部分开头做了一小部分。

手撕数据结构可以说非常爽。

0. 课程资料链接、原始代码链接、参考文章链接

1. part A LinkedListDeque

problem1

不知道为什么,proj0的默认JDK是12,到proj1又变成了5(可能我从GitHub上翻出来的代码本来就不是来自同一个版本的课程)。

resolve1

把所有涉及到JDK版本和language level的地方全点开看了一遍,全部换成JDK8。

image

image

image

image

problem2

getRercursive这个递归想了很久,发现他自己没办法递归……

resolve2

需要用另一个方法来进行辅助,因为只有index一个参数是没办法递归去查表中其他节点的。

image

image

做add和remove的时候,想起之前在洛谷读到过一个大佬的题解(非常感谢,但是找了很久实在没找到原帖),把插入和删除比喻成同学排队,pre和next比喻成一个同学的左右手。以插入为例,本来是A在B的前面(左边),就看成A的右手拉着B的左手。此时要把C放到AB之间,也就是需要先把A的右手和B的左手松开,再让A的右手牵住C的左手,C的右手牵住B的左手。

2023/08/29

写完了B部分(ArrayDeque),开了一点C部分。

之前的A部分做的是双端队列的链表实现,B部分做的是数组实现。

image

这是课程原文档中的提示,也就是说,我们的队列是位于一个数组里的,我们在这里所定义的head和tail指的是我们队列的第一个和最后一个,不一定是数组的第一个和最后一个,他们是会随着我们在队列的【头/尾】【增加/删除】元素而变化的(所以这里还会涉及到数组的扩容和缩容问题)。

这一部分没有遇到多少难解决的问题(应该是因为都在A部分解决掉了......)。还在学习测试要怎么写。

2023/08/30

晚上写了Deque的接口,完成了GuitarString部分,但是测试那里遇到了很多问题。

problem3

并没有get到用maven打开项目是什么意思(应该是我有些文档看漏了)。但是打开之后确实找不到StuAudio的包,测试的时候疯狂报错,完全运行不了。我自己去网上找了这个包放进去,但是报错如下:

image

网上兜了一圈,说是因为这个包版本太高,我的JDK版本太低。

兜兜转转地终于解决完了……

resolve3

关于重新加了一遍包,没有用。

后面又在GitHub上扒出了某个好几年前项目的StuAudio和StuDraw包,一开始是分别放在stdaudio和stddraw两个文件夹下,结果draw这个死活找不到。只好放在同一个包里,如下图。

image

终于能运行这个test了……然后开始疯狂报错,先是数组下标越界,然后是卡死爆内存。

应该是addLast和resize的锅,但是看到别人的代码甚至没有resize,满了就直接抛异常……

posted on 2023-10-31 10:32  ww0809  阅读(137)  评论(0)    收藏  举报