2016-09-30 215 views
0
public class NetworkEntry { 
    private String name; 
    private int cost; 
    private StringListExt predList; 
    private StringListExt succList; 

public NetworkEntry(String nameval, int costval, String pred){ 
    name = nameval; 
    cost = costval; 
    predList = new StringListExt(); 
    succList = new StringListExt(); 
    predList.add(pred); 
} 

所以構造函數應該實例化predList和succList,同時在predList中添加紅色的字符串。但是,當我調用print來查看predList和succList中的內容時,pred會出現在它們兩個中。嘗試將字符串添加到一個字符串列表,但最終將字符串添加到兩個字符串列表。

而且StringListExt只是

protected static ArrayList <String> list; 


public StringList() { 
    list = new ArrayList <String>(); 
} 

回答

2

延期不要使用靜態

protected static ArrayList <String> list; 

如果你使用靜態的,這意味着,只會有這個變量之一 - 所有實例之間共享在JVM中。

https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

有時候,你想有一個適用於所有對象的變量。 這是用靜態修飾符完成的。在其聲明中使用了靜態修飾符的字段稱爲靜態字段或類 變量。他們與班級相關聯,而不是與任何 對象關聯。每個類的實例在內存中的一個固定位置共享一個類變量,即 。任何對象都可以更改 類變量的值,但也可以在不使用 創建類的實例的情況下操作類變量。