簡體   English   中英

我的ArrayList對象沒有打印出我想要的Object屬性

[英]My ArrayList of Objects isn't printing out the Object attribute I want

我有一個對象的ArrayList。 對象是花。 將花朵添加到花朵列表之后,我想打印出每朵花朵的名稱。 每當我添加一朵花時,我都會給花起一個名字。 假設我添加了三朵花,分別命名為“玫瑰”,“郁金香”和“水仙花”。 當我運行遍歷ArrayList的函數時,我得到的只是三個水仙花。 如果我添加五朵花,它將顯示五朵花,但是所有花都具有我添加的最后一朵花的名稱。 這是我的主要課程:

import java.util.Scanner;
import java.util.ArrayList;

public class mainClass {

    static ArrayList<flowerClass> flowerPack = new ArrayList<flowerClass>();


    public static void main(String[] args){
        Scanner input = new Scanner(System.in);

        while(true){
            System.out.println("1. Add flower to flowerpack.");
            System.out.println("2. Display the flowers in the flowerpack.");

            int userChoice = input.nextInt();

            switch(userChoice){
            case 1:
                addFlower();
                break;
            case 2:
                displayFlowers();
                break;
            }
        }
    }

    public static void addFlower(){
        Scanner input = new Scanner(System.in);
        System.out.println("What is the flower's name?");
        String flowerName = input.nextLine();
        flowerPack.add(new flowerClass(flowerName));
    }

    public static void displayFlowers(){

        for (Object o: flowerPack){
            System.out.println(flowerClass.getName());
        }
    }
}

這是我的flowerClass:

    public class flowerClass {

    public static int numberOfFlowers = 0;
    public static String flowerName = null;
    static String flowerColor = null;
    static int numberThorns = 0;
    static String flowerSmell = null;

    flowerClass(String desiredName){
        flowerName = desiredName;
        numberOfFlowers++;
    }

    public static void setName(String desiredName){
        flowerName = desiredName;
    }

    public static String getName(){
        return flowerName;
    }
}

我嘗試使用對象數組而不是ArrayList。 我可以獲得它來顯示每個單獨的flowerClass對象的唯一地址,但是我永遠無法成功訪問每個對象的flowerName來將其顯示給用戶。 感謝您的任何建議。

有幾件事。 首先,您不應將此設置為靜態:

public static String flowerName = null;

作為靜態變量,flowerClass的所有實例將具有相同的flowerName。 它應該是:

public String flowerName;  // null is implicit

二,你的循環:

for (Object o: flowerPack){
    System.out.println(flowerClass.getName());
}

您在這里所做的是在flowerClass類上調用getName() ,而不是flowerClass的實例。 他們之所以這樣做,甚至只是編譯是因為您將這些方法標記為靜態。

從getter和setter中刪除static(同樣,您想訪問flowerClass的實例 ,而不是class flowerClass的實例 ):

public void setName(String desiredName){
    flowerName = desiredName;
}

public String getName(){
    return flowerName;
}

然后遍歷flowerClass的實例

for (flowerClass flower: flowerPack){
     System.out.println(flower.getName());
}

這是因為您的setter和getter方法以及成員變量“ name”是靜態的。 因此,無論何時設置花朵的名稱,基本上都將覆蓋前一朵花朵的名稱。 因為所有對象只有一個名稱。 您的所有對象基本上都指向相同的名稱。

暫無
暫無

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

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