题目分析

1.编写一个类VisualCounter,支持加一和减一操作。
2.它的构造函数接受两个参数N和max,其中N指定了 操作的最大次数,max指定了计数器的最大绝对值。
3.作为副作用,用图像显示每次计数器变化后的值。

看得懂1和2,看不懂3,1和2的函数好写,3不知道什么意思
通过看别人的答案才知道3就是函数(y坐标是计数器的值,x坐标是计数器的次数),
打个比方,就像zhihu的点赞一样:100个用户70个赞,30个点反对,那么结果就是40赞,横坐标是次数,纵坐标是最终的赞

代码

package homework1_2;

import edu.princeton.cs.algs4.StdDraw;
import edu.princeton.cs.algs4.StdRandom;

/**
 * @description: ${description}
 * @create: 2019-02-08
 **/
public class VisualCounter {
    int n;
    int max;
    int value;
    int times;

    public VisualCounter(int n, int max) {
        this.n = n;
        this.max = max;
    }

    public void increment(){
        if(value<=max &&times<=n){
            value++;
            times++;
        }
    }
    public void decrement(){
        if(Math.abs(value)<=max &&times<=n){
            value--;
            times++;
        }
    }
    public void vcDraw(){
        StdDraw.point(times,value);
    }

    public static void main(String[] args) {
        VisualCounter vc=new VisualCounter(100,30);
        StdDraw.setXscale(0,102);
        StdDraw.setYscale(-vc.max,vc.max);
        StdDraw.setPenRadius(0.01);
        StdDraw.setPenColor(StdDraw.RED);
        for(int i=0;i<100;i++){
            if(StdRandom.bernoulli(0.5)){
                vc.increment();
            }else{
                vc.decrement();
            }
            StdDraw.point(vc.times,vc.value);
        }
    }
}

运行结果

算法-第四版-练习1.2.10解答

做题感受

1.如何理解需求(题目)挺难的
2.实现起来不难
3.应该加快做题的速度

相关文章: