如果您想直接解决问题,请跳过此段落。作为实践,我正在尝试编写一个模拟经济的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();
}
}
P.S。不要告诉我记录是多么糟糕。我知道。
答案 0 :(得分:0)
将ServiceProvider
的实例作为参数传递给grapher
构造函数,然后它可以将其作为参数传递给getCompanyData()
。
由于实例是在grapher
类之外创建的,因此grapher
无法使ServiceProvider
实例使用,除非您将该实例移交给{{1} }}
BTW,请确保您对grapher
ArrayList
中的grapher
所做的一切都不做改变。如果你这样做,你将在ServiceProvider
中进行更改(因为它只是对同一底层ArrayList
的引用)。这可能不是你想要做的。如果您确实需要更改它,请复制并使用该副本。
答案 1 :(得分: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.
}
}
}
答案 2 :(得分:0)
您的grapher类正在尝试使用start类中的变量(您正在调用存在于start类中的变量s),而不会引用该变量。为了让grapher访问该实例,您必须将它作为构造函数中的参数传递给grapher类:
public grapher(ServiceProvider serviceProvider) {
records = serviceProvider.getRecords();
}
在getCompanyData方法中,使用类变量记录而不是s。