在Java中,如何通过对象数组中的方法访问实例?

在Java中,如何通过对象数组中的方法访问实例?,java,arrays,class,object,instance,Java,Arrays,Class,Object,Instance,我有一个简单的类,它创建了一个具有三个实例的车辆(品牌、油箱容量和油耗-l/100km-)。这些是公共的,可以使用以下构造函数创建对象: public class VehicleClass { String brand; int tank; double consumption; VehicleClass (String brand, int tank, double consumption) { this.brand = brand;

我有一个简单的类,它创建了一个具有三个实例的车辆(品牌、油箱容量和油耗-l/100km-)。这些是公共的,可以使用以下构造函数创建对象:

public class VehicleClass 
{
    String brand;
    int tank;
    double consumption;

    VehicleClass (String brand, int tank, double consumption)
    {
        this.brand = brand;
        this.tank = tank;
        this.consumption = consumption;
    }
}
我想创建一个包含两个车辆的数组,因此在main类中,我创建了以下三个对象:

public class VehicleMain 
{
    public static void main (String[] args) 
    {           
        VehicleClass car1 = new VehicleClass ("Ford", 40, 6.5);
        VehicleClass car2 = new VehicleClass ("Volkswagen", 50, 5.0);
        VehicleClass cars[] = new VehicleClass[] {car1, car2}; 
    }
}
我想创建一个方法,使用数组
cars
,将返回两个车辆的最大范围的数组。这是我的方法:

public int[] distances (VehicleClass[] car)
{
    int[] range = new int[car.length];
    for (int i = 0; i < car.length; i++)
    {
        range[i] = (int) ((tank * 100) / consumption);
    }
    return range;
}
但是,如果我将car1放入
[615,615]
,而将
[1000,1000]
放入car2,我只会得到
[615,615]
。我的目标是它将返回
[6151000]
。 放在这里,给我一个错误:

System.out.println (Arrays.toString (cars.distances(cars)));

我做错了什么?有可能做到我所想的吗?如果有人能向我澄清这个问题,我将不胜感激。我是OOP的初学者。

我想我会做两件事。在
Vehicle
类上创建一个
distance()
函数,返回一辆车的距离,然后使用Java map函数对数组进行操作:

public class Vehicle //renamed from VehicleClass
{
    String brand;
    int tank;
    double consumption;

    //etc, constructor stuff...

    public int distance() {
        return (int) ((tank * 100) / consumption);
    }
}
那么在你的主要发言中:

public class VehicleMain 
{
    public static void main (String[] args) 
    {           
        VehicleClass car1 = new VehicleClass ("Ford", 40, 6.5);
        VehicleClass car2 = new VehicleClass ("Volkswagen", 50, 5.0);
        VehicleClass cars[] = new VehicleClass[] {car1, car2}; 
        Integer[] results = Stream.of(cars).map(VehicleClass::distance).toArray(Integer[]::new);
        for (int i : results) {
           System.out.println(i);
        }
    }
}
一般来说,我认为问题在于,您将单个VehicleClass与VehicleClass对象的集合混淆了。在距离法中,您在通过的车辆上循环,但随后您重复使用来自
实例的相同
this.tank
this.consumption
值,而不是例如
car[i]。tank

通常,您希望将收集逻辑(获取与数组中所有对象的距离)与距离的实际计算分开。距离计算与单个车辆有关,因此它位于VehicleClass中,而收集逻辑位于main方法中。或者,您也可以将“收集逻辑”放入一个新的VehicleCollection类中的
distance
方法中,该方法调用所包含对象上的所有
distance
方法。或者,您可以在您的VehicleClass上创建一个静态
距离
方法来执行相同的操作


但是,由于您需要的唯一“收集逻辑”是将所有距离映射到一个数组中,因此我认为将其放在主方法中是有意义的。

我认为我需要做两件事。在
Vehicle
类上创建一个
distance()
函数,返回一辆车的距离,然后使用Java map函数对数组进行操作:

public class Vehicle //renamed from VehicleClass
{
    String brand;
    int tank;
    double consumption;

    //etc, constructor stuff...

    public int distance() {
        return (int) ((tank * 100) / consumption);
    }
}
那么在你的主要发言中:

public class VehicleMain 
{
    public static void main (String[] args) 
    {           
        VehicleClass car1 = new VehicleClass ("Ford", 40, 6.5);
        VehicleClass car2 = new VehicleClass ("Volkswagen", 50, 5.0);
        VehicleClass cars[] = new VehicleClass[] {car1, car2}; 
        Integer[] results = Stream.of(cars).map(VehicleClass::distance).toArray(Integer[]::new);
        for (int i : results) {
           System.out.println(i);
        }
    }
}
一般来说,我认为问题在于,您将单个VehicleClass与VehicleClass对象的集合混淆了。在距离法中,您在通过的车辆上循环,但随后您重复使用来自
实例的相同
this.tank
this.consumption
值,而不是例如
car[i]。tank

通常,您希望将收集逻辑(获取与数组中所有对象的距离)与距离的实际计算分开。距离计算与单个车辆有关,因此它位于VehicleClass中,而收集逻辑位于main方法中。或者,您也可以将“收集逻辑”放入一个新的VehicleCollection类中的
distance
方法中,该方法调用所包含对象上的所有
distance
方法。或者,您可以在您的VehicleClass上创建一个静态
距离
方法来执行相同的操作


但是,由于您需要的唯一“收集逻辑”是将所有距离映射到一个数组中,因此我认为将其放在主方法中是有意义的。

也许,在
距离
方法中,您的意思是使用
汽车[I].tank
汽车[I].consumption
。当前,您仅使用接收到
距离
方法调用的对象的
油箱
油耗
创建一个具有三个实例(品牌、油箱容量和油耗-l/100km-)的车辆。
。我想你的意思是带有三个字段的
车辆
在车辆中创建一个新方法,例如
车辆#距离
,它返回单个车辆的距离。然后,只需要为输入数组创建一个距离数组。目前,您正在尝试将这些概念结合起来。不鼓励使用语法
VehicleClass cars[]
,推荐的语法是
VehicleClass[]cars
。也许,在
距离
方法中,您的意思是使用
car[i]。坦克
car[i]。消耗量
。当前,您仅使用接收到
距离
方法调用的对象的
油箱
油耗
创建一个具有三个实例(品牌、油箱容量和油耗-l/100km-)的车辆。
。我想你的意思是带有三个字段的
车辆
在车辆中创建一个新方法,例如
车辆#距离
,它返回单个车辆的距离。然后,只需要为输入数组创建一个距离数组。目前,您正在尝试组合这些概念。不鼓励使用语法
VehicleClass cars[]
,建议使用语法
VehicleClass[]cars