2014-11-01 151 views
-1

我是Java新手,需要弄清楚如何從另一個類訪問ArrayList。如何訪問另一個類的ArrayList

我有三類:MarketStockEntryPrint

我從市場調用打印類的打印方法和打印類從StockEntry類獲得的ArrayList的參考,但它不顯示任何信息。請看下圖:

市場類

public class Market { 
    StockEntry stock; 
    Print print; 

    Market() { 
     stock = new StockEntry(); 
     print = new Print(); 
    } 

    void addStock (String itemName,String name, int quantity, int price) { 
     stock.addStockOfItems(itemName, name, quantity, price); 
    } 

    void print() { 
     print.pr(); 
    } 
} 

StockEntry類

import java.util.ArrayList; 

public class StockEntry { 
    Fruit fruit; 
    ArrayList<Fruit> fruitList ; 

    StockEntry() { 
     fruit = new Fruit(); 
     fruitList = new ArrayList<Fruit>(); 
    } 

    void addStockOfItems(String itemName,String name, int quantity, int price) { 
     fruit.enterTheDetail(name, quantity, price); 
     fruitList.add(fruit); 
    } 
} 

打印類

import java.util.ArrayList; 

public class Print { 
    StockEntry stock; 
    ArrayList<Fruit> fruitList; 

    Print() { 
     fruitList = new ArrayList<Fruit>(); 
    } 

    void pr() { 
     for (Fruit fruit : stock.fruitList) { 
      System.out.println(fruit); 
     } 
    } 
} 

有人可以幫我弄清楚爲什麼這不起作用嗎?

回答

0

您的Print類將需要對StockEntry對象的有效引用,可能傳遞給Print的構造函數,這將允許它調用StockEntry上的方法,包括允許其獲取有關其數據的信息的方法。你不應該做的是在Print中創建一個新的StockEntry對象,因爲如果你這樣做,它不會保存添加到你的主類中使用的其他StockEntry的數據。

請注意,您的addStockOfItems方法被打破:

void addStockOfItems(String itemName,String name, int quantity, int price) { 
     fruit.enterTheDetail(name, quantity, price); 
     fruitList.add(fruit); 
} 

你會希望這個方法的內部創建一個新的水果的實例,而不是改變一個現有水果的實例。否則,ArrayList將包含對單個Fruit實例的多個引用。


例如:

SimpleMarket.java

// imports 

public class SimpleMarket { 
    private SimpleStockEntry stockEntry; 
    private SimplePrint print; 

    public SimpleMarket() { 
     stockEntry = new SimpleStockEntry(); 
     print = new SimplePrint(stockEntry); 
    } 

    public void addData(String datum) { 
     stockEntry.addStock(datum); 
    } 

    public void print() { 
     print.print(); 
    } 

    public static void main(String[] args) { 
     SimpleMarket market = new SimpleMarket(); 
     market.addData("Fe"); 
     market.addData("Fi"); 
     market.addData("Fo"); 
     market.addData("Fum"); 
     market.print(); 
    } 
} 

SimpleStockEntry.java

public class SimpleStockEntry { 
    private List<String> myList = new ArrayList<>(); 

    public void addStock(String datum) { 
     myList.add(datum); 
    } 

    public List<String> getMyList() { 
     return myList; 
    } 
} 

SimplePrint.java

class SimplePrint { 
    private SimpleStockEntry stockEntry; 

    public SimplePrint(SimpleStockEntry stockEntry) { 
     this.stockEntry = stockEntry; 
    } 


    public void print() { 
     for (String item : stockEntry.getMyList()) { 
     System.out.println(item); 
     } 
    } 

} 

請注意,我的代碼是不是爲您分配一個直接的答案,而是簡化向您展示的是什麼需要做的概念。

0

如果你想打印果子列表,你應該有有效的參考。所以你可能會在StockEntry類和Market類中暴露一個getter方法,同時調用print方法傳遞你的引用,StockEntry像下面,然後從stockEntry印刷方法得到所有的水果,在它們之間迭代

public class Market 
{ 

StockEntry stock ; 

Print print; 

Market() 
{ 
    stock = new StockEntry(); 

    print = new Print(); 
} 


void addStock (String itemName,String name, int quantity, int price) 
{ 
    stock.addStockOfItems(itemName, name, quantity, price); 


} 

void print() 
{ 


    print.pr(stock); 

} 


} 

二等

import java.util.ArrayList; 

public class StockEntry 
{ 
    Fruit fruit ; 

    ArrayList<Fruit> fruitList ; 

    StockEntry() 
    { 

    fruit = new Fruit(); 

    fruitList = new ArrayList<Fruit>(); 


    } 

    public ArrayList<Fruit> getFruitList() { 
    return fruitList; 
    } 

    void addStockOfItems(String itemName,String name, int quantity, int price) 
    { 


     fruit.enterTheDetail(name, quantity, price); 

     fruitList.add(fruit); 



    } 

三等

public class Print 
{ 



    void pr(StockEntry stock){ 

     for(Fruit fruit : stock.getFruitList()){ 

     System.out.println(fruit); 

    } 


} 

} 
0

知道的第一件事是,當你的println是一個Object時,實際上,方法 「toString()」被自動調用,它返回一個字符串來打印。

請先提供您的水果類,因爲你的代碼是:

System.out.println(fruit); 

如果沒有實施類水果中的toString(),地址將被打印出來,如:

[email protected] 

或者,如果你重寫toString()但沒有仔細實現它,會發生問題

相關問題