问题是:我有一个代码
public class Component { public Component() { // TODO Auto-generated constructor stub } public double[] Shifts ; public double[][] Couplings ; } public class Decouplage { public Decouplage(double[] GroupShifts, double[][] GroupCoup) { AllComponents = new Component(); AllComponents.Shifts = GetShifts(...blah-blah-bla...); AllComponents.Couplings = GetGouplings(...blah-blah-bla...); } public Component AllComponents ; }
有用.但是当我尝试创建这个类Component的数组AllComponents [10]时
public class Decouplage { public Decouplage(double[] GroupShifts, double[][] GroupCoup) { AllComponents = new Component()[nComponents]; /////HOW MUST I PUT IN ONE LINE THE NUMBER OF ELEMENTS AND THE () FOR CONSTRUCTOR???? for (int iCounter=0;iCounter它没有copmile.
但如果我忽略了construstor的()
public class Decouplage { public Decouplage(double[] GroupShifts, double[][] GroupCoup) { AllComponents = new Component[nComponents]; /////IS IT LEGAL TO IGNORE CONSTRUCTOR, EVEN IF IT IS EMPTY???? for (int iCounter=0;iCounter它不能解决换档和联轴器作为一个领域......
你有什么建议吗?注意:GetShifts()与标准Java的getShift()没有任何关系.这是我自己的,它运作良好,我检查.
感谢名单!
1> Jon Skeet..:这里有两个独立的概念:创建引用数组,以及创建类的实例.所以这一行:
AllComponents = new Component[nComponents]将创建一个
Component
引用数组.最初,所有引用都将为null.如果你想用新实例的引用填充它,你必须遵循以下行:for (int i = 0; i < nComponents; i++) { AllComponents[i] = new Component(); }编辑:要回复评论,
AllComponents
是一个数组 - 它没有Shifts
或的概念Couplings
.如果需要为新组件设置班次或耦合,则应使用以下任一方法:for (int i = 0; i < nComponents; i++) { AllComponents[i] = new Component(); AllComponents[i].Shifts = // Code here AllComponents[i].Couplings = // Code here }要么
for (int i = 0; i < nComponents; i++) { Component component = new Component(); component.Shifts = // Code here component.Couplings = // Code here AllComponents[i] = component; }或者向构造函数添加参数以进行
Component
移位和耦合.顺便说一下,我假设你是Java的新手,而且目前只想要解决这个特定问题的帮助 - 当你准备继续前进时,值得看看Java编码惯例,并封装你的数据更加健壮.(使用公共变量通常是一个坏主意.)