用于更改类字段的java构造函数或函数
我有两个字段:long nr和long向量,如下所示:
public class Pair {
public long nr;
public Vector<Long> lines;
public Pair(long ap, long line){
this.nr=ap;
if (line!=0) lines.add(linie);
else lines=null;
}
public void create (long line){
nr++;
lines.add(line);
}
}
我希望有一个函数(create),以便它修改类的字段。在我的主课上
Pair per1=new Pair(0,0);
Pair per2=new Pair(0,0);
per1.create(3);
per2.create(4);
构造函数可以很好地工作,但是create不能。解释是什么,函数应该是什么样子?非常感谢
# 1 楼答案
您从未通过在代码中调用
new Vector<Long>()
来创建Vector的实例。此外,您正在将类变量lines
设置为null
,如果line == 0
您的代码应该如下所示:
# 2 楼答案
构造函数中的行将向量设置为null,因此以后不能添加到该行中
顺便说一句,如果您使用任何其他参数调用构造函数,它甚至都不会工作,因为您根本不会初始化行向量
我不知道你到底想做什么,但是你可以把你的字段定义改为
然后移除构造器中的else
# 3 楼答案
两个问题:
您的构造函数永远不会为非零值工作;它将抛出空指针异常。这是因为您从不初始化
lines
。当您将它定义为成员或在构造函数中(作为lines = new Vector<Long>();
)当使用
line
参数作为0
调用构造函数时,将变量lines
设置为null
,因此始终会出现空指针异常。当您随后调用create
时,在运行lines.add(line)
时将出现空指针异常为了解决您的问题,我会这样做:
注意这里没有
else
。我不知道为什么需要将lines
设置为null
,但要知道,如果这样做,以后将无法使用它。这也是一个非常奇怪的副作用,必然会给类的用户带来混乱其他几点建议
请使用正确的Java语法和命名约定。始终用大括号围绕
if
和else
的周围:如果(行!=0){ 线添加(行); }否则{ ... }
nr
和ap
不是很清楚李># 4 楼答案
缺少行的构造函数
无论是在行的定义中,还是在对的构造函数中,都必须初始化行:
# 5 楼答案
您的
lines
向量从未初始化。使用0
以外的值调用构造函数也会引发NullPointerException您可以在构造函数的开头将字段声明更改为
Vector<Long> lines = new Vector<Long>();
或调用lines = new Vector<Long>();
,如果第二个参数的值为0
,则不执行任何操作# 6 楼答案
首先,我不确定类的名称是否与行为匹配。像
nr
这样的名称使得使用代码非常困难。考虑将它重命名为更有意义的东西。关键是永远不要创建向量对象,只创建引用
所以我会让你的构造器这样做: