2012-04-09 167 views
0

嗨,大家好,誰能告訴我哪裏會出錯?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

回答

0

這不是您應該使用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

0
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

0
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

1

您正在做基於對象本身的平等檢查,而應該針對對象的屬性進行檢查。在您的具體情況下,您應該查看收集中每個車輛/物品的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

0

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()命名爲「說明」中汽車類的變量之一,類型爲「字符串」並把它吸收和安裝。