我正在编写一个程序,在那里我从db检索字符串并存储到String数组中。现在我将此数组传递给另一个类中的方法。 Say字符串数组长度为10.现在我将检查char的特定出现,我将做一些工作。现在我的问题是我能够将db中的值存储到字符串数组中。但是我得到的问题是给出空指针异常。由于在另一个方法中读取字符串数组的循环读取最后一个索引数组。
该计划:
这是我将Db值存储到数组中的位置。这些数组是全局声明。
while(rst.next())
{
allitems[i]=rst.getString("transitems");
alltuv[i]=rst.getString("tuv");
}
现在将此数组传递给同一类的方法。
Window2 n=new Window2();
n.calculateTWU(allitems,alltuv);
现在我将这个数组传递给另一个不同类的方法。
CalculateTWU ctw=new CalculateTWU();
String avalue=ctw.calctA(s1, s2,"A"); //s1 and s2 are the string arrays s1=allitems and s2=alltuv.
另一个班级的方法说B类
public String calctA(String[] a1,String[] a2,String indexstr)
{
for(int i=0;i<10;i++)
{
int is= a1[i].indexOf(indexstr);
if(is==-1)
{
}
else
{
valadd=Integer.parseInt(a2[i])+valadd;
}
}
return String.valueOf(valadd);
}
堆栈追踪:
MNOETTAOHX // these are strings
BOCOPVBLEV
MIAISEUECV
MGUXPXPEDX
EQMWLRVKZG
MNFBFAXQNT
YZKDHMVSSA
java.lang.NullPointerException
at datasets.CalculateTWU.calctA(CalculateTWU.java:27)
at datasets.Window2.calculateTWU(Window2.java:205)
at datasets.Window2.jButton1ActionPerformed(Window2.java:146)
at datasets.Window2.access$000(Window2.java:20)
at datasets.Window2$1.actionPerformed(Window2.java:68)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
答案 0 :(得分:0)
创建数组时,默认情况下,所有项目都为null
,直到您填充它们为止。在您的示例中,您有9个字符串,但循环数组中的10个项目。最后一个是null
,因此是NullPointerException
。
您可以通过明确检查来避免这种情况:
public String calctA(String[] a1, String[] a2, String indexstr) {
for(int i=0; i < a1.length; ++i) {
if (a1[i] != null) {
int is= a1[i].indexOf(indexstr);
// rest of your code...
答案 1 :(得分:0)
我认为问题在于:
for(int i=0;i<10;i++) \\ What line is this in the class?
更改为
for(int i =0; i < a1.length;i++)
堆栈跟踪的问题是因为整个类都没有表示很难确定NullPointerException正在发生的位置。