【发布时间】:2015-05-29 04:05:48
【问题描述】:
我坚持这个逻辑,我的项目需要帮助。
我有一个包含 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);
}
现在,我需要为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 中有 5 辆车(因此在 ArrayList 中)命名为:Audi、Bmw、Mercedez、Volkswagen、Porsche。
问题是,无论我在车辆名称命令中输入什么,程序默认采用最后一个元素,在本例中为 ArrayList 中的保时捷。
即,当我说“Audi, powerON”时,它仍然会打印出“Porsche is power ON”。
我认为我在链接用户输入的名称以检查 ArrayList 并将其引用到该特定对象时搞砸了。
【问题讨论】:
-
是的,您有 一个
newVehicle对象,并且您将每个项目分配给它。最后,最后的任务是剩下的。此外,您应该使用try-with-resources块来关闭您的BufferedReader。 -
您的用户是否使用正则表达式?如果在第一个“if”语句中没有使用 .equals(),并且在我的经验中,switch 函数对字符串有点不好,请考虑在那里也使用 if 语句
-
您的
newVehicle变量是 one 变量,其中包含 one 车辆实例,因此如果您在循环中为其赋值,它将保留最后一个。如果您想拥有一个列表车辆,那么您必须创建并填充一个列表。 -
在
switch块而不是newVehicle.getName()你必须使用vehicleNamesArray.get(i).getName()或userVehicleName -
@Titus 你是从哪里得到这个想法的?