[英]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.