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

本文介绍了一个名为VisualCounter的类的设计与实现,该类支持加一和减一操作,并在达到指定次数和最大绝对值限制下,通过图像显示计数器的变化过程。文章详细解释了类的功能和绘图方法,以及如何使用它来创建动态的计数器展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目分析

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.实现起来不难
3.应该加快做题的速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值