大家好,有人能告诉我哪里出错吗?
这个课程的基本目标是定义一个喜欢的项目arraylist,在这种情况下是关于汽车。汽车对象有汽车名称和汽车1-5的等级。
如何判断字符串是否等于汽车对象评级。 我搞乱你将字符串或int与数组列表中的汽车对象进行比较的部分。我的equals()方法出了什么问题? can contains()方法的工作方式相同吗?
numberOfItemsOfRating方法允许用户指定评级,因此该方法返回没有评级的汽车。 searchForItems方法检查指定的String描述是否与数组列表中的汽车名称匹配,因此返回arraylist中的汽车。
这里是我使用构造函数和变量的两个方法的一瞥:
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;
}
}
}
}
答案 0 :(得分:1)
您正在根据对象本身进行相等性检查,而您应该针对对象的属性执行此操作。在您的特定情况下,您应该查看集合中每个Car / Item的rating
属性。您的代码看起来像这样:
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);
两个快速评论, 应该 为您的Item
类实现相等方法。但在这种情况下,这不是您问题的实际来源。此外,您在代码中提到了很多汽车,但您的bean类称为“项目”。您可能希望协调这一点,因为它可能会让读取您代码的其他人感到困惑。
不要忘记修复你的searchForItem
方法,目前你正在测试数组列表与字符串的相等性,它永远不会返回true。以与上述相同的方式更正它,但使用汽车的description
属性,而不是rating
属性。
答案 1 :(得分:0)
cars.get(i)
返回Item,而不是String。所以
if(cars.get(i).equals(al))
不正确。
答案 2 :(得分:0)
if(cars.equals(description))
你的ArrayList cars
(在这种情况下是整个列表)永远不会等于一个字符串。
如果你想搜索汽车,你需要检查列表中的所有项目,看看他们的名字(或你在Item
- 类中存储的任何信息)是否与给定的{{{ 1}}。
答案 3 :(得分:0)
这不是您应该使用equals方法的方式,而是建议您使用或实施Item#getRating()
和Item#getDescription()
。使用cars.get(i).getDescription().equals(description)
检查说明。要使用cars.get(i).getRating() == rating
检查评分。
您不应使用equals将Item与字符串进行比较,因为这会违反等号contract。
答案 4 :(得分:0)
if(cars.get(i).equals(al))
在这里你将字符串与对象进行比较,这样就错了
使用你可以尝试以下编码
if(cars.get(i).getItem().equals(al))
是可能的,其中getItem()其中一个名为“item”的汽车类中的变量,键入为'string'并将其置为getter和setter。
如果(cars.equals(description))错误的话。这里你试图将列表名称与字符串进行比较 所以最好使用以下编码
if(cars.get(i).getDescription().equals(description))
return cars.get(i);
是可能的,其中getDescription()其中一个名为“description”的汽车类中的变量,键入为'string'并将其置为getter和setter。