这是我的部分代码:
`private Instrumento[] repInst;
public RepositorioInstrumentos(){
Instrumento[] repInst = new Instrumento[20];
}
private int getPos(int id){
int pos= -1;
for(int i=0; i<tam; i++){
if (repInst[i]!=null&&repInst[i].getId()==id){
pos=i;
i=tam;
}
}
return pos;
}`
我一直在这一行得到一个零点Poiter异常:
`if (repInst[i]!=null&&repInst[i].getId()==id){`
repInst的所有位置都为空。我认为把那个“if”他跳过它并返回pos = -1。
为什么不工作?
答案 0 :(得分:4)
repInst是构造函数中的局部变量
private Instrumento[] repInst;
public RepositorioInstrumentos(){
repInst = new Instrumento[20];
}
private int getPos(int id){
int pos= -1;
for(int i=0; i<tam; i++){
if (repInst[i]!=null&&repInst[i].getId()==id){
pos=i;
i=tam;
}
}
return pos;
}
答案 1 :(得分:0)
初始化构造函数中的repInst
然后访问其方法beacuse如果访问其方法而不初始化它将获得NullPointerException
并且tam
变量的值可能是其值比数组lenth更大,然后它也会抛出ArrayIndexOutOfBoundsException
private Instrumento[] repInst;
public RepositorioInstrumentos(){
repInst = new Instrumento[20];
}
private int getPos(int id){
int pos= -1;
int tam=20;
//tam variable value should b less then arrays length
for(int i=0; i<tam; i++){
if (repInst[i]!=null&&repInst[i].getId()==id){
pos=i;
i=tam;
}
}
return pos;
}`
答案 2 :(得分:0)
做一个改变。在Constructor中初始化此数组。
Instrumento[] repInst = new Instrumento[20];
或用Object的对象初始化它。