• CS 61B Project1


    先上两张结果测试图,这次的project就如作业一开始所说,真的非常time-consuming,要早点做。。。

    趴一:

    1. 需要特别注意x,y和row,column和i,j和width,height的对应关系,坐标(x,y)中x与width相关代表列,y与height相关代表行。

    2. blur需要向外扩展一圈,value=0;edge需要镜像向外扩展一圈,值取原外圈的值。注意扩展之后width和height各需要加上2,而不是加1。

    之所以要向外扩展是因为这样可以把一些情况统一起来(四个角,边缘,其他)。减少代码量。

    3.blur用到递归

          return SecImage.boxBlur(--numIterations);
              }else{        
              return this;}

    结尾部分大致是这个样子,最开始第二个return我写的return SecImage,但是会提示错误“SecImage cannot resovled to a variable”,发现如果numIterations = 0 ,程序直接跳进else里面,但这里面没有设置变量SecImage,所以应该直接return this,表示不进行任何模糊处理,return 原图。 

    4. 有很多时候需要用到int long short强制转换。

    5. 添加jar(一亩上面看到的)

    6. 代参数运行 Run--Run configurations--设置跑的project和函数--Arguments里面填参数。

    趴234:

    (强烈建议先做3再做2和4.最开始按照作业的顺序,完全思路无法理顺。。。。而且main里面的测试代码也要先写完了3才能测试出2。)

    趴234之23:

    1. 这部分的核心在于runIterator,我觉得它最大的好处就是.next()返回需要的东西会自动指向下一步,当然自己写runIterator就要把这一步体现出来。最开始我不太明白是要自己写一个runIterator还是用java有的iterator,后来知道是要自己写一个,所以就仿照着iterator写了一个针对链表的iterator;(今天发现package那一lecture有详细的讲解iterator)

    参数有:

        private DListNode2 runindex;
        private long processLength;
        private long nodesnum;

    函数有(不一定只有这些,但在我的程序里这些就够了):构造函数RunIterator(DListNode2 runhead,long runsnums)/runpoint()  [用于返回当前指针] /hasNext()  /next() /remove()

    补充iterator知识:

    来自:https://people.eecs.berkeley.edu/~jrs/61b/lec/13

    2. 构造函数里面变量作业规定都是private,所以要额外的写一些函数返回需要的值。比如:PixImage 和 RunIterator里的变量

    3. red green blue encode之后长度都相同,所以可以放在同一个run里的判断条件是

    RED[Runindex]==image.getRed(i, j)&&GREEN[Runindex]==image.getGreen(i, j)&&BLUE[Runindex]==image.getBlue(i, j))

    之前还以为green blue 会跟着red一毛一样除了值,跑的时候出错,才发现需要三个都相同的时候才放在同一个run里。

    4. 每个run里的runlength需要初始值设为1而不是0,因为新建一个run意味着已经有一个值了。

    5. 在一个构造函数里面构造同样的构造函数记得把参数值传一下。

          RunLengthEncoding ImagetoRuns = new RunLengthEncoding(ImageWidth,ImageHeight,finalRed,finalGreen,finalBlue,finalLen);
          RunsHead = ImagetoRuns.RunsHead;
          this.width=ImagetoRuns.width;
          this.height=ImagetoRuns.height;
          this.RunsNum=ImagetoRuns.RunsNum;

    之前忘记传了。。出错。。

    6. 每增加或者减少node记得要变化nodenum。。。

    7. 学会使用Arrays系列的函数,比如Arrays.copyOf()

    8. 用了之前hw中的DListNode2和DList,很好用。注意这个链表head是null。双向的circle。

    9. 之前一直不明白为什么要另外写个iterator来new RunIterator。。。还以为要在这个函数里面搞事情。。。后来发现只有这一个用处。。。可能是为了统一吧。

      public RunIterator iterator() {
        // Replace the following line with your solution.
          RunIterator i = new RunIterator(this.RunsHead,RunsNum);
          
        return i;

    趴四:

    其实不难就是要考虑很多种情况,我的程序一共考虑了9种情况(核心if用了9个),就能够做出来。。思路不写了,怕影响组员的思考,如果有考虑少于9种或者if少于9个能做出来的大佬,记得跟我说一声!(最开始想的是先换成image再插入再encode。。发现作业中说这是cheat的行为【微笑)

    最后,测试除了可以跑main里面的还可以跑一下test,就会有之前图中的autograde。part4 其实写的特别顺,也特别慢。。但是debug两次就能跑通还是很爽的!

  • 相关阅读:
    鼠标移上,内容显示
    Jquery横向菜单和纵向菜单的收起与展开
    适配不同大小浏览器——固定排班
    jQuery UI Widgets-menu
    Web前端的35个jQuery小技巧-转载
    android中listview中包含ratingbar响应不了点击事件
    点击空白区域,键盘向下收缩
    时间轮 Dialog 最简单的时间轮
    android 获取电话本中的联系人列表
    《网红经济》读后感
  • 原文地址:https://www.cnblogs.com/developerchen/p/7182437.html
Copyright © 2020-2023  润新知