Java arraylist:将对象与字符串进行比较
嗨,伙计们,谁能告诉我哪里出了问题 这个类的基本目标是定义一个Favorite items arraylist,在本例中它是关于汽车的。cars对象具有car名称和car 1-5的等级 如何查看字符串是否等于汽车对象评级。 我搞砸了将字符串或int与数组列表中的car对象进行比较的部分。我的equals()方法有什么问题?contains()方法能否以同样的方式工作 numberOfItemsOfRating方法允许用户指定额定值,因此该方法返回带有额定值的no cars。searchForItems方法检查指定的字符串描述是否与数组列表中的cars名称匹配,从而返回arraylist中的car 下面是我使用构造函数和变量的两种方法的简介:Java arraylist:将对象与字符串进行比较,java,string,object,arraylist,Java,String,Object,Arraylist,嗨,伙计们,谁能告诉我哪里出了问题 这个类的基本目标是定义一个Favorite items arraylist,在本例中它是关于汽车的。cars对象具有car名称和car 1-5的等级 如何查看字符串是否等于汽车对象评级。 我搞砸了将字符串或int与数组列表中的car对象进行比较的部分。我的equals()方法有什么问题?contains()方法能否以同样的方式工作 numberOfItemsOfRating方法允许用户指定额定值,因此该方法返回带有额定值的no cars。searchForIt
public class FavouriteItems
{
private ArrayList<Item> cars;
/**
* Constructor for objects of class FavouriteItems
*/
public FavouriteItems()
{
cars= new ArrayList<Item>();
}
/**
* Add a new Item to your collection
* @param newItem The Item object to be added to the collection.
*/
public void addToFavourites(Item newItem)
{
cars.add(newItem);
}
/**
* Count the number of Items with a given rating
* @return The number of Items (Item objects)
* whose rating is rating (could be 0).
* If the rating parameter is outside the valid
* range 1..5 then print an error message and return 0.
*/
public int numberOfItemsOfRating(int rating)
{
int counter = 0;
if(rating >= 1 && rating <=5)
{
for ( int i =0; i < cars.size(); i++)
{
int num = rating;
String al = Integer.toString(rating);
if(cars.get(i).equals(al))
{
counter++;
}
}
}
else
{
System.out.println("No cars match your ratings");
counter = 0;
}
return counter;
}
/**
* Find the details of a Item given its description
* @return Item object if its description is in the collection
* or null if there is no item with that description
*/
public Item searchForItem(String description)
{
for(int i=0; i<cars.size(); i++)
{
if(cars.equals(description))
{
return cars.get(i);
}
else
{
return null;
}
}
}
}
公共类收藏夹项
{
私家车;
/**
*类FavoriteItems对象的构造函数
*/
公共物品()
{
cars=新阵列列表();
}
/**
*向收藏中添加新项目
*@param newItem要添加到集合中的项对象。
*/
公共作废AddToFavorites(项新建项)
{
cars.add(newItem);
}
/**
*计算具有给定评级的项目数
*@返回项目数(项目对象)
*其评级为评级(可以为0)。
*如果额定值参数超出有效范围
*范围1..5,然后打印错误消息并返回0。
*/
公共整数项目额定值(整数额定值)
{
int计数器=0;
如果(额定值>=1&&额定值
返回一个项,而不是字符串
if(cars.get(i).equals(al))
这是不对的
if(cars.equals(description))
您的ArrayListcars
(本例中的整个列表)永远不会等于单个字符串
如果要搜索汽车,需要检查列表中的所有项目,查看它们的名称(或存储在项目
-class中的任何信息)是否与给定的描述
这不是使用equals方法的方式,我建议您使用或实现项目#getRating()
和项#getDescription()
。使用cars.get(i).getDescription().equals(description)
检查描述。要检查评级,请使用cars.get(i).getRating()==评级
您不应该使用equals将项目与字符串进行比较,因为这会违反equals。您是基于对象本身进行相等性检查,而应该根据对象的属性进行相等性检查。在您的特定情况下,您应该查看coll中每个汽车/项目的评级属性您的代码将如下所示:
final String ratingStr = Integer.toString(rating);
int counter = 0;
for (for final Item car: cars) {
if(ratingStr.equals(car.getRating()) {
++counter;
}
System.out.println("Number of 'cars' with the rating is: " + counter);
两条快速注释,你应该为你的项类实现相等方法。但在这种情况下,这不是你问题的真正来源。此外,你在代码中提到了很多车,但是你的bean类被称为“项”。你可能想协调一下,因为这可能会让阅读你代码的其他人感到困惑
不要忘了修复您的searchForItem
方法,目前您正在测试数组列表与字符串的相等性,这将永远不会返回true。请按照上述相同的方式进行更正,但使用您汽车的description
属性,而不是rating
属性。if(cars.get(i).equals(al))
这里是将字符串与对象进行比较,因此它是错误的
在使用的情况下,你可以尝试下面的编码
if(cars.get(i).getItem().equals(al))
可能是在cars类中名为“item”的变量之一的地方,键入“string”并将其放在getter和setter中
lly if(cars.equals(description))是错误的。在这里,您试图将列表名称与字符串进行比较
所以最好使用下面的编码
if(cars.get(i).getDescription().equals(description))
return cars.get(i);
在cars类中名为“description”的变量之一getDescription()中,可以键入“string”并将其放在getter和setter中。implement equals()方法这是我尝试做的,但似乎不起作用。你正在将一个项目对象与一个整数进行比较——这是你想要的吗?是的,这就是它想要我们做的,equals()对对象起作用吗?你在项目-类中存储了什么?对不起,用iPad回答不简单,尤其是当我不是英国人时:)是的,这不是我想做的吗?是的,我想应该是如果(cars.get(i).equals(description))这行得通吗?这取决于您如何为项
-类实现equals
-方法。如果您没有显式实现它,这将不起作用。这没有什么区别。我理解您如何调用arraylist中的每个特定项,而不是添加get(I)这是我的错误。谢谢你不应该使用Car的equals方法来检查汽车的评级或描述。而是使用汽车的getRating/getDesription方法,然后使用==检查评级,使用equals检查描述。谢谢我使用if(cars.get(i).getRating()==评级)它成功了,让我们看看equals方法是否适用于searchitems:dx感谢这是我对description方法所做的,它成功了您可能希望看到它:public Item searchForItem(String description){int counter=0;Item des=null;for(int i=0;我很高兴,我能帮上忙。似乎仍然存在问题。您到底想返回什么?目前,您似乎返回列表中与给定描述匹配的最后一项。如果您想返回找到的第一项,您可以将des=cars.get(i);
更改为return cars.get(i)
并将返回des;
更改为返回null
。什么似乎不起作用?您是否在项
类上定义了方法来获取/设置评级
和说明
?
if(cars.get(i).getDescription().equals(description))
return cars.get(i);