ArrayList对象(java)

ArrayList对象(java),java,arraylist,Java,Arraylist,我坚持逻辑,我的项目需要帮助。 我有一个包含5个车辆名称的文本文件。 然后我必须将它们读入ArrayList,我使用了: public static void main(String[] args) throws IOException { BufferedReader bTextFileVehicleNames = new BufferedReader(new FileReader("vehicles.txt")); ArrayList<String> vechic

我坚持逻辑,我的项目需要帮助。
我有一个包含5个车辆名称的文本文件。
然后我必须将它们读入
ArrayList
,我使用了:

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);
    }
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.
}
每个对象都有属性:
功率
角度
速度
; 和行为:
powerOn()
powerOff()
加速()
减速()
,等等。。这是我在
车辆
类中定义的

现在,用户必须输入车辆名称命令。然后,我将它们拆分并获取
[0]
,这是车辆名称,必须首先检查它是否是
数组列表中的车辆名称之一(源自txt文件),如果是,则必须将其引用到我在上面创建的特定对象。然后必须接受
[1]
,这是与对象的特定行为相对应的命令,可以是
开机
加速
,等等

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;
        ...
    ...
for(int i=0;i
例如,我们考虑在TXT中有5种车辆(从而在<代码> ARAYLIST/<代码>)中命名为:奥迪、宝马、梅塞德斯、大众、保时捷。 问题在于,无论我在vehicle name(车辆名称)命令中输入什么,默认情况下,程序都会使用最后一个元素,在本例中,Porsche在
ArrayList
中。 也就是说,当我说“奥迪,通电”,它仍然打印出“保时捷通电”


我想我把用户输入的名称与
ArrayList
链接起来,然后将其引用到该特定对象时出错了。

您可能想尝试将车辆存储在
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车辆=新的HashMap();
用于(字符串s:VehicleMasarray)
{
车辆。投入,新车;
}
//从用户输入访问车辆
Vehicle currentVehicle=vehicles.get(userVehicleName);
开关(userVehicleCommand.toLowerCase())
{
案例“通电”:
currentVehicle.powerOn();//调用Vehicle类中定义的对象的特定行为。
System.out.println(currentVehicle.getName()+“已通电”);
打破
//等等。。。
}

HashMap
可用于存储案例中的
key,value
key=carname
value=Vehicle object
。这将便于返回并根据用户输入选择所需的汽车。此外,当前您没有存储
Vehicle
对象,您只存储最后一个…

Keep在
列表中创建的对象也包括:

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

是的,您有一个
newVehicle
对象,并将每个项目分配给它。最后,最后一个分配是剩下的。此外,您应该使用
try with resources
块关闭
BufferedReader
。您的用户是否使用正则表达式?如果在第一个“if”语句中使用.equals()在我的有效切换函数中,字符串有点不好,考虑使用if语句到你的<代码> NeaveBuy/Cuff>变量是保存一个车辆实例的一个变量,因此如果在循环中分配一个值,它将保留最后一个值。如果你想要一个车辆列表,那么,你必须创建并填充一个列表。您必须使用
Vehicle.getName()
而不是
newVehicle.getName()
来切换
块,您必须使用
VehicleMasarray.get(i).getName()
userVehicleMame
@Titus从哪里得到这个想法的?
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;
 ...
 ...