使用构造函数参数初始化数组 - 无法初始化?

时间:2012-02-19 19:14:01

标签: java arrays constructor private

我在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 ;指向我正在调用该变量的实例。所以我在不同的领域尝试了不同形式的它,我现在就像迷宫一样试图让阵列正常工作。我需要得到所有帮助。想法?

3 个答案:

答案 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