我的教授要我这样做:
使用
下方的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 ++出现以来,它已经很长了。
答案 0 :(得分:1)
延长
SquareCounter可以扩展ResetableCounter,而ResetableCounter可以扩展SimpleCounter。好处是您不需要重新实现reset();
或value();
等方法。
主题-Safetiness
如果您打算在多个场合使用您的类,则需要使这些方法同步,或者在AtomicInteger
上运行。否则,您可以同时拥有两个up()
个值的线程,但在一个案例中返回旧值。
主类班次
没有你的主要课程在柜台班。为该方法设置一个单独的.java
文件。
答案 1 :(得分:1)
Ben所说的扩展绝对是一个好主意,虽然ResettableCounter接口实际上也可以扩展Counter接口,然后reset()将是你需要在ResettableCounter接口中声明的唯一新方法。