2015-05-28 112 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对象,你只能保存最后一个......