Для моего класса структур данных мы должны создать собственный тип данных Stack и реализацию для него как проекта. Проблема, с которой я сталкиваюсь, заключается в том, что профессор попросил нас реализовать метод equals (Object object). Вот что я до сих пор ...Метод Homemade Stack Equals
package stack;
import list.*;
public class Stack <E>
implements StackADT<E>//the interface
{
List <E> values;
public Stack()
{
values = new ArrayList<E>();
}
public E push(E value)
{
values.add(value);
return value;
}
public E pop()
{
return values.remove(values.size()-1);
}
public E peek()
{
return values.get(values.size()-1);
}
/** @return true only if this Stack is empty */
public boolean isEmpty()
{
return (values.size()==0);
}
/** Clear this stack, to make it an empty stack */
public void clear()
{
for (int i = 0; i < values.size()-1; i++)
{
pop();
}
}
public String toString()
{
String result = "[";
for (int i = 0; i<values.size(); i++)
{
if (i == values.size()-1)
{
result = result + values.get(i);
}
else
{
result = result + values.get(i) +",";
}
}
result = result + "]";
return result;
}
public boolean equals (Object object)
{
if (!(object instanceof StackADT))
{
return false;
}
StackADT <E> otherStack = new Stack<E>();
for(Object o: object)//heres where i run into trouble
{
otherStack.push(o);
}
for (int i=0;i<values.size()-1;i++)
{
if (!(values.get(i).equals(otherStack.pop())))
{
return false;
}
}
return true;
}
}
Наш стек довольно много ArrayList, который мы построили в нашем классе. проблема в том, что я не могу добавить объект Object в стек, потому что это не то, что iteratable (возможно для повторения). Есть лучший способ сделать это? Я бы подумал, что get() будет работать, поскольку Stack я создаю ArrayList, но всякий раз, когда я использую get() на otherStack, он не может найти метод. У меня было временное решение, когда я попробовал лить объект как стек (я надеюсь, что я использую правильную терминологию). Это выглядело примерно так
Stack otherStack = (Stack) object;
for (int i=0;i<values.size()-1;i++)
{
if (!(values.get(i).equals(otherStack.pop())))
{
return false;
}
}
return true;
}
это, казалось, работать, но когда поп() была вызвана на otherStack, значения в исходном списке (тот, который становится otherStack), который был принят в равных() метод, который мы 'также выскочил из исходного списка, что привело к некорректному результату. Есть ли лучший способ сделать это без добавления каких-либо других методов? Я стараюсь держаться как можно ближе к формуле, установленной моим профессором, поэтому я не хочу добавлять какие-либо дополнительные поля или методы. оценили и помогли.
Внутренняя реализация стека - это ваш '' '' '' '' '' '' '' '' '' ', поэтому почему бы не определить равенство двух стеков на равенство их' значений'? –