为什么我的每个循环 return 什么都没有?

Why dosen't my for each loop return anything?

我的代码的目的是让用户输入汽车的名称。代码将使用 for 循环来搜索数组列表并打印出用户输入的汽车。代码可以编译,但不会打印出任何内容。这是代码:

public class searchList
{  
    private static inventory inventory = new inventory();
    private static ArrayList<engineSpecs> list = inventory.getList(); 
    public void searchList()
    { 
        //Declarations
        Scanner scan = new Scanner(System.in); 
        String search = new String();
        String car = new String();

        //Prompts user to enter car name        
        System.out.println ("Enter car name: ");    
        car = scan.nextLine();

        //Searches array list and prints car
        for (engineSpecs item: list)
        {  
            if (item.equals(car))
            {
                System.out.println (item);
            }
        }  
    }
}

数组列表在另一个class中声明。这是 class:

 public class inventory
 { 
    public static ArrayList<engineSpecs> list = newArrayList<engineSpecs>();
    public inventory()
    {                                                   
        //Adds objects into array list
    engineSpecs astonmartin = new engineSpecs("Aston Martin", "Vanquish", 350000, 11, "Gray",
                                     2015, 565, 457, "automatic");
    engineSpecs ferrari = new engineSpecs ("Ferrari", "458 Italia", 240000, 13, "Red", 2015, 
                                       570, 398, "automatic"); 
    list.add(astonmartin);
    list.add(ferrari);   
    }
    public static ArrayList<engineSpecs> getList()
    {
        //getter method
        return list;
    } 
}

我的 engineSpecs class 只是一个简单的构造函数。我正在使用它,所以我可以实例化此构造函数的对象并将其保存到数组列表中。

public class engineSpecs
{
    private int HP;
    private int torque;
    private String transmission;
    private int year;
    private int MPG;
    private int price;
    private String model;
    private String color;
    private String manufacturer;
    public engineSpecs (String manufacturerName, String modelName,int stickerPrice, int MPGe,
    String extColor, int yearNum, int BHP, int torquelbs, String transmissionType) 
    {
        HP = BHP;
        torque = torquelbs;
        transmission = transmissionType;
        year = yearNum;
        MPG = MPGe;
        price = stickerPrice;
        model = modelName;
        color = extColor;
        manufacturer = manufacturerName;
    }
    public String toString()
    {
        String result = "Manufacturer: " + manufacturer + "\n";
        result += "Model: " + model + "\n";
        result += "Price: " + price + "\n";
        result += "Estimated MPG: " + MPG + "\n";
        result += "Color: " + color + "\n";
        result += "Year: " + year + "\n";
        result += "Horse power: " + HP + "\n";
        result += "Torque: " + torque + "\n";
        result += "Transmission: " + transmission + "\n";

        return result;
    }
}

您可以尝试在 class engineSpecs 中重新定义方法 equals(),这样 item.equals(car) 行可以正常工作。

更多信息here

您正在使用 .equals() 对象,这些对象不会 return 为真,直到它们成为内存中的同一对象。您需要一种新方法来比较名称的字符串值。您还需要 toString() 方法来打印对象的字符串转换。

您的引擎规格 class 应如下所示:

public class engineSpecs{
    public String name;
    public engineSpecs(String s){
        this.name = s;
    }

    public boolean is(String car){
        return this.name.equals(car);
    }

    public String toString(){
        return this.name;
    }
}

更新:

将您的 if 语句更改为:

if (item.is(car))
{
    System.out.println (item);
}

engineSpecs中定义此方法:

public boolean is(String manufacturerName){
    return this.manufacturer.equals(manufacturerName);
   //  need to compare more values if you want to compare more properties
}