将字符串数组作为参数传递不会给出预期的结果

时间:2014-04-14 18:22:21

标签: java arrays string nullpointerexception

我正在编写一个程序,在那里我从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)

2 个答案:

答案 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正在发生的位置。