我被逻辑困住了,需要帮助完成我的项目。
我有一个包含五个车名的文本文件。
然后我要读取它们到一个 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);
}
现在,我需要为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
类中定义的。现在,用户必须输入车辆名称命令。然后我将其拆分并取出
[0]
,即车辆名称,并首先检查它是否是ArrayList
(来自txt文件)中的其中一个车辆名称,如果是,则必须将其引用到我上面创建的特定对象。 然后必须接受[1]
,这是相应于对象特定行为的命令,可以是powerOn
,speedUp
等等。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;
...
...
例如,假设在 txt 中(因此在
ArrayList
中)有 5 辆车,它们的名称分别是:Audi、Bmw、Mercedez、Volkswagen 和 Porsche。
问题在于,无论我在车辆名称命令中输入什么,程序默认都会采取最后一个元素,也就是在这种情况下的 Porsche 在 ArrayList
中。
也就是说,当我说“奥迪,powerON”时,它仍然打印出“保时捷已启动”。
我认为我在将用户输入的名称与 ArrayList
检查并将其引用到特定对象方面搞糟了。
newVehicle
对象,并将每个条目都分配给它。最后一次赋值是留下来的。此外,你应该使用try-with-resources
代码块来关闭BufferedReader
。 - Boris the Spiderswitch
块中,你需要使用vehicleNamesArray.get(i).getName()
或者userVehicleName
,而不是newVehicle.getName()
。 - TitusVehicle
对象存储在任何地方,你只是设置了newVehicle = new Vehicle("")
,这样arraylist
中的最后一个对象将被存储在newVehicle
中... - brso05