在Java中,如何通过对象数组中的方法访问实例?
我有一个简单的类,它创建了一个具有三个实例的车辆(品牌、油箱容量和油耗-l/100km-)。这些是公共的,可以使用以下构造函数创建对象:在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;
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
。