Вот мой класс:Trouble отливки интерфейса реализованного класса
public class LinkedListSet implements Set {
private class Node //much easier as a private class; don't have to extend
{
private int data;
private Node next;
public Node(){}
public Node (int x)
{
data = x;
}
public int data()
{
return data;
}
public Node next()
{
return next;
}
}
private Node first;
private int Size;
private int whichList; //used to identify the particular LL object
Вот мой интерфейс:
public interface Set {
public boolean isEmpty();
public void makeEmpty();
public boolean isMember(int x);
public void add(int x);
public void remove(int y);
public void union(Set other, Set result);
public void intersection (Set other, Set result);
public void difference (Set other, Set result);
@Override
public String toString();
@Override
public boolean equals(Object other);
public void setList(int i); //i added this to use it as an identifier for each
//list element in the set array
public String getListId(); //these two extra methods make life easier
}
У меня есть метод, как это (в LinkedListSet
классе):
public void difference (Set other, Set result)
{
if (other.isEmpty())
{
System.out.println("The set is empty before cast");
}
LinkedListSet othr = (LinkedListSet) other;
LinkedListSet res = (LinkedListSet) result;
if (this.isEmpty() || othr.isEmpty())
{
if (othr.isEmpty())
System.out.println("The set is empty after cast");
if (this.isEmpty())
System.out.println("This is also empty");
return;
}
differenceHelper(this.first, othr.first, res);
result = res;
}// the print statements were added for debugging
Проблема в том, что в описанном выше методе я не могу отличить Set Other
в связанном ему списке реализация. Когда я вызываю этот метод в основной программе, этот параметр фактически связан с типом связанного списка (поэтому я не получаю никаких ошибок).
Однако все переменные экземпляра: null
. Список пуст до и после того, как я его брошу (когда он фактически не пуст). Я знаю, это потому, что интерфейс не содержит никакой информации о Nodes
, но есть ли что-нибудь, что я могу сделать, кроме редактирования интерфейса, чтобы включить Node
?
Надеюсь, я сделал это достаточно ясно. Любая помощь будет оценена по достоинству.
Редактировать: В основной программе я создал массив наборов.
Set[] sets = new Set[7];
for (int i = 0; i< sets.length; i++) //initialize each element
{
sets[i] = new LinkedListSet();
}
каждый список имеет узлы со значениями данных, которые добавляются позже в коде ...
тогда я называю разностный метод.
sets[0].difference(sets[1], sets[4])
sets [1] .isEmpty возвращает true по какой-либо причине (хотя это не так).
Если бы я сделал что-то вроде: System.out.println (устанавливает [1] .first.data()) У меня не было бы проблем вообще. По какой-то причине все значения становятся нулевыми, когда параметры передаются методу разности.
public boolean isEmpty()
{
return first == null;
}
Пожалуйста, добавьте код реализации разностного метода LinkListSet. Также код, в котором вы создаете экземпляр и используете эти классы. Может быть, вы делаете что-то не так. – Mustafa
Это неверный код реализации. –
Проблема заключается в методе. Я проверил. –