2014-05-09 12 views
-5

아이디어는 프로그램 내부에 직원을 추가 한 다음 다른 직원을 추가하는 것입니다. 나는이 프로그램이 실행되면 저장된 실제 프로그래밍 코드의 내부 변수를 저장하는프로그램에 무제한의 직원을 추가하려면 어떻게합니까?

public class Employee { 
     private String name; 
     private int Id; 

     public Employee(String empName, int empId) { 
      name = empName; 
      Id = empId; 
     } 
    } 

    ... 

    Employee Jack = new Employee("Jack",001); 

내가 튜토리얼과 예제를 통해 오는하고있는 모든 코드 건너와하지 않은이 작업을 수행하는 방법을 연구를 통해

.

그러나 이것은 내가하려고하는 것이 아닙니다. 사용자 입력으로 이름을 입력하고 프로그램에 저장하여 입력 한 이름을 저장 한 다음 다른 이름을 추가 할 수 있기를 원합니다. 그래서 결국 사용자 입력에 의해 직원 목록이 작성됩니다.

어떤 조언을

감사

+2

'무제한'이라고 생각하면 너무 많이 들리지 않습니다 .--) –

+0

당신은 스스로 말했습니다. 목록을 사용하십시오. – keyser

+2

정말 적절한 연구가 부족하거나 적어도 다음과 같은 적절한 자습서를 작성해야합니다. http://docs.oracle.com/javase/tutorial/collections/intro/ – maczikasz

답변

0

Java Collections을 살펴보십시오. 루이지 (Luiggi)와 같은 목록을 사용할 수도 있고지도를 사용하여 이름이나 ID로 찾아 볼 수도 있습니다.

import java.util.HashMap; 
import java.util.Map; 

public class Employee 
{ 
    private final String name; 
    private final int Id; 
    private static Map<String, Employee> employeesByName = new HashMap<String, Employee>(); 
    private static Map<Integer, Employee> employeesById = new HashMap<Integer, Employee>(); 

    public Employee(String empName, int empId) 
    { 
    name = empName; 
    Id = empId; 
    employeesByName.put(name, this); 
    employeesById.put(Id, this); 
    } 

    public static Employee getEmployeeByName(String name) 
    { 
    return employeesByName.get(name); 
    } 

    public static Employee getEmployeeById(int Id) 
    { 
    return employeesById.get(Id); 
    } 
} 
1

동적으로 크기에서 성장 허용하는 List을 사용하여 좋은 것입니다.

List<Employee> employeeList = new ArrayList<Employee>(); 
Employee employee; 
employee = new Employee("Luiggi", 1); 
employeeList.add(e); 
employee = new Employee("user3620639", 2); 
employeeList.add(e); 
System.out.println(employeeList); 
2

옵션 1 :

당신은 당신이 몇 가지 자료 구조 (ArrayList를,지도, 세트)에 직원을 저장할 수있는 프로그램의 단일 실행에 대한 직원의 목록을 유지하십시오. 데이터 구조의 선택은이 Employee 컬렉션에서 수행 할 작업에 따라 다릅니다.

예 : 목록을 사용하여

List<Employee> employeeCollection = new ArrayList<Employee>(): 
employeeCollection.add(new Employee("Kakarot" , 1)); 
employeeCollection.add(new Employee("John Doe" , 2)); 

옵션 2 : 당신이 그런 방식으로 데이터를 유지하려면 당신이 프로그램하고 출시를 종료에도 사용 가능한 모든 시간 (다시 한 번) 다음 옵션을 사용할 수 있습니다.

1) 데이터를 사람이 읽을 수있는 형식으로 텍스트 파일에 저장합니다. 예 :

Kakarot|33 
John Doe|2 

이제 프로그램에서이 파일을 읽고 이전에 삽입 된 모든 직원의 목록을 구성합니다. 일부 Dataase 예에서

2) 데이터 저장 : 오라클, MySQL을 등

3) 디스크에있는 파일에 직원의 목록을 직렬화합니다. 그리고 프로그램 시작시 파일을 읽으십시오.

+0

Theres 또한 옵션 3 (내 의견으로는 텍스트 파일보다 더 쉽게 파싱 할 필요가 없다). 목록을 serialise하십시오 –

+0

예 나는 addig를 생각하고 있었지만 객체 계층 구조와 다른 제약에 따라 복잡해졌습니다. 그러나 확실히 고려해야 할 사항 – Kakarot

0

이 질문에 대한 다른 답변은 목록 측면을 고려합니다. 사용자 입력과 관련하여 몇 가지 옵션이 있습니다.

:

public static void main(String[] args) { 

    int i = 0; 
    List<Employee> empList = new ArrayList<Employee>(); 

    do { 
     String username = JOptionPane.showInputDialog("Insert new employee name"); 
     i++; 

     empList.add(new Employee(username, i)); 
    } while (/*some condition for continued execution*/); 

    System.out.println(empList); 
} 

그냥 텍스트 기반 명령 줄 인터페이스를 사용하는 경우, 당신은 BufferedReader을 사용하십시오 : 당신은 GUI 방식을 사용하려면

, 당신은 사용자 입력을 얻기 위해 JOptionPane.showInputDialog을 사용할 수 있습니다

public static void main(String[] args) { 
    int i = 0; 
    List<Employee> empList = new ArrayList<Employee>(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

    do { 
     String username = reader.readLine(); 
     i++; 

     empList.add(new Employee(username, i)); 
    } while (/*some codition for continued execution*/); 

    System.out.println(empList); 
} 
관련 문제