arraylist:比较对象与字符串

问题描述:

嗨,大家好,谁能告诉我哪里会出错?arraylist:比较对象与字符串

这个类的基本目的是定义一个喜欢的物品arraylist在这种情况下是关于汽车。汽车物品有汽车名称和汽车1-5的评级。

如何查看字符串是否等于汽车物体等级。 即时通讯组件将你比较一个字符串或整数的数组列表中的汽车对象。我的equals()方法有什么问题?可以包含()方法的工作方式相同吗?

numberOfItemsOfRating方法允许用户指定评级,因此该方法返回评级为no的汽车。 searchForItems方法检查指定的字符串描述是否与数组列表中的汽车名称相匹配,并因此以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; 
      } 
     } 
     } 
} 
+1

实现等于()方法为汽车 – mishadoff 2012-04-09 15:23:32

+0

这就是我所做的,但它似乎并没有工作 – Danial 2012-04-09 15:25:06

+0

您正在比较一个项目对象与整数 - 这是你的意图? – tdrury 2012-04-09 15:25:12

这不是您应该使用equals方法的方式,而是我建议您使用或实现Item#getRating()Item#getDescription()。使用cars.get(i).getDescription().equals(description)检查描述。要检查评分使用cars.get(i).getRating() == rating

您不应该使用equals来比较Item与字符串,因为这会违反等于contract

+0

这没什么差别。我明白你如何在arraylist中调用每个特定项目,而不是添加get(i)是我的错误。谢谢 – Danial 2012-04-09 15:42:52

+0

您不应该使用Car的equals方法来检查Car的评级或描述。相反,使用Car的getRating/getDesription方法,然后使用==来检查评级,并使用equals来检查描述。 – Sandro 2012-04-09 15:45:15

+0

感谢,如果(cars.get(I).getRating()==等级)我使用的评级,它的工作,让我们看看如果equals方法适用于searchitems:DX – Danial 2012-04-09 15:49:43

cars.get(i) 

返回一个项目,而不是一个字符串。所以

if(cars.get(i).equals(al)) 

是不正确的。

+0

我将如何返回一个项目? – Danial 2012-04-09 15:26:16

+0

你已经做了。 @Danial错过了一个“s”。 – 2012-04-09 15:26:41

+0

对不起,用iPad回答并不简单,尤其是当我不是英文的时候:) – dash1e 2012-04-09 15:29:08

if(cars.equals(description)) 

你的ArrayList cars(全名单在这种情况下)永远不会等于一个字符串。

如果你想搜索一辆汽车,你需要检查你的列表中的所有物品,看看它们的名字(或者你存储在Item-class中的任何信息)是否与给定的description匹配。

+0

是的,这不是我想要做的吗?是的,我认为它应该是如果(cars.get(i).equals(description))会起作用吗? – Danial 2012-04-09 15:29:45

+0

这取决于你如何实现'Item'类的'equals'方法。如果你没有明确地实现它,这是行不通的。 – 2012-04-09 15:34:48

您正在做基于对象本身的平等检查,而应该针对对象的属性进行检查。在您的具体情况下,您应该查看收集中每个车辆/物品的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类被称为'Item'。您可能想要协调一下,因为这可能会让阅读代码的其他人感到困惑。

不要忘记修复你的searchForItem方法,目前你正在测试数组列表是否等于一个字符串,它永远不会返回true。按照上述相同的方式对其进行修正,但使用您的汽车的description属性,而不是rating属性。

+0

,似乎不工作:s – Danial 2012-04-09 15:38:53

+0

什么似乎没有工作?你有没有在你的'Item'类中定义方法来获得/设置'rating'和'description'? – Perception 2012-04-09 16:01:53

if(cars.get(i).equals(al)) 在这里,你是比较对象的字符串,它是错的 柜面使用u可以尝试下面的编码

if(cars.get(i).getItem().equals(al)) 

是可能的,其中的getItem()汽车类变量之一命名为“item”,键入为“string”并将其设置为getter和setter。

lly if(cars.equals(description))是错误的。在这里你企图用绳子比较列表名称 所以最好使用下面的编码

if(cars.get(i).getDescription().equals(description)) 
    return cars.get(i); 

是可能的,其中getDescription()命名为“说明”中汽车类的变量之一,类型为“字符串”并把它吸收和安装。