2012-05-13 8 views
-3

문제를 직접 해결하려면이 단락을 건너 뜁니다. 실습으로서, 나는 경제를 시뮬레이트하는 자바 프로그램을 작성하려고 노력하고 있으며, 그 목적을 위해 회사 클래스를 작성했다. 아이디어는, 말하자면, 12 개를 가지고, 그들의 수입을 정규 변이 함수로 감싸는 것이고, 그것은 경제 일 것입니다.다른 클래스의 인스턴스 변수에 액세스

저는 JFreeChart를 사용하여 회사의 출력을 그래프로 나타 내기 위해 별도의 클래스를 작성했습니다. 그러나 ArrayList에 액세스 할 수 없어 그래프 클래스에서 매년 금액을 씁니다. 이 작업을 수행하는 가장 좋은 방법은 getter를 사용하는 것이지만 작동하지 않는 것 같아서 조언이 맞다면 예제를 제공해 주시겠습니까? 감사!

회사 :

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

해당 코드가있는 경우 문제의 정도는 어느 정도입니까? 질문과 관련된 * 코드가 아닌 코드는 모두 편집하고 삭제하십시오. 'ClassA','ClassB' 등의 예제 코드를 제공하면 더 좋습니다. [SSCCE] (http://sscce.org) – Bohemian

답변

0

ServiceProvider의 인스턴스를 grapher 생성자에 인수로 전달하면 getCompanyData()의 인수로 전달할 수 있습니다.

인스턴스가 grapher 클래스 외부에서 생성되었으므로 grapher으로 인스턴스를 넘기지 않는 한 의 인스턴스가 ServiceProvider 인 작업 방법이 없습니다.

동의어 (ArrayList)를 바꾸지 말고 grapher에 넣으십시오. 변경하려는 경우 ServiceProvider에서 변경합니다 (모두 동일한 기본 내용 인 ArrayList을 참조하기 때문에). 그것은 아마도 당신이하고 싶은 것이 아닙니다. 변경해야 할 경우 사본을 만들어 사본과 함께 작업하십시오.

+0

죄송합니다. 나는 오래 견딘 경향이있다. –

0

하는없이 귀하의 그래퍼 클래스가 시작 클래스 (당신이 시작 클래스에 존재하는 변수의 호출을하고 있습니다)에서 변수를 사용하려고

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. 
     } 
    } 

} 
+0

솔루션의 문제점은 무엇입니까? –

0

을 다음과 같이 귀하의 그래퍼 클래스는해야한다 변수에 대한 참조. 의 getCompanyData 방법에

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

을 대신의의 클래스 변수 레코드를 사용 : 해당 인스턴스에 액세스 할 수 그래퍼 위해서는, 당신은 생성자의 paramater로 그래퍼 클래스로에 통과해야합니다.

관련 문제