我在javaprogrammingforums.com上问了同样的问题,但现在看来他们的网站已经关闭了。所以我看不出有什么回应(如果有的话)。无论如何,我很难坚持这个Java硬件分配。到目前为止,我在完成方面看起来很好,现在只是出现正确的值。假装我有这个:
(这只是构造函数中二者的第二类的一部分,另一部分是“测试者”)
//private variables
boolean myP;
boolean myPla;
boolean myGl;
boolean myCa;
double myPlot;
int myCrust;
double myReduct;
double myNet;
double myGross;
boolean [] trshIt = {myP, myPla, myGl, myCa};
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8};
//constructor
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca)
{
myPlot = 1018.0;
myCrust = crust;
myP = p;
myPl = pl;
myGl = gl;
myCa = ca;
}
我的问题是布尔数组, trshIt 。由于我将变量放在尚未初始化的数组中,因此它将这些变量的默认值设置为false。如果我先把它放在构造函数中,那么我会收到一个错误,抱怨无法找到变量 trshIt ;指向我正在调用该变量的实例。所以我在不同的领域尝试了不同形式的它,我现在就像迷宫一样试图让阵列正常工作。我需要得到所有帮助。想法?
答案 0 :(得分:2)
它不起作用,因为trshIt会在构造函数中初始化之前从字段中获取其值。
在每个其他变量生效后,在构造函数中初始化trshIt。
另外,由于CO2TrashEmissions看起来是不变的(也可能是myPlot?),你应该声明它是静态的和最终的,以防止它发生变化。虽然它不会阻止对元素本身的修改。
private static final double[] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8};
//Fields....
boolean[] trshIt;
//constructor
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca)
{
myPlot = 1018.0;
myCrust = crust;
myP = p;
myPl = pl;
myGl = gl;
myCa = ca;
trshIt = new boolean[]{myP, myPla, myGl, myCa};
}
另外,请注意,由于布尔值是文字,因此更改一个my *变量不会更改数组中的相应元素,这可能是一个问题,具体取决于您的程序正在执行的操作。
答案 1 :(得分:0)
将trshIt
声明为类的成员,但在构造函数中初始化它,如下所示:
boolean [] trshIt;
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8};
//constructor
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca)
{
myPlot = 1018.0;
myCrust = crust;
myP = p;
myPl = pl;
myGl = gl;
myCa = ca;
trshIt = new boolean[4];
trshIt[0] = myP;
trshIt[1] = myPla;
trshIt[2] = myGl;
trshIt[3] = myCa;
}
答案 2 :(得分:0)
任何原因你不能这样做:
//private variables
boolean myP;
boolean myPla;
boolean myGl;
boolean myCa;
double myPlot;
int myCrust;
double myReduct;
double myNet;
double myGross;
boolean [] trshIt;
double [] CO2TrashEmissions;
//constructor
CO2FromWaste(int crust, boolean p, boolean pl, boolean gl, boolean ca){
myPlot = 1018.0;
myCrust = crust;
myP = p;
myPl = pl;
myGl = gl;
myCa = ca;
trshIt = new boolean[4];
trshIt[0] = myP; trshIt[1] = myPla;
trshIt[2] = myGl; trshIt[3] = myCa;
double [] CO2TrashEmissions = {184.0, 25.6, 46.6, 165.8};
}
在Java中,基元(int,char,boolean)是按值分配的,所以如果你这样做了
boolean b = true;
boolean[] a = { b };
b = false;
System.out.println( ( a[0] == true ) ? "true" : "false" );
将打印“true”,因为b = false;
不会更改a
数组中的值(因为它不会将“指针”存储到b
,而是值在b
。