我现在被困在一种方法上。我需要编写一个方法,public boolean equals(CircularArray <T> m)
该方法测试两个实现为循环数组的 FIFO 队列是否具有相同顺序的相同元素。例如,假设c
和d
都是CircularArray<Integer>
具有以下数据字段的类型:
c.elements = [null,null,7,11,7,4,null] d.elements[7,4,null,7,11]
c.start = 2 d.start = 3
c.end = 6 d.end = 2
然后c.equals(d)
应该返回true
,因为从概念上讲,它们都是带有元素的队列的实现7,11,7,4
。
我编写了一个方法,它应该创建两个新数组,其中包含以正确顺序排列的元素,而没有空元素。我遇到的问题是,虽然我认为它在概念上是正确的,但我遇到了错误。附上我的方法和整个程序。
整个程序:
// FIFO Queue implemented as circular array.
// end field points after last element. Thus end==start for empty array.
public class CircularArray<T> {
private T[] elements;
int start;
int end;
public CircularArray(T[] elts) {
elements = elts;
start = 0;
end = 0;
}
public boolean empty() { return end == start; }
public boolean full() {
return ((start == 0 && end == elements.length-1) || end == start-1);
}
public void add(T x) {
if (!full()) {
elements[end] = x;
end++;
if (end == elements.length) end=0;
}
}
public T first() { return elements[start]; }
public T pop() {
if (!empty()) {
T x = elements[start];
start = start + 1;
if (start == elements.length) start = 0;
return x;
}
else return null;
}
public String toString() {
String S = "[";
for (int i = start; i != end; ) {
S = S + elements[i].toString() + " ";
i++;
if (i == elements.length) i = 0;
}
return S + "]";
}
public static void main(String[] args) {
CircularArray<Integer> Q = new CircularArray<Integer>(new Integer[8]);
Q.add(null);
Q.add(null);
Q.add(7);
Q.add(11);
Q.add(7);
Q.add(4);
Q.add(null);
Q.start = 2;
Q.end = 6;
CircularArray<Integer> F = new CircularArray<Integer>(new Integer[5]);
F.add(7);
F.add(4);
F.add(null);
F.add(7);
F.add(11);
F.start = 3;
F.end = 2;
System.out.println(Q.equals(F));
}
}
我的方法:
public boolean equals(CircularArray<T> m)
{
int a = 0;
int b = 0;
T[] elements1;
T[] elements2;
for(int i = start; i != end;)
{
elements1[a] = elements[i];
a++;
if(i==elements.length) i=0;
}
for(int i = m.start; i != m.end;)
{
elements2[b] = elements[i];
b++;
if(i==m.elements.length) i=0;
}
for(int i = 0; i <= elements.length;)
{
if(elements1[i] == elements2[i])
{
return true;
}
else
{
return false;
}
}
return true;
}