【问题标题】:Beginner Java Counter Code初学者 Java 计数器代码
【发布时间】:2013-09-16 00:57:21
【问题描述】:

我的教授要我这样做:

使用下面的 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();
}

一个名为 BasicCounter 的 ResetableCounter 实现,它从值 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;
    }
    }

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

我还没有弄清楚。

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

到目前为止,我需要对我的工作发表评论。你觉得够了吗?我如何在可复位计数器上工作?我对 JAVA 很陌生,而且自从我使用 C++ 以来已经很久了。

【问题讨论】:

  • 你哪里有烦恼?或者你想要代码审查?
  • @nachokk,我想要一个代码审查...以及最后的灵活计数器,我还不知道。
  • 这不是真正的代码审查网站。
  • @redFIVE,如果您建议其他网站,我很乐意去那里。谢谢。

标签: java counter


【解决方案1】:
  1. 扩展
    SquareCounter 可以扩展 ResetableCounter,而 ResetableCounter 可以扩展 SimpleCounter。好处是您不需要重新实现 reset();value(); 之类的方法。

  2. 线程安全
    如果您打算在多个场合使用您的类,您需要同步这些方法,或者在AtomicInteger 上操作。否则,您可能有两个线程 up()同时处理您的值,但在一种情况下返回了旧值。

  3. 主类
    不要将您的主要课程放在柜台课程中。为该方法创建一个单独的 .java 文件。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2016-02-16
      • 1970-01-01
      • 2020-07-09
      • 2021-01-26
      • 2014-05-04
      相关资源
      最近更新 更多