2014-06-20 55 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類名應以大寫字母開頭

相關問題