簡體   English   中英

為什么我的每個循環都沒有返回任何東西?

[英]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);
            }
        }  
    }
}

數組列表在另一個類中聲明。 這是該類:

 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類只是一個簡單的構造函數。 我正在使用它,所以我可以實例化此構造函數的對象並將其保存到數組列表中。

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;
    }
}

您正在對對象使用.equals() ,除非它們是內存中的同一對象,否則它們不會返回true。 您需要一個新方法來比較名稱的字符串值。 另外,您需要toString()方法來打印對象的字符串轉換。

您的engineSpecs類應如下所示:

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
}

您可以嘗試在類engineSpecs重新定義方法equals() ,以便item.equals(car)行正常工作。

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM