我的对象ArrayList不打印出我想要的Object属性

时间:2014-06-20 20:44:21

标签: java object arraylist

我有一个对象的ArrayList。物体是花朵。将鲜花添加到鲜花列表后,我想打印出每个鲜花的名字。每当我加一朵花,我就给这个花命名。假设我添加了三朵名为“玫瑰”,“郁金香”和“水仙花”的花。当我运行迭代ArrayList的函数时,我得到的就是三个Daffodils。如果我添加五朵花,它会显示五朵花,但它们都有我添加的最后一朵花的名字。这是我的主要课程:

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以将其显示给用户。谢谢你的任何建议。

2 个答案:

答案 0 :(得分:2)

有几件事。首先,您不应将其设置为静态:

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的实例,而不是类flowerClass):

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

public String getName(){
    return flowerName;
}

然后遍历flowerClass的实例

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

答案 1 :(得分:0)

这是因为你的setter和getter方法以及成员变量&#39; name&#39;是静态的。因此,每当你设置花的名字时,你基本上都会覆盖以前花的名字。由于所有对象只有一个名称。所有对象基本上都指向同一个名称。