-3

如果您想直接解决问题,请跳过本段。作为实践,我正在尝试编写一个模拟经济的 Java 程序,并为此编写了一个公司类。这个想法是让他们中的一打,将他们的收入包装成一个正态变量函数,这就是经济。

我编写了一个单独的类来使用 JFreeChart 绘制公司的输出。但是,我无法从绘图类访问我将每年的金额写入的 ArrayList。我知道最好的方法可能是使用吸气剂,但它似乎不起作用,所以如果这是你的建议,你能提供一个例子吗?谢谢!

公司:

public class ServiceProvider implements Company {
    //Variables


    public ArrayList getRecords(){
        return records;
    }

    public ServiceProvider(){
        money = 10000;
        yearID = 0;
        goodYears = 0;badYears = 0;
        records = new ArrayList();
        id++;
    }

    public void year() {
        yearID++;
        if(!getBankrupt()){
            spend();
        }
        writeRecords();
    }

    public void spend() {
        ...
    }

    public void printRecords() {
        for(int i=0;i<records.size();i++){
            String[] tmp = (String[]) records.get(i);
            for(String a:tmp){
                System.out.print(a+" ");
            }
            System.out.print("\n");


        }

    }

    public void writeRecords(){
        String[] toWrite = new String[2];
        toWrite[0] = String.valueOf(yearID);
        toWrite[1] = String.valueOf(money);
        records.add(toWrite);
    }

    public void writeRecords(String toWrite){
        String temp = "\n"+yearID+"   "+toWrite;
        records.add(temp);
    }

    public boolean getBankrupt(){
        boolean result = (money < 0) ? true : false;
        return result;
    }


}

我试图从以下位置访问它:

public class grapher extends JFrame {
    ArrayList records = s.getRecords();

    public grapher(){
        super("ServiceProvider");
        final XYDataset dataset = getCompanyData();
    }



    private XYDataset getCompanyData(){
        XYSeries series;
        for(int i=0;i<s.getRecords().length;i++){ //S cannot be resolved, it's instantiated in the main class.

        }
    }

}

主要类:

public class start {

    public static void main(String[] args) {
        ServiceProvider s = new ServiceProvider();
        for(int i=0;i<10;i++){
            s.year();
        }
        s.printRecords();

    }

}

PS不要告诉我记录是什么乱七八糟的。我知道。

4

3 回答 3

0

你的grapher类应该如下

public class grapher extends JFrame {

    public grapher(ServiceProvider s){
        super("ServiceProvider");
        final XYDataset dataset = getCompanyData(s);
    }


    private XYDataset getCompanyData(ServiceProvider s){
        XYSeries series;
        for(int i=0;i<s.getRecords().length;i++){ 
                  // Do Process of business logic.   
        }
    }

}
于 2012-05-13T03:06:28.870 回答
0

您的绘图员类正在尝试使用起始类中的变量(您正在调用起始类中存在的变量 s),而没有对该变量的引用。为了让grapher访问该实例,您必须将其作为构造函数中的参数传递给grapher类:

public grapher(ServiceProvider serviceProvider) {
     records = serviceProvider.getRecords();
}

在 getCompanyData 方法中,使用您的类变量记录而不是 s。

于 2012-05-13T03:07:51.527 回答
0

将 的实例ServiceProvider作为参数传递给grapher构造函数,然后它可以将其作为参数传递给getCompanyData().

由于实例是在grapher类之外创建的,因此除非您grapher将该ServiceProvider实例交给grapher.

ArrayList顺便说一句,确保无论你做什么grapher,你都不会改变它。如果这样做,您将在 中更改它ServiceProvider(因为它都只是对相同基础的引用ArrayList)。这可能不是你想要做的。如果您确实需要更改它,请制作一个副本并使用该副本。

于 2012-05-13T03:02:04.820 回答