Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java arraylist:将对象与字符串进行比较_Java_String_Object_Arraylist - Fatal编程技术网

Java arraylist:将对象与字符串进行比较

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

嗨,伙计们,谁能告诉我哪里出了问题

这个类的基本目标是定义一个Favorite items arraylist,在本例中它是关于汽车的。cars对象具有car名称和car 1-5的等级

如何查看字符串是否等于汽车对象评级。 我搞砸了将字符串或int与数组列表中的car对象进行比较的部分。我的equals()方法有什么问题?contains()方法能否以同样的方式工作

numberOfItemsOfRating方法允许用户指定额定值,因此该方法返回带有额定值的no cars。searchForItems方法检查指定的字符串描述是否与数组列表中的cars名称匹配,从而返回arraylist中的car

下面是我使用构造函数和变量的两种方法的简介:

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))
您的ArrayList
cars
(本例中的整个列表)永远不会等于单个字符串


如果要搜索汽车,需要检查列表中的所有项目,查看它们的名称(或存储在
项目
-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);