2015-05-28 150 views
3

我堅持邏輯,需要我的項目幫助。
我有一個文本文件,其中有5個車輛名稱。
然後,我要他們讀入ArrayList,我沒有使用它:ArrayList對象(java)

public static void main(String[] args) throws IOException 
{ 
    BufferedReader bTextFileVehicleNames = new BufferedReader(new FileReader("vehicles.txt")); 
    ArrayList<String> vechicleNamesArray = new ArrayList<String>(); 
    while((textFileLine = bTextFileVehicleNames.readLine()) != null) 
    { 
     vehicleNamesArray.add(textFileLine); 
    } 

現在,我需要在ArrayList創建每個項目(車名)一個對象,我沒有用:

for(String s : vehicleNamesArray) 
{ 
    newVehicle = new Vehicle(s); 
    //I defined this Vehicle newVehicle = null; in the main class. My main is also in the same Vehicle.java file. 
} 

這些對象中的每一個都具有屬性:power,angle, speed; 和行爲:powerOn(),powerOff(), SpeedUp(),SlowDown(),等。我在Vehicle類定義。

現在,用戶必須輸入Vehicle name命令。然後我將它們分開並採取[0]這是車輛名稱,並且必須首先檢查它是否是ArrayList(源自txt文件)中的那些車輛名稱中的一個,並且如果它然後必須將其引用到該特定對象我在上面創建。然後不得不採取在[1],這是對應於對象的特定行爲,它可以是powerOnspeedUp,等等等等命令..

for (int i=0; i< vehicleNamesArray.size(); i++) 
{ 
    if (vehicleNamesArray.get(i).matches(userVehicleName)) 
     //userVehicleName is the [0] vehicle name entered by user 
     //userVehicleCommand is the [1] command entered by user 
    { 
     switch (userVehicleCommand.toLowerCase()) 
     { 
     case "power on": 
      newVehicle.powerOn(); //calling that particular bahaviour of the object defined in Vehicle class. 
      System.out.println(newVehicle.getName()+" is powered ON."); 
      break; 
     ... 
    ... 

例如,讓我們考慮有5輛車在txt(因此在ArrayList)命名爲:奧迪,寶馬,梅賽德斯,大衆,保時捷。 問題是,無論我在車輛名稱命令中輸入,程序默認都採用最後一個元素,在這種情況下,保時捷在ArrayList。 也就是說,當我說「奧迪,powerON」時,它仍然打印出「保時捷開機。」。

我想我搞砸了鏈接用戶輸入的名稱,以檢查ArrayList,然後將其引用到該特定的對象。

+3

是的,你有**一個**'newVehicle'對象,你分配每個項目。最後,最後的任務是剩下的。另外,你應該使用'try-with-resources'來關閉你的'BufferedReader'。 –

+1

你的用戶使用正則表達式嗎?如果第一個'if'語句沒有使用。等於(), ,在我的expirience開關函數工作有點不好與字符串,考慮使用if語句那裏 – itwasntme

+0

你的'newVehicle'變量是*一個*變量持有*一個*車輛實例,因此,如果你分配它的值循環,它將保留最後一個。如果你想擁有車輛列表*,那麼你必須創建並填充列表。 – Holger

回答

1

List還創建的對象:

List<Vehicle> vehicleList = new ArrayList<>; 
for(String s : vehicleNamesArray) 
{ 
    newVehicle = new Vehicle(s); 
    vehicleList.add(newVehicle); 
    //I defined this Vehicle newVehicle = null; in the main class. My main is also in the same Vehicle.java file. 
} 
在你的第二個 for loop檢索車輛對象,並對其進行更新

然後:

for (int i=0; i< vehicleNamesArray.size(); i++) 
{ 
    if (vehicleNamesArray.get(i).matches(userVehicleName)) 
     //userVehicleName is the [0] vehicle name entered by user 
     //userVehicleCommand is the [1] command entered by user 
    { 
     switch (userVehicleCommand.toLowerCase()) 
      { 
       case "power on": 

       vehicleList.get(i).powerOn(); //calling that particular bahaviour of the object defined in Vehicle class. 
       System.out.println(vehicleList.get(i).getName()+" is powered ON."); 
       break; 
... 
... 
+0

它的工作原理。謝謝 –

0

你可能想嘗試存儲車輛在HashMap什麼:

HashMap<String, Vehicle> vehicles = new HashMap<String, Vehicles>(); 

for(String s : vehicleNamesArray) 
{ 
    vehicles.put(s, new Vehicle(s)); 
} 

//Access the vehicle from user input 

Vehicle currentVehicle = vehicles.get(userVehicleName); 

switch (userVehicleCommand.toLowerCase()) 
{ 
    case "power on": 
    currentVehicle.powerOn(); //calling that particular bahaviour of the object defined in Vehicle class. 
    System.out.println(currentVehicle.getName()+" is powered ON."); 
    break; 
    //etc... 
} 

一個HashMap可以用來存儲key,value對你的情況key=carnamevalue=Vehicle object。這將使您可以輕鬆地根據用戶輸入返回並選擇想要的汽車。目前還沒有你的存儲您Vehicle對象,你只能保存最後一個......