Algs4-1.2.10编写一个类VisualCounter

1.2.10编写一个类VisualCounter,支持加一和减一操作。它的构造函数接受两个参数N和max,其中N指定了操作的最大次数,max指定了计数器的最大绝对值。作为副作用,用图像显示每次计器变化后的值。
答:Draw Point时操作次数作为X坐标,计数器值作为Y坐标。

public class VisualCounter
{
    private int maxOperationTimes;
    private int maxCountAbs;
    private int operationTimes;
    private int count;
   
    public VisualCounter(int N,int max)
    {
        maxOperationTimes=N;
        maxCountAbs=max;
        operationTimes=0;
        count=0;
    }  
   
    public void increment()
    {
       if (operationTimes<maxOperationTimes && Math.abs(count)<maxCountAbs)
       {
          operationTimes++;
           count++;
        }
    }
   
    public void decrease()
    {
       if (operationTimes<maxOperationTimes && Math.abs(count)<maxCountAbs)
       {
          operationTimes++;
           count--;
        }
    }
   
    public int tally()
    {
        return count;
    }
   
    public int operationTimes()
    {
        return operationTimes;
    }
   
    public boolean isEnd()
    {
      return  operationTimes>=maxOperationTimes || Math.abs(count)>=maxCountAbs ;
    }

public void draw()
    {
        StdDraw.point(operationTimes,count);
    }

public static void main(String[] args)
    {
        int N=Integer.parseInt(args[0]);
        int max=Integer.parseInt(args[1]);
        VisualCounter vC=new VisualCounter(N,max);
        int num;
        StdDraw.setXscale(0,N);
        StdDraw.setYscale(-1.0*max,max);
        while (true)
        {
            num=StdRandom.uniform(max/17);
            for(int j=0;j<num;j++)
            {
                 if (num%2==0)
                     vC.increment();
                 else
                     vC.decrease();  
                 vC.draw();
                 if(vC.isEnd()) return;
            }
       }
    }
}

原文地址:https://www.cnblogs.com/longjin2018/p/9848859.html

时间: 2024-10-03 04:37:28

Algs4-1.2.10编写一个类VisualCounter的相关文章

35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

  35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和: (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!): (4)编写测试类E,在测试类E的main方法中使用接口回调的形式来测试实现 接口的类. p

已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组 var dt= arr.toString().split(",").sort(function(a,b){return a-b}).map(Number);Array.from(new Set(dt)) 代码如下 var d

首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能

//计算器 jisuanqi jsq=new jisuanqi(); System.out.println("2和3 中最大的是:"+jsq.max(2, 3)); System.out.println("2/3/10 中最大的是:"+jsq.max(2, 3, 10)); System.out.println("2.3和4.5 中最大的是:"+jsq.max(2.3, 4.5)); public class jisuanqi { // 属性 /

按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!);

package com.homework2; public class ClassA implements InterfaceA { @Override public int method(int n) { int sum = 0; for(int i = 0; i<=n;i++) { sum+=i; } return sum; } } package com.homework2; public class ClassB implements InterfaceA { @Override pub

按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。 (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性, 和计算体积的方法。 (3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、 宽、高,输出其底面积和体积。

package jvxing; public class Jvxing { //成员变量 private double width; private double chang; public double getWidth() { return width; } public void setWidth(double width) { this.width = width; } public double getChang() { return chang; } public void setC

python socket之编写一个类QQ通信工具

今天刚写完ssh程序,感觉跟写一个QQ及时通信的原理差不多,所以就利用下午的时间进行修改一下早上得代码,ssh里面有个bug就是当客户端或者服务端没有输入直接按回车的时候进程就死掉.这里就加个简单的循环判断而已.其他的原理都一样: 服务端代码: #!/usr/bin/python# -*- coding: utf-8 -*-import socketimport osimport timeHOST = ''PORT = 11111s = socket.socket(socket.AF_INET,

编写一个类,用来测试正则表达式,看看它们能否匹配一个输入字符串

package 正则表达式; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestRegularExpression { public static void main(String[] args) { // TODO Auto-generated method stub if(args.length<2) { System.out.println("参数有误"); Sy

13.首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能。

package java1; //计算器 public class Jisuanqi { //属性 //型号,品牌等 //重载 //1.方法同名不同参 //2.返回类型和重载无关 //3.多态的一种表现形式 //4.构造方法也可重载: //方法 //加法运算 public int Jia(int a,int b) { return a+b; } public int Jia(int x,int y,int z) { return x+y+z; } //浮点数加法 public double Ji

如何限制一个类对象只在栈(堆)上分配空间?

最近做了一道题:在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错) 其实该问题等同于如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间.但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类.这能不能实现呢?仔细想想,其实也是可以滴. 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 1.静态建立类对象:是由编译器为对象在栈空间中分配内存,