Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用对象数组_Java - Fatal编程技术网

在java中使用对象数组

在java中使用对象数组,java,Java,我正在用Java处理对象数组,我很难理解它们,我想这只是因为我还不习惯它们 基本上我想做的就是打开一个选项菜单。。当用户按下“1”(在主应用程序类中)时,它会将他们带到另一个类(addVehicle()),其中车辆对象作为参数传入。(这一切都很好) 在这一级别的顶部,我限制车辆最多4辆: Vehicle[] vehicles = new Vehicle[4]; 下面是添加车辆的方法: public void addVehicle(Vehicle vehicle[]) throws FileNo

我正在用Java处理对象数组,我很难理解它们,我想这只是因为我还不习惯它们

基本上我想做的就是打开一个选项菜单。。当用户按下“1”(在主应用程序类中)时,它会将他们带到另一个类(addVehicle()),其中车辆对象作为参数传入。(这一切都很好)

在这一级别的顶部,我限制车辆最多4辆:

Vehicle[] vehicles = new Vehicle[4];
下面是添加车辆的方法:

public void addVehicle(Vehicle vehicle[]) throws FileNotFoundException
{
    reader = new Scanner(file);
    if(canAddVehicle(vehicles[vehicles.length - 1]))
    {
        vehicle[vehicles.length - 1] = new Vehicle();
        vehicle[vehicles.length - 1].readRecord(reader);

        System.out.println("Vehicle Added!");
    }
    else
    {
        System.out.println("You can not add more than 4 vehicles.");
    }
}
我希望它将此车辆对象存储在阵列中的下一个点中(如果仍有一个点打开),以及该车辆附带的所有信息


我这样做对吗?此车辆对象是否正确存储到阵列中?我是否应该询问关于我第一节课上车辆的信息?

我认为问题在于你不理解
车辆。长度
代表什么

如果你说:

Vehicle[] vehicles = new Vehicle[4];
然后
车辆。长度始终为
4
。这是数组的长度;它是固定的(您不能调整数组的大小),而且您还没有为其任何元素指定任何内容也无关紧要。创建数组时将有四个元素,每个元素都包含
null

要使用数组执行您试图执行的操作,您有两个选项

  • 0
    开始,跟踪您分配给
    车辆的上一个索引
  • 每次要插入并查找第一个
    null
    的索引时,都要遍历数组。(注意,这是一种非常低效的方法)

更简单的方法是使用一种Java语言,它是动态的,并且随着添加内容的增加,其大小也会增加。举个例子。

我认为问题在于你不理解
车辆的长度所代表的含义

如果你说:

Vehicle[] vehicles = new Vehicle[4];
然后
车辆。长度始终为
4
。这是数组的长度;它是固定的(您不能调整数组的大小),而且您还没有为其任何元素指定任何内容也无关紧要。创建数组时将有四个元素,每个元素都包含
null

要使用数组执行您试图执行的操作,您有两个选项

  • 0
    开始,跟踪您分配给
    车辆的上一个索引
  • 每次要插入并查找第一个
    null
    的索引时,都要遍历数组。(注意,这是一种非常低效的方法)

更简单的方法是使用一种Java语言,它是动态的,并且随着添加内容的增加,其大小也会增加。一个例子。

不。由于您已指定
车辆
数组的长度,因此该长度将始终返回4,因此您将始终插入到数组的末尾。理想情况下,如果希望这样做,则需要保留一个插入元素数计数器(并检查是否有空间!)。另外,我不知道您的
车辆
参数在做什么,因为它似乎没有被使用


一个更好的方法是使用,当然,如果你想学习如何使用对象数组,这对你没有帮助。

不。由于您已指定
车辆
数组的长度,因此该长度将始终返回4,因此您将始终插入到数组的末尾。理想情况下,如果希望这样做,则需要保留一个插入元素数计数器(并检查是否有空间!)。另外,我不知道您的
车辆
参数在做什么,因为它似乎没有被使用


一个更好的方法是使用,当然,如果您想学习如何使用对象数组,这对您没有帮助。

如果我理解正确,您正在尝试使用vehicles.length来计算已添加的项目数量。那是错误的。车辆。长度将始终返回4。这是一个检查下一个可用项的方法(假设您仍然希望使用数组)

private int nextAvailableIndex(T[]数组){
for(int i=0;i
您可以按照前面的建议使用ArrayList。但是,请记住ArrayList可以无限增长。您的代码应该如下所示:

List<Vehicle> l = new ArrayList<Vehicle>(4); // Initial/expected Capacity!

if(l.size() < 4) {
    // do stuff
}
List l=newarraylist(4);//初始/预期容量!
如果(l.尺寸()<4){
//做事
}

如果我理解正确,您正在尝试使用vehicles.length来计算已添加的项目数量。那是错误的。车辆。长度将始终返回4。这是一个检查下一个可用项的方法(假设您仍然希望使用数组)

private int nextAvailableIndex(T[]数组){
for(int i=0;i
您可以按照前面的建议使用ArrayList。但是,请记住ArrayList可以无限增长。您的代码应该如下所示:

List<Vehicle> l = new ArrayList<Vehicle>(4); // Initial/expected Capacity!

if(l.size() < 4) {
    // do stuff
}
List l=newarraylist(4);//初始/预期容量!
如果(l.尺寸()<4){
//做事
}

找到了我的解决方案!谢谢你的帮助

     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();
                }

            }
for(int i=0;i
找到了我的解决方案!谢谢你的帮助

     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();
                }

            }
for(int i=0;i