いくつかのメソッドを取り除いた変更済みのSetインターフェイスを使用して作成した2つのResizableArraySetオブジェクトの結合と交差を検索しようとしています。私は両方のセットを渡して両方を処理するのに苦労しています。それは正確には起こりませんが、ここで私がしようとしていることをよりよく説明するコードがあります。私のテスターでの呼び出しです。2つのサイズ変更可能な配列セットの比較
System.out.println(Arrays.toString((set.union(set2)).toArray()));
私はテスターで作ったオブジェクトです.set2は、setと比較するために作られた別のResizableArraySetオブジェクトです。私がそれを印刷すると、set2の配列が得られます。
ここには、コンストラクタとインスタンス変数があります。
public class ResizableArraySet<T> implements Set<T> {
private int numberOfEntries;
private int size;
T[] array;
/**
* Constructor for Set without size variable (Default size is 10)
*/
@SuppressWarnings({ "unchecked" })
public ResizableArraySet() {
array = (T[]) new Object[10];
}
/**
* Constructor for the Set with size variable
*
* @param size
*/
@SuppressWarnings({ "unchecked" })
public ResizableArraySet(int size) {
this.size = size;
array = (T[]) new Object[size];
}
ここで私のユニオンメソッドに関連するコードです。交差法が必要な場合、私はそれを編集で提供することができますが、問題は両方の方法で同じだと思います。ここで
@SuppressWarnings({ "unchecked", "unused" })
@Override
public Set<T> union(Set<T> anotherSet) {
T[] newArray = (T[]) new Object[anotherSet.getSize()];
int entries = this.size;
System.out.println(entries); //Get 0, when the size is not 0
for (int x = 0; x < entries; x++) {
if (anotherSet.contains(array[x]) == false) {
anotherSet.add(array[x]);
}
}
return anotherSet;
}
は、私の追加され、削除、だから私の問題を総括する方法
@Override
public boolean add(T newEntry) {
if (contains(newEntry)) {
return false;
} else if (array.length > numberOfEntries) {
array[numberOfEntries] = newEntry;
numberOfEntries++;
return true;
} else {
array = Arrays.copyOf(array, (array.length * 2));
array[numberOfEntries] = newEntry;
numberOfEntries++;
return true;
}
}
@Override
public boolean remove(T anEntry) {
if (contains(anEntry) != true) {
return false;
}
for (int x = 0; x < numberOfEntries; x++) {
if (array[x].equals(anEntry)) {
// Loop to move the values down one index in the main array
for (int a = x; a < numberOfEntries; a++) {
array[a] = array[a + 1];
}
numberOfEntries--;
}
}
return true;
}
@Override
public boolean contains(T anEntry) {
for (int x = 0; x < numberOfEntries; x++) {
if (array[x].equals(anEntry)) {
return true;
}
}
return false;
}
が含まれています。私は両方のオブジェクトを比較するのに問題があります。なぜなら、両方とも同じメソッドを使用する必要があるからです。[contains(anEntry)、add(anEntry)、getSize()]
有用なコードが見つからない場合は教えてください。 誰かが私の問題に対する解決策を持っていますか?
「numberOfEntries」はどこに設定されていますか? 'numberOfEntries'の代わりに' this.size() 'を呼び出せないのはなぜですか? –
'numberOfEntries'が間違った値である場合、エントリをセットに追加し、セットからエントリを削除するコードはおそらくそれを正しく更新していません。 –
@DarshanMehta numberOfEntriesは、コンストラクタの外部にあるインスタンス変数です。私はthis.sizeとthis.getSize()を呼び出すと、同じエラーが出ます。エントリはまだ0です。私はこのコード –