簡體   English   中英

Java 數組列表返回 0 值

[英]Java array list returning 0 value

我創建了一個這樣的類,如您所見,它包含一堆數組列表。 我一直在使用 add.. 方法設置數組,然后使用 get.. 檢索它,例如,當我嘗試 System.out.println numberofcitizen 時,它返回 0。請注意,我已經在另一個類中實例化了該類以設置值。

public int numberOfCitizen;

private final ArrayList<Integer> citizenid = new ArrayList<>();
private final ArrayList<String> citizenName = new ArrayList<>();
private final ArrayList<Integer> citizenWaste = new ArrayList<>();
private final ArrayList<Float> longitude = new ArrayList<>();
private final ArrayList<Float> latitude = new ArrayList<>();
private final ArrayList<String> address = new ArrayList<>();

public void working() {
    System.out.println("executing fine");
}

public void setnoOfcit(int number) {
    this.numberOfCitizen = number;

}

public int getnumber() {
    return this.numberOfCitizen;
}

public void addCitizenId(int citizen) {
    citizenid.add(citizen);
}

public int getCitizenid(int i) {
    int citId = citizenid.get(i);
    return citId;
}

public void addCitizenName(String citizenname) {
    citizenName.add(citizenname);
}

public String getCitizenName(int i) {
    return citizenName.get(i);
}

public void addCitizenWaste(int waste) {
    citizenWaste.add(waste);
}

public int getCitizenWaste(int i) {
    return citizenWaste.get(i);
}

public void addLatitude(float lat) {
    latitude.add(lat);
}

public float getLat(int i) {
    return latitude.get(i);
}

public void addlng(float lng) {
    longitude.add(lng);
}

public float getlng(int i) {
    return longitude.get(i);
}

com.graphhopper.jsprit.core.problem.VehicleRoutingProblem.Builder vrpBuilder = com.graphhopper.jsprit.core.problem.VehicleRoutingProblem.Builder.newInstance();

public void runVPRSolver() {
    System.out.println(numberOfCitizen);
    System.out.println(getCitizenName(0));
    //create a loop to fill parameters 

可能的問題來源:

numberOfCitizen是一個您似乎永遠不會改變的成員屬性。 如果您希望它表示列表中的元素數量,請使用citizenName.size()或在添加方法之一中增加numberOfCitizen的值。

設計缺陷:

你的設計理所當然地認為你的另一個類總是正確地使用那個類。 無論何時您或某人使用該類,他都必須確保手動添加每個元素。 這添加了可以在您的類中分組的代碼,這將更清晰且更易於維護。

因此,而不是像這樣的幾個添加方法:

addCitizenid();
addCitizenName();
addCitizenWaste();
addLongitude();
addLatitude();
addAddress();

設計一個包含這些元素的其他Citizen類,並使用該類的單個實例列表。 這樣你只能使用一種方法:

private List<Citizen> citizenList = new ArrayList<>();

public void addCitizen(Citizen c) {
     /*Add element in your list*/
     citizenList.add(c);
}

這種編程方法稱為“封裝” ,您可以在此處閱讀

您需要在添加方法中增加numberOfCitizen 例如:

public void addCitizenId(int citizen){
    citizenid.add(citizen);
    numberOfCitizen++;
}

我還建議將您的變量封裝到對象中,因此創建一個公民類:

public class Citizen {
    private Integer id;
    private Integer name;
    private Integer waste;
}

並將您的變量更改為對象的 ArrayList:

ArrayList<Citizen> citizens;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM