在这段代码中,我试图将一个二维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)
很抱歉,如果这是一个明显的错误。我对编程很新。谢谢你的帮助!
答案 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){
}