我是Java的新手,需要弄清楚如何从另一个类访问ArrayList。
我有三个课程:Market
,StockEntry
和Print
我从Market调用了Print类的print方法,而Print类从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 Class
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 :(得分: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);
}
您需要在此方法中创建一个新的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);
}
}
}
请注意,我的代码不是您作业的直接答案,而是简化以向您展示您需要做的概念。
答案 1 :(得分:0)
如果您想打印水果列表,您应该有有效的参考。所以你可能会在StockEntry类和Market类中公开一个getter方法,同时调用print方法传递你所拥有的引用,如下面的StockEntry,然后从print方法中的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);
}
}
}
答案 2 :(得分:0)
首先要知道的是,当你打印一个Object时,实际上是方法 自动调用“toString()”,返回要打印的字符串。
请提供您的Fruit课程,因为您的代码是:
System.out.println(fruit);
如果你没有为类Fruit实现toString(),地址将打印如下:
Fruit@15db9742
或者,如果覆盖toString()但没有仔细实现,则会出现问题