我当前创建的代码存储文本文件的第一行,创建一个新的 Vehicle 对象并将其放入数组中第一个 null 位置,并将同一行存储在数组中的每个 null 值中。我需要它能够:
存储第一行的内容,然后将一个新的 Vehicle 对象存储在数组的第一个位置,该对象为 null。然后重复,直到没有更多的行。
我相信这是我的 for 循环的问题。 注意 - 我需要使用 Array 而不是 ArrayList
public void addVehicle(Vehicle[] Honda) throws FileNotFoundException
{
if(canAddVehicle() == true)
{
for(int i = 0; i < vehicles.length; i++)
{
if(vehicles[i] == null)
{
Scanner reader = new Scanner(file);
Honda[i] = new Vehicle();
Honda[i].readRecord(reader);
vehicles[i] = Honda[i];
reader.close();
}
}
System.out.println("Vehicle Added!");
}
else
{
System.out.println("You can not add more than 4 vehicles.");
}
}
车辆类别:
public void readRecord(Scanner reader)
{
setMake(reader.next());
setModel(reader.next());
setYear(reader.nextInt());
setvin(reader.next());
setValue(reader.nextDouble());
setMilesDriven(reader.nextInt());
setLastOilChange(reader.nextInt());
}
数据文件:
Hyundai Sonata 2010 ABC236347NM2N2NW2 18455.34 8765 7567
Chevy Blazer 1998 1234H32343LMN3423 29556.65 38559 38559
//编辑\ 限制:我无法创建任何新的公共(public)方法或构造函数,并且无法拥有任何其他类级别数据
最佳答案
您正在 readRecord
内循环方法,即使这意味着只存储一个对象,不是吗?
您可以只删除 while
循环 - 尽管这依赖于 addVehicle
调用者知道文件中有多少条目。
您似乎更有可能应该有一种方法来读取文件中的所有内容,填充 List<Vehicle>
并归还它。例如:
public List<Vehicle> readVehicles(String file)
{
Scanner reader = new Scanner(file);
List<Vehicle> vehicles = new ArrayList<Vehicle>();
try
{
while (reader.hasNextLine())
{
vehicles.add(Vehicle.readFromScanner(reader));
}
}
finally
{
reader.close();
}
return vehicles;
}
// In vehicle
public static Vehicle readFromScanner(Scanner scanner)
{
String make = reader.next();
String model = reader.next();
int year = reader.nextInt();
String vin = reader.next();
// Don't use double for currency values
BigDecimal value = reader.nextBigDecimal();
int milesDriven = reader.nextInt();
// Shouldn't this be some sort of date type?
int lastOilChange = reader.nextInt();
// I'll assume you have a constructor like this
return new Vehicle(make, model, year, vin, value, milesDriven,
lastOilChange);
}
关于java - 逐行读取文本文件并将对象存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410955/