2014-06-20 56 views
0

我有一个ArrayList的对象。对象是鲜花。在鲜花列表中添加鲜花后,我想打印出每朵鲜花的名字。每当我添加一朵花,我就会给这朵花命名。假设我加了三朵名为“玫瑰”,“郁金香”和“水仙花”的花。当我运行遍历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以将其显示给用户。感谢您的任何建议。

+5

从'flowerClass'中的任意位置移除'static'关键字 –

+0

将您的for循环更改为'for(flowerClass o:flowerPack)'并从每一个移除静态e – A4L

+1

可能的重复[在现代语言中,'静态'在Java中意味着什么?](http://stackoverflow.com/questions/2649213/in-laymans-terms-what-does-static-mean-in-java ) – femtoRgon

回答

2

几件事情。首先,你不应该设置此为静态:

public static String flowerName = null; 

为静态变量,flowerClass的所有实例将具有相同的flowerName。它应该是:

public String flowerName; // null is implicit 

其次,你的循环:

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

你在做什么在这里呼吁类flowerClass,不flowerClass的实例getName()。他们只是因为你将这些方法标记为静态而编译的原因。

从您的getter和setter静态的(再次要访问实例flowerClass的,不是类flowerClass):

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

public String getName(){ 
    return flowerName; 
} 

然后遍历实例flowerClass的

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

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

0

(1)

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

在你没有调用o.getName()你for-each循环,它永远不会遍历所有flowerClass对象...它应该是:

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

(2)

a。删除增变器和访问器'static

b。 flowerClass中的所有实例变量都不应该有staticstatic变量属于类而不是拥有的对象。

(3)建议重命名flowerClassFlowerClass。 Java类名应以大写字母开头

相关问题