算法第四版 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); } } }
结果如下: