我已经学习了一个多月的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>");
}
}
答案 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;
}