我有一个设置数组的类。另一个类扩展了这个类,并在方法中使用提到的数组来返回另一个数组。当我这样做时,我收到一个null异常但是当我设置原始数组时,它工作得很好。不知道我在这里做错了什么。还是很新的。
设置数组的类(部分):
public class InitialGrids {
int iic,ioc,iman ;
int nic, noc;
double masIC, masOC, masMAN;
double volIC, volOC, volMAN, volP;
double radIC, radOC, radP;
public int iMat[ ];
public double rad[ ];
public double vol[ ];
public double mas[ ];
public double dmas[ ];
public double [ ] radius(int nr)
{
rad = new double [nr +1];
for( int k = 0 ; k <= nic ; k++ )
{
rad[ k ] = radIC * ((double) k / nic);
System.out.println("the radius at shell " + k + " is " + rad[k]);
}
for( int k = nic + 1 ; k <= noc ; k++ )
{
rad[ k ] = radIC + ( (radOC - radIC) * ((double) (k - nic) / (noc - nic)) );
System.out.println("the radius at shell " + k + " is " + rad[k]);
}
for( int k = noc + 1 ; k <= nr ; k++ )
{
rad[ k ] = radOC + ( (radP - radOC) * ((double) (k - noc) / (nr - noc)) );
System.out.println("the radius at shell " + k + " is " + rad[k]);
}
return(rad);
}
这是扩展InitialGrids(部分)的类:
public class Compression extends InitialGrids {
double G;
double PI;
double Pave;
double x, z, dy, dz, dydx; // this is for the iteration that will update the density
double delta;
double mix;
public double grav[ ];
public double P[ ];
public double rhon[ ];
public double radn[ ];
public double [ ] gravity( int nr )
{
G = Constants.PI;
PI = Constants.PI;
grav = new double [ nr + 1 ];
for(int k = 1; k <= nr; k++)
{
grav[ 0 ] = 0;
grav[ k ] = ( (G*mas[k]) / (Math.pow(rad[k], 2)) );
}
return(grav);
}
我在主类中称这些为:
InitialGrids ig = new InitialGrids();
ig.setup(icMat, ocMat, manMat, nr, masP, fic, foc, fman, fSi, fSi, fO);
ig.material(nr);
ig.radius(nr);
ig.density(nr,fSi, fSi, foc);
ig.volume(nr);
ig.dmass(nr);
ig.mass(nr);
Compression com = new Compression();
com.gravity(nr);
com.pressure(nr);
com.newDensity(nr);
com.radn(nr);
答案 0 :(得分:0)
“mas []”未在代码中的任何位置初始化。除非你在别处初始化它,否则这就是你的问题。
答案 1 :(得分:0)
所以,你几乎打破了这里的每一条规则。首先,在调用方法半径之前,字段rad
未初始化,因此在调用此方法之前,新创建的InitialGrids
实例无效。
因此,您的空指针正在发生,因为您创建了InitialGrids
,ig
的实例,并调用了radius
,然后是{{>单独的实例{{ 1}}并且以某种方式期望该实例中的Compression
与rad
实例中的ig
相关联?我不这么认为。
为什么这些类仍然是继承关系?
答案 2 :(得分:0)
最有可能的是,应该初始化实例变量mas和rad。 也许你需要像这样打电话。
Compression com = new Compression();
com.setup(icMat, ocMat, manMat, nr, masP, fic, foc, fman, fSi, fSi, fO);
com.material(nr);
com.radius(nr);
com.gravity(nr);
名为“com”和“ig”的实例完全不同。