为什么这个返回的数组不起作用?

时间:2015-01-19 22:13:20

标签: java arrays return

在这段代码中,我试图将一个二维chars数组传递给cArray,并返回一维元素数组,显示二维数组每一行的字符串。

示例:

输入数组(二维):

  

'a''b''c''d'

     

'e''f''g''h'

     

'我''j''k''l'

返回数组(一维):

  

ABCD

     

EFGH

     

IJKL

这是我的代码:

主:

public class hw2p1
{   
   public static void main (String [] args) 
   {

  // declare and initialize array of chars
  char[][] array = { {'a', 'b', 'c', 'd'},
                     {'e', 'f', 'g', 'h'},
                     {'i', 'j', 'k', 'l'} };

  cArray array1 = new cArray(array); 

  String[] array2 = array1.getArray();

  for (int i=0; i<array2.length; i++) 
    System.out.println(i+" "+array2[i]);


  }
}

CARRAY:

public class cArray
{   

   private String[] newArray;

   public cArray ( char[][] array2 )
   {  
      String[] newArray = new String[array2.length];

      for (int i=0; i < array2.length; i++)
         newArray[i] = String.valueOf(array2[i]);

      for (int l=0; l < array2.length; l++)
         System.out.println(newArray[l]);



   }
   public String[] getArray()
   {
      return newArray;
   }
}

我尝试运行此错误时收到此错误:

  

线程“main”中的异常java.lang.NullPointerException at   hw2p1.main(hw2p1.java:16)

很抱歉,如果这是一个明显的错误。我对编程很新。谢谢你的帮助!

3 个答案:

答案 0 :(得分:4)

这是问题所在:

String[] newArray = new String[array2.length];

在构造函数中声明 local 变量 - 因此您根本不会为字段分配值。你只想要:

newArray = new String[array2.length];

话虽如此,我们还不清楚为什么你需要为此创建一个实例 - 我很想拥有一个带有签名的方法:

static String[] combineArrays(char[][] arrays)

然后你可以只使用一个局部变量,并且根本不用担心任何字段。这可能与您的main方法属于同一类。

答案 1 :(得分:2)

您的本地变量newArray隐藏了字段newArray。改变这一行:

String[] newArray = new String[array2.length];

到此:

newArray = new String[array2.length];

答案 2 :(得分:0)

cArray方法中,您实际上正在初始化一个新的局部变量。相反,您应该使用实例变量。

替换它:

String[] newArray = new String[array2.length];

newArray = new String[array2.length];

此外,进行null检查总是很好:

if(array2!=null){
}