我是java的新手,并且在了解如何手动填充对象数组时遇到了问题。我不想手动执行此操作的原因是因为我需要创建40个对象,其中20个对象转到arrayOne
而其他20个对象转到arrayTwo
。此外,每个对象都有一个独特的参数,如“Texas”或“Canada”,需要设置。
我通常会创建一个这样的数组:
long[] arrayOne;
arrayOne = new long[20];
并填充它,让我们通过循环或手动说数字。但是现在我正在处理对象并且正在努力解决这个问题,我尝试在StackOverflow上查找答案,但是无法理解那里到底发生了什么。
如果有帮助,这是我的对象的构造函数
// Plane Constructor
public Plane (int i, String dest, String airl, String airc, double t) {
planeID = i;
destination = dest;
airline = airl;
aircraft = airc;
time = t;
}// END Plane Constructor
答案 0 :(得分:5)
我建议使用ArrayList
而不是数组,因为列表可以增长,但数组是固定大小。但是,要回答你的问题:
Plane[] arrayOne = new Plane[20];
Plane[] arrayTwo = new Plane[20];
arrayOne[0] = new Plane(1001, "Timbuktu");
arrayOne[1] = new Plane(2930, "Siberia");
// etc.
arrayTwo[0] = new Plane(2019, "France");
arrayTwo[1] = new Plane(1222, "Italy");
// etc.
如果你使用了ArrayList
,那就是:
List<Plane> arrayOne = new ArrayList<Plane>();
planes.add(new Plane(1001, "Timbuktu"));
planes.add(new Plane(2930, "Siberia"));
// etc.
或者,如果你真的很喜欢:
List<Plane> planes = new ArrayList<Plane>() {{
add(new Plane(1001, "Timbuktu"));
add(new Plane(2930, "Siberia"));
}};
在所有情况下,您都可以按如下方式迭代内容:
for (Plane plane : arrayOne) {
System.out.println(plane.getDestination());
}
答案 1 :(得分:2)
Plane[] array = new Plane[10];
array[0] = new Plane(/*specify your parameters here*/)
查看Java语言规范的chapter 10。
答案 2 :(得分:1)
您必须声明一个对象数组(在本例中为Plane
),就像声明long
- Plane[] arrayOne = new Plane[20];
数组一样。然后,您可以使用索引以相同的方式访问元素。如果你真的必须手动填充它,你应该做类似的事情:
arrayOne[0] = new Plane(1, "foo", "bar", "baz", 1.0);
arrayOne[1] = new Plane(2, "fooo", "baar", "baaz", 2.0);
只有两件事与Object[]
数组long[]
的使用不同 - 数组的类型和事实,在某些时候你必须使用构造函数来创建对象。您可以使用以前创建的对象。
答案 3 :(得分:0)
首先创建Plane数组:
Plane[] planes = new Plane[20];
然后每个对象:
planes[0] = new Plane(...);
...
答案 4 :(得分:0)
如果interface
的元素不一定是array
的实例,则可以使用通用Plane
。
例如:
包裹测试;
public class Main {
public static void main(String[] args) {
Flyer[] flyers = new Flyer[] { new Plane(), new Bird() };
for (Flyer f: flyers) {
// you can only access method "fly" here, because it's the only
// method defined in your interface, but nothing
// stops you from adding more methods, as long as you implement
// them in the (non-abstract) classes
f.fly();
}
}
}
class Plane implements Flyer {
// TODO id, destination, airline, etc. getters/setters
@Override
public void fly() {
System.out.println("Weeee I'm flying!");
}
}
class Bird implements Flyer {
// TODO whatever properties / getters / setters
@Override
public void fly() {
System.out.println("Chirp chirp");
}
}
interface Flyer {
void fly();
}
输出:
Weeee I'm flying!
Chirp chirp