初学Java计数器代码

时间:2013-09-16 00:57:21

标签: java counter

我的教授要我这样做:

使用

下方的Counter接口编写多个可互换的计数器
public interface Counter {
/** Current value of this counter. */
int value();
/** Increment this counter. */
void up();
/** Decrement this counter. */
void down();
}

开发以下内容:

一个接口ResetableCounter,除了Counter。

之外,还支持消息void reset()

这就是我的所作所为:

public interface ResetableCounter {
void reset();
int value();
void up();
void down();
}

ResetableCounter的一个名为BasicCounter的实现,它从值0开始,分别向上和向下计数+1和-1。

这就是我的所作所为:

public class BasicCounter implements ResetableCounter
    {
      int counterVariable = 0;
    public static void main(String[] args)
    {
        BasicCounter cnt = new BasicCounter();
        cnt.up();
        cnt.down();
        System.out.printf("The value is %d", cnt.counterVariable); 
    }

    public void reset() {
        this.counterVariable = 0;
    }

    public int value() {
        return this.counterVariable;
    }

    public void up() {
        ++this.counterVariable;
    }

    public void down() {
        --this.counterVariable;
    }
    }

ResetableCounter的一个名为SquareCounter的实现,从值2开始,通过平方其当前值来计数,并通过取其当前值的平方根来计数(总是向上舍入,即1.7舍入为2,就像1.2舍入到2)。

这就是我的所作所为:

public class SquareCounter implements ResetableCounter {
int counterVariable = 2;
public static void main(String[] args) {
    SquareCounter cnt = new SquareCounter();
    cnt.up();
    cnt.down();
    double d = Math.ceil(cnt.counterVariable);
    System.out.printf("The value is %f", d); 
}

public void reset() {
    this.counterVariable = 0;
}

public int value() {
    return this.counterVariable;
}

public void up() {
    Math.pow(this.counterVariable, 2);
}

public void down() {
    Math.sqrt(this.counterVariable);
} 
 }

ResetableCounter的一个名为FlexibleCounter的实现,它允许客户端在创建计数器时指定起始值以及附加增量(用于向上计数)。例如,新的FlexibleCounter(-10,3)将产生一个当前值为-10的计数器;在调用up()之后,它的值将是-7。

我没想出来。

所有的实现都应该是可重置的,并且每个实现都应该包含一个main方法,用于测试实现是否像使用assert一样按预期工作(就像我们在讲座中所做的那样)(这是一种简单的单元测试方法,稍后我们将讨论它)。

我需要对我的工作发表评论。你觉得它有什么问题吗?我如何在可重置计数器上工作?我对JAVA非常陌生,而且自从C ++出现以来,它已经很长了。

2 个答案:

答案 0 :(得分:1)

  1. 延长
    SquareCounter可以扩展ResetableCounter,而ResetableCounter可以扩展SimpleCounter。好处是您不需要重新实现reset();value();等方法。

  2. 主题-Safetiness
    如果您打算在多个场合使用您的类,则需要使这些方法同步,或者在AtomicInteger上运行。否则,您可以同时拥有两个up()个值的线程,但在一个案例中返回旧值。

  3. 主类班次 没有你的主要课程在柜台班。为该方法设置一个单独的.java文件。

答案 1 :(得分:1)

Ben所说的扩展绝对是一个好主意,虽然ResettableCounter接口实际上也可以扩展Counter接口,然后reset()将是你需要在ResettableCounter接口中声明的唯一新方法。