如何将return对应的item作为数组在java

How to return corresponding items as an array in java

在下面的代码中,我试图实现方法 getItemByManufacturer,它应该 return 我们测试的制造商的项目数组。我试图获取特定制造商的项目数组,但正在打印哈希码。这是为什么 ?我也重写了 toString 方法。任何帮助将不胜感激。

public class Item{
    
    private long serialNumber;
    private String itemName;
    String manufacturer;
    private int warrantyDays;
    private double rating;

Item( String itemName,String manufacturer,long serialNumber,double rating){
        this.serialNumber = serialNumber;
        this.itemName = itemName;
        this.manufacturer = manufacturer;
        this.rating = rating;
    }
    public String toString(){
        return itemName +"\t"+manufacturer+"\t\t"+serialNumber+"\t"+rating;
    }


    public static String[] getItemByManufacturer(Item[] item,String manufacturer){
    String[] matchedItems = new String[item.length];
    for(int i =0; i<item.length;i++){
        if(item[i].manufacturer.equals(manufacturer)){
            matchedItems[i] = item[i];
        }
        else{
            System.out.println("Invalid Input");
        }
    }
    return matchedItems;
}

public class Driver{
    
    public static void main(String[] args){
        
        Item[] item = new Item[5];
        item[0] = new Item("Watch","Dorond",23945357,6.5);
        item[1] = new Item("Sunglass","Niko",13945357,6.5);
        item[2] = new Item("Blender","Decker",33945357,6.5);
        item[3] = new Item("Bottle","Decker",43945357,6.5);
        item[4] = new Item("Bag","WTravel",53965307,6.5);
        
    
   **System.out.println((Item.getItemByManufacturer(item,"Decker")));**
       
       
       
      
        
       }

}

那是因为数组没有toString方法,所以打印的时候会得到hashcode。打印它们的一种方法是仅使用内部 java 库 Arrays.toString:

System.out.println(Arrays.toString(Item.getItemByManufacturer(item,"Decker"));

或通过使用 Arrays.asList:

将数组转换为列表
System.out.println(Arrays.asList(Item.getItemByManufacturer(item,"Decker"));

此外,请注意,您应该将条件 items[i].manufacturer == manufacturer 更改为 items[i].manufacturer.equals(manufacturer),字符串必须始终使用 equals 方法进行比较。此外,如果条件匹配,您只是 returning 整个数组,因此您不会获得所需的结果。我建议这个解决方案,因为数组不是动态大小的,只是 return 一个 List:

更容易
public class Item{
    
    private long serialNumber;
    private String itemName;
    String manufacturer;
    private int warrantyDays;
    private double rating;

Item( String itemName,String manufacturer,long serialNumber,double rating){
        this.serialNumber = serialNumber;
        this.itemName = itemName;
        this.manufacturer = manufacturer;
        this.rating = rating;
    }
    public String toString(){
        return itemName +"\t"+manufacturer+"\t\t"+serialNumber+"\t"+rating;
    }


    public static List<Item> getItemByManufacturer(Item[] items, String manufacturer){

        List<Item> matchedItems = new ArrayList<Item>();
        for(int i =0; i< items.length;i++){
            if( items[i].manufacturer.equals(manufacturer)){
                matchedItems.add(items[i]);
            }
        }
        if(matchedItems.isEmpty()){
            System.out.println("Invalid Input");
        }
        return mathedItems;
    }

public class Driver{
    
    public static void main(String[] args){
        
        Item[] item = new Item[5];
        item[0] = new Item("Watch","Dorond",23945357,6.5);
        item[1] = new Item("Sunglass","Niko",13945357,6.5);
        item[2] = new Item("Blender","Decker",33945357,6.5);
        item[3] = new Item("Bottle","Decker",43945357,6.5);
        item[4] = new Item("Bag","WTravel",53965307,6.5);
        
    
        System.out.println(Item.getItemByManufacturer(item,"Decker"));
       
       

   }