我有一个小问题试图弄清楚模运算是如何计算的。
我正在建立一个队列,所以我有一个圆形数组。
我无法弄清楚这个模运算是如何工作的。
给定 q:一个 5 个元素长度的字符数组,
MAX 常量给出数组的最大长度“5”
rare 是一个 int,代表数组 q 中的第一个可用位置
public void enqueue(Character c)throws FullQueueException{
if(size()== MAX -1){ //if only 1 place left, is full, throw exc
throw new FullQueueException("Queue is full");
}
q[rare]=c;
rare=(rare+1)%MAX;
}
现在,假设稀有的“第一个空点”是三个,那么该方法完成后稀有值是多少?
这是我不明白的,稀有=(稀有+1)%MAX意味着稀有= 4%5,这给出了稀有= 0,8。
方法大小相同:
public int size() {
return (MAX - front + rear) % MAX;
}
给定 front 一个 int 变量,它表示数组中的第一个元素
假设 front 为 1,rare 为 4,因此数组中有 3 个元素,因此大小为 (5-1+4)%5,即 8%5,即 1.6,而实际大小为 3
有什么建议吗?这可能比java更数学,但可能你们中的一些人之前遇到过同样的疑问。
谢谢你!
我认为您对模运算的作用有点困惑。它给出除法后的整数余数。所以从你的例子来看。
4 % 5 = 4(因为4/5是0,余数是4)
AND
8 % 5 = 3(因为 8/5 是 1,余数是 3)
如果没有看到其余的实现,就很难进一步解释为什么使用模数,但看起来它基本上是用来确保循环数组环绕的。即,当您到达数组末尾时(例如最大大小为 8 的数组的索引 7,您想要的下一个值将是第一个元素,即 8%8 或 0)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)