初学Java计数器代码

我的教授要我这样:

使用下面的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测试实现是否按预期工作,就像我们在讲座中所做的那样(这是一种简单的unit testing方法,稍后我们将讨论)。

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

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

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

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

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