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