コレクションを使用して Bag クラスを作成する必要があります (Java の組み込みコレクションではありません)。このための equal() メソッドを理解するのに苦労しています。基本的に、両方のバッグが同じサイズかどうかを確認し、それらのコピーを作成し、ユニオンを使用してそれらを結合し、for ループで現在の値が各バッグにあるかどうかを確認する必要があります。その場合は、それらを削除してください。両方のバッグが空の場合、それらは等しいです。何らかの理由で、コードが false を吐き出し続けますか?
すべてのコードで申し訳ありませんが、ほとんどのコードが一致するため、何を除外するかを特定するのは困難です。
助けてくれてありがとう!!
編集:これは、次の質問にも当てはまります: Javaでバッグクラスを構築する
public class Bag<t> implements Plan<t>{
private final int MAX = 10;
private final int DEFAULT = 6;
private static Random random = new Random();
private t[] content;
private int count;
//Constructors
public Bag(){
count = 0;
content = (t[]) (new Object[DEFAULT]);
}
public Bag(int capacity){
count = 0;
if(capacity<MAX)
content = (t[])(new Object[capacity]);
else System.out.println("Capacity must be less then 10");
}
//Implemented Methods
public void add(t e) {
try{
if(!contains(e) && (!(size() == content.length))){
content[count] = e;
count++;
}
}catch (ArrayIndexOutOfBoundsException exception){
System.out.println("Bag is Full");
}
}
public boolean isEmpty() {
return count==0;
}
public boolean contains(t e) {
Object location = null;
for(int i=0;i<count;i++)
if(content[i].equals(e)) location=i;
return (location!=null);
}
public int size() {
return count;
}
public void addAll(Bag<t> b) {
for (int i=0;i<b.size();i++)
add(b.content[i]);
}
public Bag<t> union(Bag<t> a, Bag<t> b) {
Bag<t> bigBag = new Bag<t>();
for(int i=0; i<a.size();i++)
bigBag.add(a.content[i]);
for(int k=0; k<b.size();k++)
bigBag.add(b.content[k]);
return bigBag;
}
public boolean equals(Bag<t> e) {
Bag<t> bag1 = new Bag<t>();
Bag<t> bag2 = new Bag<t>();
Bag<t> bag3 = new Bag<t>();
t object;
if(size() == e.size()){
bag1.addAll(this);
bag2.addAll(e);
bag3.union(bag1, bag2);
for(int i=0; i<bag3.size();i++){
object = bag3.content[i];
if((bag1.contains(object)) &&(bag2.contains(object))){
bag1.remove(object);
bag2.remove(object);
}
}
}
return (bag1.isEmpty()&&(bag2.isEmpty()));
}