算法第四版 1.2.10

编写一个visualcount类支持+1和-1操作,它的构造函数接受2个参数,N,Max。

其中N指定了操作的最大次数,Max指定了计数器的最大绝对值.作为副作用,用图像显示每次作用后最大的值

 

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

public class No_1_2_10 {
    public static class VisualCounter
    {
        private int count;//计数器
        private int operater;//一共操作了多少次
        private int max;//计数器最大绝对值
        private int n;//操作的最大次数
        
        public VisualCounter(int N,int Max)
        {
            this.n = N;
            this.max = Math.abs(Max);
            StdDraw.setXscale(0, N+1);//给StdDraw类设置参数x,y的范围
            StdDraw.setYscale(0, Max*2);//
            StdDraw.setPenRadius(0.05);//设置笔的半径
        }
        
        public void increment()
        {
            operater++;//操作次数+1
            count++;//计数器加一
            StdDraw.point(operater, count);//画出以操作数和计数器为参数的圆
            if(operater>n||Math.abs(count)>max)
            {
                throw new RuntimeException();
            }
        }
        
        public void decliine()
        {
            operater++;//操作数+1
            count--;//计数器减一
            StdDraw.point(operater,count);//画出一个点
            if(operater>n || Math.abs(count)>max)
                throw new RuntimeException();
        }
        public int tally()
       {
        return count;//返回计数器的值
       }
        
        public String toString()
        {
            return "操作了"+operater+"次"+"此时的count为"+count+"次";
        }
        
        
        public static void main(String[] args)
        {
            int n = 5;
            int max = 3;
            
            VisualCounter visualcount = new VisualCounter(n,max);
            visualcount.increment();
            visualcount.increment();
            visualcount.increment();
            visualcount.decliine();
            visualcount.decliine();
            StdOut.println(visualcount);
        }
    }
}

结果如下:

 

 

 

posted @ 2020-02-11 23:12  清明道人  阅读(217)  评论(0编辑  收藏  举报