题目分析
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 &×<=n){
value++;
times++;
}
}
public void decrement(){
if(Math.abs(value)<=max &×<=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.应该加快做题的速度