我需要帮助。你能给我解决方法如何修复我的代码吗? 我有一个arraylist,其中每个都包含一些元素。我想使用搜索方法只通过一个元素关键字找到它。
这是要添加的代码
System.out.print("ID_Cargo >> ");
ID_Cargo=scan.next();
System.out.print("No_Container >> ");
No_Container=scan.next();
CARGO.add(new CARGO(ID_Cargo,No_Container));
这是搜索
String find;
System.out.println("ID Cargo : ");
find=scan.next();
if(CARGO.contains(find)){
System.out.println("FOUND");
}
else{
System.out.println("NOT FOUND");
}
搜索始终返回未找到但我找到的元素存在。如何修复它才能返回FOUND? 感谢' S
答案 0 :(得分:1)
看起来您的CARGO
列表包含CARGO
个对象(使用相同的名称不是一个好主意),但是您正在检查是否包含字符串(find
)列表,自然返回错误。
如果您希望按标识符搜索CARGO
个实例,HashMap<String,CARGO>
更合适。
Map<String,CARGO> cargoMap = new HashMap<>();
cargoMap.put(ID_Cargo,new CARGO(ID_Cargo,No_Container));
...
if(cargoMap.containsKey(find)){
System.out.println("FOUND");
} else {
System.out.println("NOT FOUND");
}
编辑:
要显示具有CARGO
键的find
isntance的属性(假设您的CARGO
类具有此类getter方法):
CARGO cargo = cargoMap.get(find);
if (cargo != null) {
System.out.println("FOUND: " + cargo.getCargoID() + " " + cargo.getContainerNo());
} else {
System.out.println("NOT FOUND");
}
答案 1 :(得分:0)
您的CARGO列表中有货物对象,而您正试图在该列表中找到“字符串”,这就是您找不到的原因。改为使用循环: 这是一个获取列表和ID的元数据,如果存在具有该ID的货物则返回true,否则为false
public boolean isExist(ArrayLisr<Cargo> CARGO , String ID) {
for(int i = 0; i < CARGO.size(); i++){
Cargo cargo = CARGO.get(i);
if( cargo.getID.equals(ID)
return true;
}
return false;
}
方法.get(i)返回列表中位于i位置的对象,方法.size()返回该列表中的对象数 方法.getID是您应该在Cargo类中创建的方法,并使其返回ID
基本上,这个方法逐个获取列表中的对象,检查该对象是否具有我们想要的ID,如果有,则返回true,否则返回另一个对象。如果我们到达列表的末尾并且该列表中没有任何对象返回true,则表示没有具有该ID的对象,因此返回false
答案 2 :(得分:0)
您的列表CARGO
不包含String
个但CARGO
个实例(您应该重命名列表以避免混淆!)。因此,您需要使用不带字符串的CARGO
实例进行搜索。
CARGO.contains(find)
应该是
CARGO.contains(new CARGO(find, null) // because you search for the ID the second argument is empty
equals
方法,该方法仅对ID
这应该有效。
但如果您想经常搜索,则应考虑使用Map
而不是List
。
P.S。我无法提供具体的代码,因为我不确切地知道你的课程是什么样的