JBo*_*Boy 3 java arrays queue modulo
我有一个小问题试图弄清楚模运算是如何计算的。我正在建立一个队列,所以我有一个循环数组。我无法弄清楚这个模运算是如何工作的。
给定 q:一个长度为 5 个元素的字符数组,MAX 常量给出了数组的最大长度 "5" 罕见是一个整数,它表示数组 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;
}
Run Code Online (Sandbox Code Playgroud)
现在,假设稀有的“第一个空位”是 3,那么方法完成后稀有值是多少?这是我没有得到的,rare=(rare+1)%MAX 表示rare=4%5,这给出了rare=0,8。
方法大小相同:
public int size() {
return (MAX - front + rear) % MAX;
}
Run Code Online (Sandbox Code Playgroud)
给定,front,一个表示数组中第一个元素的 int 变量假设前面是 1 和罕见的 4,所以数组中有 3 个元素,所以大小是 (5-1+4)%5 也就是 8%5给出 1.6,而实际大小是 3 有什么建议吗?这可能比 java 更数学,但可能你们中的一些人之前遇到过同样的疑问。谢谢!
我认为您对模运算的作用有点困惑。它给出除法后的整数余数。所以从你的例子来看。
4 % 5 = 4(因为 4/5 为 0,余数为 4)
和
8 % 5 = 3(因为 8/5 是 1,余数是 3)
在没有看到您的其余实现的情况下,进一步解释为什么使用模有点困难,但看起来它基本上用于确保您的圆形阵列环绕。即,当您到达数组的末尾时(例如,最大大小为 8 的数组的索引 7,您想要的下一个值将是第一个元素,即 8%8 或 0)。