为arraylist中的每个项创建对象

时间:2014-06-03 21:30:45

标签: java object arraylist

我已经学习了一个多月的Java,没有以前的OOP经验,所以请提供简单的答案!

我正在进行的项目本质上是一个简单的游戏。我带有一个带有可变数量车辆名称的txt文件,并允许用户输入车辆名称,然后输入命令。

如何为arraylist中的每个项目创建对象?

这是我到目前为止所做的(我举了一个例子,说明我在代码注释中要做的事情):

public class VehicleApp {
public static void main(String[] args) throws FileNotFoundException, IOException{
    File myDir = new File(System.getProperty("user.dir"));
    File myFile = new File(myDir, "vehicleNames.txt");

    FileReader in = new FileReader(myFile);
    BufferedReader br = new BufferedReader(in);

    ArrayList<String> vehicleList = new ArrayList<>();

    int i = 0;
    String line = null;
    while((line = br.readLine()) != null){
        vehicleList.add(line);
        System.out.println(vehicleList.get(i));

        //What I'm essentially trying to accomplish:
        //Vehicle vehicleList.get(i) = new Vehicle();

        i++;
    }

    br.close();


    System.out.println("Enter user input as such:\n" +
            "<vehicle name>, <command>");
}
}

3 个答案:

答案 0 :(得分:3)

我认为您希望实际将String传递给Vehicle类,因为无法动态分配变量名称:

Vehicle newVehicle = new Vehicle(vehicleList.get(i));

如果您确实想要为Vehicle中的每个项目创建新的ArrayList,则可以按以下方式执行此操作:

for(String s : vehicleList){
    Vehicle newVehicle = new Vehicle(s);
}

以上内容相当于以下内容:

for(int i=0; i<vehicleList.size(); i++){
    Vehicle newVehicle = new Vehicle(vehicleList.get(i));
}

要根据传递给它的字符串识别Vehicle,您应该在Vehicle类中使用getter:

public class Vehicle {
    private String name;

    public Vehicle(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

现在您可以检查给定的Vehicle是否具有匹配的名称!例如:

Vehicle vehicle = new Vehicle("Honda Civic");
if(vehicle.getName().equals("Honda Civic")){
    System.out.println("Match!");
}

答案 1 :(得分:1)

好的 - 首先要做的事情。 你需要一个车辆类。 在名为Vehicle.java(重要)的文件中

制作一个简单的课程:

public class Vehicle
{
    //vehicle information
    private String name;

    //Constructors
    //default
    public Vehicle()
    {
        name = "";
    }
    //with param
    public Vechicle(String _name)
    {
        name = _name;
    }
}

现在更改数组列表以包含Vehicle对象

ArrayList<Vehicle> vehicleList = new ArrayList<>();

然后你的循环只是

while((line = br.readLine()) != null)
{
        vehicleList.add(new Vehicle(line));
}

那应该让你开始吧!

答案 2 :(得分:1)

vehicleList列表的类型为String。这意味着您只能将String个对象添加到该列表中。

因此,您必须将vehicleList的类型更改为Vehicle

ArrayList<Vehicle> vehicleList = new ArrayList<>();

然后,您可以创建车辆对象并将其传递到vehicleList as:

while((line = br.readLine()) != null){
        vehicleList.add(new Vehicle(line));
        System.out.println(vehicleList.get(i).getName());
}

请记住,您必须拥有一个接受名称的构造函数,以及该名称的存储(成员字段):

private String name;    
public Vechicle(String _name)
{
    name = _name;
}

Vehicle.java课程中。

为了使用System.out.println(vehicleList.get(i).getName());打印每个车辆对象的名称, 你必须在你的班级中创建一个公共的getter方法来检索车辆的名称:

public String getName()
{
    return name;
}