我正在用Java创建里程表样式的应用程序的想法。

基本上,我知道我可以使用一系列循环来控制旋转,但是我正在考虑数学上的方式。

因此,如果我的数学正确的话,如果每个刻度盘从0到9旋转十次,并且有六个刻度盘,则总共应该旋转1000000次。

Math.pow(10, 6);

我的问题是;跟踪最后一个刻度盘旋转的最有效方法是,因为像一系列真正的齿轮一样,最后一个刻度盘每旋转十圈,最后一个刻度盘就会旋转一次。

然后,从上一个刻度盘开始每旋转十分之一秒,从最后一个刻度盘开始旋转第三个秒,然后所有其他旋转将重置为零。

有什么建议吗?

最佳答案

建议的实现方式毫无疑问,使模型变得比仅仅为了机械地重新创建对象而变得更加复杂。有关佐证,请参见John3136的答案。

旋转模型可以很简单:

int rotations = 0;

/**
 * Increment rotations every rotation
 */
void rotate() {
    rotations++;
    if (rotations >= Math.pow(10, 6)) // consider extracting as constant
        rotations = 0; // reset
}

然后创建视图:
/**
 * dial can be from 1 .. 6 (where dial 1 moves every rotation)
 */
int getDialPosition(int dial) {
    int pow = Math.pow(10, dial);
    return Math.floor((rotations % pow) / (pow / 10));
    // above gets the digit at position dial
}

注释
  • 将以上模型包装为里程表类
  • 建立一个每次旋转都会刷新的视图
  • 10-08 18:28