【问题标题】:Passing string array as arguements is not giving expected result将字符串数组作为参数传递没有给出预期的结果
【发布时间】:2014-05-28 20:13:05
【问题描述】:

我正在开发一个程序,我从数据库中检索字符串并将其存储到字符串数组中。现在我将这个数组传递给另一个类中的方法。说字符串数组的长度是 10。现在我将检查一个字符的特定出现,我会做一些工作。现在我的问题是我能够将 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)

【问题讨论】:

  • 请提供完整的代码,而不是部分代码。
  • 最好也缩进,这样确实更容易推理。
  • 代码有点大。所以这就是为什么发布它的一部分
  • 使用 Netbeans 时很容易缩进:alt-shift-f

标签: java arrays string nullpointerexception


【解决方案1】:

当你创建一个数组时,默认情况下它的所有项目都是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...

【讨论】:

  • 但实际上我传递了数组内部的 10 个元素。但是当我在 CalctA 方法中运行 forloop 时,会读取最后一个索引,然后发生空指针异常。
【解决方案2】:

我认为问题出在这里:

  for(int i=0;i<10;i++) \\ What line is this in the class?

改成

  for(int i =0; i < a1.length;i++)

堆栈跟踪的问题在于,由于整个类不存在,因此很难确定 NullPointerException 发生的确切位置。

【讨论】:

  • 其实数组的长度是10,而且是常数。
猜你喜欢
  • 2015-05-24
  • 2012-07-26
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多