我正在研究用Java创建里程表式应用程序的想法。
基本上我知道我可以使用一系列循环来控制旋转,但我想用数学方法做这件事。
因此,如果每个表盘旋转十次,从0到9,并且有六个刻度盘,如果我的数学运算正确的话,总共应该有1000000个旋转。
Math.pow(10, 6);
我的问题是;什么是跟踪最后一个表盘旋转的最有效方法,因为像一系列真正的齿轮一样,对于最后一个表盘的每十匝,最后一个表盘将转一次。
然后,对于从最后一次拨号开始的第二次转动,第三次转动将从最后一次转动,然后其他所有其他转动将重置为零。
有任何建议或意见吗?
答案 0 :(得分:4)
轮换模型可以简单如下:
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
}
备注强>
答案 1 :(得分:1)
回想一下设计和关注点的分离。你在这里有一个0到9999999之间的数字显示。里程表只是这个数字的“视图”。 我创建了我的模型(保存一个数字,并有一些增加数字的方法),然后编写一个视图,以我选择的任何GUI样式显示它。
答案 2 :(得分:0)
您可以使用composite pattern创建一个类,其中每个计数器都可以包含一个嵌套的子计数器 当子项被添加到父项时,父项将自己注册到子项,以便每次子项计数器移动到零阈值时接收递增和递减事件。