我正在尝试使用复制构造函数复制对象,但它会输出错误:
Exception in thread "main" java.lang.NullPointerException
at Polynomial.<init>(Polynomial.java:30)
at Polynomial.showDerivative(Polynomial.java:59)
at Program.main(Program.java:9)
这是我的复制构造函数:
public Polynomial(Polynomial poly)
{
for(int i = 0; i < a.length; i++)
a[i] = poly.a[i];
for(int i = 0; i < b.length; i++)
b[i] = poly.b[i];
}
这就是我实例化对象的方式:
Polynomial pol = new Polynomial(this);
我该怎么办?
感谢。
答案 0 :(得分:1)
使用System.arraycopy
创建数组副本会更好。
此外,将复制构造函数更改为: -
public Polynomial(Polynomial poly)
{
int aLen = poly.a.length;
int bLen = poly.b.length;
// Initialize arrays for this object
a = new int[aLen]; // Assuming `a` and `b` are integer arrays
b = new int[bLen]; // Change accordingly.
// A better way to create copy of arrays would be to use `System.arraycopy
System.arraycopy( poly.a, 0, a, 0, aLen);
System.arraycopy( poly.b, 0, b, 0, bLen);
/*** You can avoid using below loops ***/
// Iterate till the `aLen` of `poly` object passed
// and add elements to `a` array of this object
/*for(int i = 0; i < aLen; i++)
a[i] = poly.a[i];
// Iterate till the `bLen` of `poly` object passed
// and add elements to `b` array of this object
for(int i = 0; i < bLen; i++)
b[i] = poly.b[i]; */
}
您的for
循环应该一直运行到poly.a
和poly.b
而不是a
和b
,因为它们尚未初始化,因此NPE
。
答案 1 :(得分:0)
假设您的Polynomial
课程如下:
public class Polynomial {
private int[] a;
private int[] b;
public Polynomial(int length) {
a = new int[length];
b = new int[length];
}
public Polynomial(Polynomial poly)
{
for(int i = 0; i < a.length; i++)
a[i] = poly.a[i];
for(int i = 0; i < b.length; i++)
b[i] = poly.b[i];
}
public static void main(String[] args) {
Polynomial p = new Polynomial(2);
Polynomial q = new Polynomial(p);
}
}
然后问题是实例变量a
和b
不是
在复制构造函数中初始化。每个构造函数都是独立的,并且
如果你想从另一个内部执行操作,你必须这样做
显式地通过调用公共初始化函数,例如
public class Polynomial {
private int[] a;
private int[] b;
private void init(int length) {
a = new int[length];
b = new int[length];
}
public Polynomial(int length) {
init(length);
}
public Polynomial(Polynomial poly)
{
init(poly.a.length);
for(int i = 0; i < a.length; i++)
a[i] = poly.a[i];
for(int i = 0; i < b.length; i++)
b[i] = poly.b[i];
}
public static void main(String[] args) {
Polynomial p = new Polynomial(2);
Polynomial q = new Polynomial(p);
}
}
答案 2 :(得分:0)
你可以使用:
public Polynomial(Polynomial poly) {
a=poly.a.clone();
b=poly.b.clone();
}
将分别在一个步骤中创建和复制数组。