2017-12-07 3 views
0

내가해야 할 일에 문제가 있습니다. 클래스 회사를 만들고 Employee 클래스 객체에 대한 몇 가지 메소드 (예 : 고용, 화재 등)를 작성해야합니다.Java의 ArrayList에서 자체 메서드를 사용하는 방법은 무엇입니까?

public class Company{ 
    ArrayList <Employee> alist= new ArrayList<Employee>(); 

    public void hire(Employee e) { 
     int i=0; 
     boolean k=false; 
     while(i<alist.size()) { 
      if (e.getLastName().equals(alist.get(i).getLastName())) { 
       k=true; 
       i++; 
      } 
     } 
     if (k==false) alist.add(e); 
     else System.out.print("Employee already exists"); 
    } 
} 

public class Employee{ 
    protected String lastname; //protected for subclasses 
    protected double jobposition; 
    public Employee(String lastname,double jobposition) { 
     this.lastname=lastname; 
     this.jobposition=jobposition; 
    } 
    public String getLastName() { 
     return lastname; 
} 

그리고 직원 확장 서브 클래스 : 그 내 클래스와 메소드입니다

public class OfficeWorker extends Employee { 
    float pay, bonus; 
    public OfficeWorker(String lastname,double jobposition,float pay,float bonus) { 
     super(lastname,jobposition); 
     this.pay=pay; 
     this.bonus=bonus; 
    } 
} 

내가이 일을 ArrayList를 사용하고 싶었다는하지만, 메인 클래스에 충돌 나는 "방법을 메시지가 고용 (Employee)은 ArrayList 유형에 대해 정의되지 않았습니다. "

public static void main(String[]args) { 

    ArrayList <Employee> list = new ArrayList <Employee>(); 
    Employee e1 = new OfficeWorker("Smith",0.5,2000,50); 
    list.hire(e1); 

} 

이렇게 할 수없는 이유는 무엇입니까?

+4

작성한'hire' 메소드는'Company' 클래스에 있습니다. 왜 그것이'ArrayList <>'에있을 것으로 기대합니까? 이것이 무엇을 기대합니까? – David

+0

'회사'는 채용을 수행하는 클래스입니다. 직원을 목록에 추가 하시겠습니까? 그렇다면'list.add (e1)'로 끝난다. 당신이 정말로 가고있는 것이'Employee e1'을 고용 한'Company'를 만들고 그것을'Company' 인스턴스로 만든'ArrayList'에 추가하는 것입니다. – birryree

+1

'Company comp = new Company();와 같이'Company'의 인스턴스를 만들고'comp.hire (e1); '를 사용하여 Employee를 추가하십시오. 회사 클래스에 직원을 저장하는 목록이 이미 있습니다. – VPK

답변

0

귀하의 주요 방법이 있어야합니다 같은 :

이미 ArrayList <Employee> alist에서 Employee을 추가 클래스 Company의 방법 hire()을 쓴 것처럼
public static void main(String[]args) { 

    Company company = new Company(); 
    Employee e1 = new OfficeWorker("Smith",0.5,2000,50); 
    company.hire(e1); 
} 

.

Java ArrayList 클래스에서 고유 한 메서드를 만들 수있는 방법은 없습니다.

+0

내가 보지 못했던 분명한 실수처럼 보입니다. 지금은 정말 고마워요! – Weronika

+0

@Weronika, 초기 개발 단계에서 명백한 실수입니다. 내 대답이 당신의 문제를 해결하는 데 도움이된다면, 당신은 그것을 받아 들일 수 있습니다.해피 코딩 !!! – VPK

0

무엇이 일어나고있는 것은이 만들어지는 일단 Company 이미 가지고 당신이, 회사에 hire의 메소드를 호출 한 후, Company라는 개체를 만들고, 해당의, ArrayList 객체에 직접 고용 메서드를 호출하는 것입니다 그것 안에 ArrayList의 재산.

public static void main(String[]args) { 
    Company company = new Company(); 
    Employee e1 = new OfficeWorker("Smith",0.5,2000,50); 
    company.hire(e1); 
} 

희망 하시겠습니까?

0

ArrayList list = new ArrayList(); ArrayList에 대여 방법이 없습니다. 클래스에서 해당 메서드의 availabe 메서드에 액세스 할 수 있습니다. 또한 액세스 수정 자 및 메서드를 사용하는 위치에 따라 다릅니다.

직접

SomeClass.m(); 
0

대여() 메소드가 호출 할 수 정적 공개 방법에 대한 객체

SomeClass c=new SomeClass(); 
c.m(); 

개체 및 호출 방법을 만들 필요가 비 정적 공용 메서드에 액세스하려면 회사 클래스의 일부로 정의됩니다. 아래와 같아야합니다.

Company xyz = new Company(); 
xyz.hire(e1); 
관련 문제