私は現在、コードの特定の部分で立ち往生しています。私のクラスでは、人や貨物が入った有蓋車を含む列車を作成します。ジェネリックを使用して、ボックスカーが人または貨物を保持できるかどうかを定義します。次に、個々の人/貨物をボックスカーにロードし、すでにボックスカーに乗っている人と同じ文字列「ID」を持っている場合は、エラーをログに記録し、その人/貨物をロードしません。これは私が問題を抱えているところです。私は一生の間、それらの「ID」を比較してそれらが等しいかどうかを確認する方法を理解することはできません。以下は私がこれまでに持っているコードです、
package proj5;
public class Person implements Comparable<Person> {
private String id;
private String name;
private int age;
public Person(String id, String name, int age){
this.id = id;
this.id = id;
this.name = name;
this.age = age;
}
public Person(String id){
this.id = id;
}
public String getId(){
return id;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String toString(){
String str = " " + "ID: " + id + " " + " Name: " + name + " " + " Age: " + age;
return str;
}
public int compareTo(Person p) {
int result = this.id.compareTo(p.getId());
return result;
}
}
package proj5;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class Boxcar<T extends Comparable<T>> {
private ArrayList<T> boxcar;
private int maxItems;
private int boxcarID;
public Boxcar(){
boxcar = new ArrayList<T>();
}
public void load(T thing){
for(int i = 0; i < boxcar.size(); i++){
if(boxcar.size() < maxItems && !boxcar.get(i).equals(thing)){
boxcar.add(thing);
System.out.println(boxcar.get(i));
}
else{
boxcar.remove(thing);
}
}
Collections.sort(boxcar);
}
public int getBoxcarId(){
return boxcarID;
}
public int getMaxItems(){
return maxItems;
}
public void setMaxItems(int i){
maxItems = i;
}
public void unload(T thing){
for(T item : boxcar){
if(item.equals(thing)){
boxcar.remove(item);
}
}
}
public List<T> getBoxcar(){
return boxcar;
}
public String toString(){
String str = "";
for(T item : boxcar){
str += item + "\n";
}
return str;
}
}
問題は私のロード機能にあります。IDを比較する方法がわかりません。明確にするために、オブジェクトIDは文字列です。他のクラスもありますが、必要だと思ったクラスだけを含めました。さらにファイルが必要な場合は、喜んで提供させていただきます。私はこれに何時間も立ち往生していて、助けていただければ幸いです!事前にどうもありがとうございました!
編集:Collections APIのcontains()メソッドを使用しようとしましたが、なぜそれが機能しないのですか?完璧に動作するようです。