2014-11-01 5 views
-1

Я новичок в Java и мне нужно выяснить, как получить доступ к ArrayList из другого класса.Как получить доступ к ArrayList другого класса

У меня есть три класса: Market, StockEntry и Print

Я назвал метод печати класса печати от рынка и печать класса получить ссылку на ArrayList из StockEntry класса, но ничего не печатает. Смотрите ниже:

рынке Class

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

Ваш класс печати должен иметь действительную ссылку на объект StockEntry, возможно, передан в конструктор Print, и это позволит ему вызывать методы в StockEntry, включая методы, позволяющие ему получать информацию о хранящихся им данных. То, что вам не следует делать, это создать новый объект StockEntry внутри Print, так как если вы это сделаете, он не будет содержать данные, добавленные в другую StockEntry, используемые в вашем основном классе.

Обратите внимание, что ваш метод addStockOfItems сломана:

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

Вы хотите создать новый экземпляр Fruit внутри этого метода и не изменить ни одного существующего экземпляра 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

Если вы хотите распечатать список фруктов, у вас должна быть действительная ссылка. Таким образом, вы, вероятно, можете выявить метод getter в классе StockEntry и в вашем классе Market, при вызове метода печати передайте ссылку, которую вы имеете.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 объект, фактически, метод «toString()» вызывается автоматически, который возвращает строку для печати.

Просьба представить свой класс фрукты первый, так как вы код:

System.out.println(fruit); 

Если вы не реализовали ToString() для класса Fruit, адрес будет напечатан как:

[email protected] 

Or , если вы переопределите toString(), но не выполнили его тщательно, возникнут проблемы

Смежные вопросы