[英]Constructor or function to change class fields
我有兩個字段: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);
}
}
我想要一個函數(創建),所以它修改了類的字段。 在上課的時候我有
Pair per1=new Pair(0,0);
Pair per2=new Pair(0,0);
per1.create(3);
per2.create(4);
構造函數可以正常工作,但是create不能。 解釋是什么,函數應該是什么樣?非常感謝。
兩個問題:
您的構造函數永遠不會對非零值起作用; 它將拋出一個空指針異常。 這是因為您永遠不會初始化lines
。 當您將其定義為成員或在構造函數中時,將需要對其進行初始化(因為lines = new Vector<Long>();
)
總是會得到一個空指針異常,因為在調用line
參數為0
構造函數時,將變量lines
設置為null
。 隨后調用create
,將在運行lines.add(line)
時獲得空指針異常。
為了解決您的問題,我將執行以下操作:
lines = new Vector<Long>();
if(line != 0) {
lines.add(line);
}
注意沒有else
。 我不確定為什么需要將lines
設置為null
,但是要意識到,如果這樣做,以后將無法使用它。 這也是一個很奇怪的副作用,勢必會給您的班級用戶帶來困惑。
其他一些指針。
請使用正確的Java語法和命名約定。 請始終用大括號包圍if
和else
:
if(line!= 0){lines.add(line); }其他{...}
nr
和ap
不太清楚。 nr
和lines
真的需要public
嗎? 那是例外,而不是規則。 構造函數中的行將Vector設置為null,因此以后無法添加。
if (line!=0) lines.add(linie);
else lines=null; // <-- cant call add later on lines
順便說一句,如果您用任何其他參數調用構造函數,它甚至都不會起作用,因為您根本不會初始化行向量。
我不知道您到底想做什么,但是您可以將字段定義更改為
public Vector<Long> lines = new Vector<Long>();
然后刪除contructor中的else。
您從未通過在代碼中調用new Vector<Long>()
來創建Vector的實例。 此外,如果line == 0
則將類變量lines
設置為null
。
您的代碼應如下所示:
public class Pair {
public long nr;
public Vector<Long> lines = new Vector<long>();
public Pair(long ap, long line){
this.nr=ap;
if (line!=0) lines.add(linie);
}
public void create (long line){
nr++;
if (line!=0) lines.add(linie);
}
}
您的lines
向量永遠不會初始化。 用非0
的值調用構造函數也會引發NullPointerException。
您可以將字段聲明更改為Vector<Long> lines = new Vector<Long>();
或調用lines = new Vector<Long>();
在構造函數的開頭,如果第二個參數的值為0
,則不執行任何操作。
首先,我不確定類的名稱是否與行為匹配。 諸如nr
名稱使使用代碼非常困難。 考慮將其重命名為更有意義的名稱。
關鍵是您永遠不會創建Vector對象,而僅創建引用。
所以我會讓你的構造函數這樣做:
public Pair(long ap, long line){
this.nr=ap;
lines = new Vector<Long>();
if (line!=0) lines.add(line);
}
行的構造函數丟失。
在行的定義或Pair的構造函數中,您必須初始化行:
lines = new Vector<Long>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.