Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在使用构造函数参数中的值初始化数组-无法初始化?_Java_Arrays_Constructor_Private - Fatal编程技术网

Java 正在使用构造函数参数中的值初始化数组-无法初始化?

Java 正在使用构造函数参数中的值初始化数组-无法初始化?,java,arrays,constructor,private,Java,Arrays,Constructor,Private,我在javaprogrammingforums.com上问了同样的问题,但他们的网站现在似乎已经关闭了。所以我看不出我得到了什么回应(如果有的话)。不管怎么说,我在Java硬件作业上陷入了困境。到目前为止,我所拥有的在完成方面看起来不错,现在它只是得到了正确的值。假设我有这个: (这只是第二类的一部分,第二类是构造函数,另一类是“测试员”) 我的问题是布尔数组,trshIt。由于我将尚未初始化的变量放入数组中,因此它会将这些变量的默认值设置为false。如果我先把它放在构造函数中,那么我会得到一

我在javaprogrammingforums.com上问了同样的问题,但他们的网站现在似乎已经关闭了。所以我看不出我得到了什么回应(如果有的话)。不管怎么说,我在Java硬件作业上陷入了困境。到目前为止,我所拥有的在完成方面看起来不错,现在它只是得到了正确的值。假设我有这个:

(这只是第二类的一部分,第二类是构造函数,另一类是“测试员”)


我的问题是布尔数组,trshIt。由于我将尚未初始化的变量放入数组中,因此它会将这些变量的默认值设置为false。如果我先把它放在构造函数中,那么我会得到一个错误,抱怨变量trshIt找不到;指向我调用该变量的实例。所以我在不同的区域尝试了不同形式的阵列,我现在就像被困在迷宫中一样,试图让阵列正常工作。我需要所有能得到的帮助。Ideas?

声明
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;
}

您不能这样做的任何原因:

//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
中的值不起作用,因为trshIt将在字段在构造函数中初始化之前从字段中获取其值

在构造函数中初始化trshIt后,每一个其他变量都应该起作用

另外,由于CO2TrashEmissions在外观上是恒定的(可能还有myPlot?),您可能应该将其声明为static和final,以防止其更改。尽管它不会阻止对元素本身的修改

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*变量之一不会更改数组中的相应元素,这可能是一个问题,具体取决于您的程序正在执行的操作。

不要在多个位置发布相同的问题。此外,您添加了许多标记,但最重要的标记除外:“Java”…嗯。我所在的另一个论坛已关闭,这是我在这里的第一个线程…我将修复标记。嗯,很好的尝试,尽管我已经尝试了,但在trshIt数组的第一个扭曲括号之前,我得到了一个“非法开始表达式”错误。我不清楚为什么会得到这个。你可能需要
trshIt=new boolean[]{myP,myPla,myGl,myCa};
你只能在声明变量时使用快捷数组符号,也就是说你可以做
boolean[]a={true,false};
但不能
boolean[]a;a={true,false};
oops.Ok。编辑后修复了。它成功了!尽管我不得不将boolean[]trshIt;改为boolean[]trshIt=new boolean[4];并通过在构造函数中为每个索引分配变量添加了您输入的内容。最终在终端上获得了魔力。嗯,我按照您的风格,成功地通过了第一个错误。但是运行脚本时,我现在收到一个错误,当我在for循环中询问trshIt的长度时,trshIt为null。甚至在de中查看它的值bugger it报告它是空的。我以前从未有过这样的事情。想法?顺便说一句,感谢您帮助我解决错误1。只有在未调用此特定构造函数的情况下,它才能为空。您是否有多个构造函数,或者您是否使用
new CO2FromWaste()
而不是
new CO2FromWaste(地壳,p,pl,gl,ca)
anywhere?我只有一个构造函数,并且我在arraylist中多次使用带有参数的新CO2FromWaste作为对象。@Michael:你应该接受这个答案,然后用导致新问题的代码发布另一个问题。别担心,现在已经解决了。谢谢你user1000959。(还不能做有用的回答)我主要是利用ArrayList来计算和打印信息。布尔变量确实发生了变化。我认为我不允许在脚本中使用诸如static和final之类的术语,因为它还没有教给我。但是相信我,如果我可以的话,我会完全理解的。有用的东西越多越好。我会参考这个如果我处于类似的情况下,我正在为它构建脚本。我的意思是在构造函数之外,当你使用方法修改字段来操作对象时——你一定会在以后的课程中了解它。祝你好运,不要犹豫,要学得更多。
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};
}