Java 尝试删除数组中的值
我遇到的问题是没有从数组中删除车辆对象(我不确定它是否正确存储) 用户必须首先将车辆对象添加到阵列中。然后,它会将他们带回菜单,询问他们是否要添加其他车辆或删除车辆 此类中的方法接受将车辆添加到数组或从数组中删除车辆的选项(1或2):Java 尝试删除数组中的值,java,Java,我遇到的问题是没有从数组中删除车辆对象(我不确定它是否正确存储) 用户必须首先将车辆对象添加到阵列中。然后,它会将他们带回菜单,询问他们是否要添加其他车辆或删除车辆 此类中的方法接受将车辆添加到数组或从数组中删除车辆的选项(1或2): private void validate(int choice, File file) throws FileNotFoundException { Vehicle[] vehicle = new Vehicle[4]; switch(choi
private void validate(int choice, File file) throws FileNotFoundException
{
Vehicle[] vehicle = new Vehicle[4];
switch(choice)
{
case 1:
store = new Store(file);
store.addVehicle(vehicle);
run();
break;
case 2:
store = new Store();
if(store.deleteVehicle(vehicle) == false)
{
System.out.println("Vehicle not deleted");
}
run();
break;
}
假设用户想要添加车辆。它被传递到Store类:
我在Store类中的声明:
Vehicle[] vehicles = new Vehicle[4];
public void addVehicle(Vehicle vehicle[]) throws FileNotFoundException
{
boolean found = false;
if(canAddVehicle())
{
for(int i = 0; i < vehicles.length || !found; i++)
{
if(vehicles[i] == null)
{
Scanner reader = new Scanner(file);
vehicle[i] = new Vehicle();
vehicle[i].readRecord(reader);
found = true;
reader.close();
}
}
System.out.println("Vehicle Added!");
}
else
{
System.out.println("You can not add more than 4 vehicles.");
}
System.out.println(vehicle[0].getVIN());
}
Store类中的addVehicle方法:
Vehicle[] vehicles = new Vehicle[4];
public void addVehicle(Vehicle vehicle[]) throws FileNotFoundException
{
boolean found = false;
if(canAddVehicle())
{
for(int i = 0; i < vehicles.length || !found; i++)
{
if(vehicles[i] == null)
{
Scanner reader = new Scanner(file);
vehicle[i] = new Vehicle();
vehicle[i].readRecord(reader);
found = true;
reader.close();
}
}
System.out.println("Vehicle Added!");
}
else
{
System.out.println("You can not add more than 4 vehicles.");
}
System.out.println(vehicle[0].getVIN());
}
public void addVehicle(Vehicle-Vehicle[])抛出FileNotFoundException
{
布尔值=false;
如果(canAddVehicle())
{
对于(int i=0;i
我在底部添加了最后一行,以测试它是否在Vehicles类中存储了我调用readRecord()时的变量。(它显示正确。)
现在它将返回到发布的第一个方法,假设用户想要删除车辆。它被传递到存储类方法(deleteVehicle(vehicle)):
公共车辆(车辆[])
{
System.out.println(车辆[0].getVIN());
扫描仪输入=新扫描仪(System.in);
字符串VIN=null;
System.out.println(“请输入要删除的车辆的VIN:”;
VIN=输入。下一步();
对于(int i=0;i
我在顶部添加了这一行,以查看车辆阵列的插槽0中是否仍有VIN值。。。结果是我得到了一个NullPointerException错误。。。因此,似乎添加的第一个车辆对象未正确存储在阵列中?我刚接触阵列,对自己做错了什么有些茫然。任何帮助都将不胜感激。谢谢 从数组中删除元素有点困难。可以使用System.arraycopy方法将某些元素从源阵列移动/复制到目标阵列。但是,我建议使用
ArrayList
而不是数组。从数组中删除元素有点困难。可以使用System.arraycopy方法将某些元素从源阵列移动/复制到目标阵列。但是,我建议使用ArrayList
而不是数组。数组存储对对象的引用。您可以随意修改这些对象(甚至可以将它们“标记”为已删除,但对数组中包含的对象所做的任何操作都不会影响数组本身。此外,您不能仅从数组中添加或删除项,您所能做的就是替换它们。(因此,您可以将给定的数组位置设置为null
——但您必须记住始终要检查该位置。)
如果确实需要从数组中添加或删除元素,则需要将数组重新创建为适当的大小,然后复制其余元素。Java API中有内置的方法可以帮助执行这些操作。或者,使用集合,例如
ArrayList
数组存储对objec的引用ts.您可以随意修改这些对象(甚至可能将它们“标记”为已删除,但您对数组中包含的对象所做的任何操作都不会影响数组本身。此外,您不能仅从数组中添加或删除项,您所能做的就是替换它们。(因此,您可以将给定的数组位置设置为null
——但您必须记住始终要检查该位置。)
如果确实需要从数组中添加或删除元素,则需要将数组重新创建为适当的大小,然后复制其余元素。Java API中有内置的方法可以帮助执行这些操作。或者,使用集合,例如
数组列表
,在我看来,问题在于可能根本不是您的数组逻辑,而是您在每次调用validate方法时使用不同的“存储”对象。在我看来,问题可能根本不是您的数组逻辑,而是您在每次调用validate方法时使用不同的“存储”对象
case 2:
store = new Store();
if(store.deleteVehicle(vehicle) == false)
{
System.out.println("Vehicle not deleted");
}
run();
break;
由于您每次都将store设置为new store(),因此这是store类的一个新实例,因此不需要删除任何内容
由于每次都将store设置为new store(),因此这是store类的一个新实例,因此不需要删除任何内容。Tyr使用ArrayList和
ArrayList<Vehicle> vehicleList=new ArrayList<Vehicle>();
//Add vehicle
vehicleList.add(new Vehicle());
vehicleList.remove(index);
ArrayList vehicleList=新建ArrayList();
//添加车辆
车辆列表。添加(新车());
车辆列表。删除(索引);
使用此选项,列表中可以有任意数量的元素。Tyr使用ArrayList和
ArrayList<Vehicle> vehicleList=new ArrayList<Vehicle>();
//Add vehicle
vehicleList.add(new Vehicle());
vehicleList.remove(index);
ArrayList vehicleList=新建ArrayList();
//添加车辆
车辆列表。添加(新车());
车辆列表。删除(索引);
使用此功能,您的列表中可以有任意数量的元素。此处的设计相当可怕。商店中的许多功能应在车辆中,商店应包含一系列面纱,而不应传递给商店。基本设计如下:
class Vehicle {
public Vehicle(/*parameters*/)
static Vehicle readVehicle();
public boolean equals(Vehicle other);
// a ton of things to deal with vehicle data.
}
class Store {
//an array of vehicles, or an arrayList of vehicles.
public void addVehicle(Vehicle v);
public boolean removeVehicle(Vehicle v);
}
Store s = new Store(file);
int choice;
while((choice=getChoice())!=CHOICE_QUIT)
runChoice(choice, s);
现在您的数据结构变得更有意义了,我们可以继续讨论实际的算法应该是什么