2012-07-09 7 views
0

작업 표를 만들고 내용을 조작하려고합니다. 나는 이해하지 못하는 버그로 달려 들고 있으며, 도움에 대해 매우 감사해야한다. 나는 질문의 길이에 대해 애도하지만, 가능한 한 많은 세부 사항을 가져 오려고 노력하고있다.새 레코드가 추가 될 때 ArrayList 레코드가 잘못 업데이트되었습니다.

클래스 tasksRepository 저장 목록으로 배열 클래스 taskDef으로 구성되는 기록. setTask() 및 getTask 메서드에는 ArrayList 클래스의 add() 및 get() 메서드가 들어 있습니다.

taskDef 개체의 매개 변수는 로컬 설정 메서드를 사용하여 만듭니다. 다음은 그러한 메소드에 대한 예제입니다. 전달 된 매개 변수가 저장된 값과 다른 경우, 저장된 값과 이벤트가 로그 레코드에 추가됩니다. 어떤 경우 든 성공 플래그가 다시 리턴됩니다.

public static Boolean setProjectNumber(String projectNumberI) 
{ // All the 
    if (projectNumberI != projectNumber) 
    { 
     projectNumber = projectNumberI; 
     logAccumulator = logAccumulator + "; project number (" + projectNumberI + ")"; 
    } 
    return true; 
} 

private static void setLog() 
{ // When all the parameters are set, the log parameter is updated with time tag 
    String t = formatterFull.format(GregorianCalendar.getInstance().getTime()); 
    log = log + "\n" + t + ": " + logAccumulator;  
} 

클래스 tasksTableProcessing는 작업 조작이 포함되어 있습니다. 다음은 생성자를 포함합니다. 그것은 더 간단한 형태로 시작되었지만 수사 중에 나는 그것을 바 꾸었습니다. taskstatus은 문자열을 반환하는 ENUM입니다. 방법 의 getLog()는 단순히 다음은 로그 인 로그 필드

public tasksTableProcessing() 
{ // constructor. Creates the tableRepository object with test records 
    tasksRepository.clearDb(); 

    taskDef task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started(), "1", "false", "false"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 0: \n" + tasksRepository.getTask(0).getLog()); 

    task = null; 
    task = new taskDef ("P1000", "O1", taskStatus.started(), "2", "false", "true"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 1: \n" + tasksRepository.getTask(1).getLog()); 

    task = null; 
    task = new taskDef ("P2000", "O2", "closed", "63", "true", "false"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 2: \n" + tasksRepository.getTask(2).getLog()); 

    task = null; 
    task = new taskDef ("P2000", "O2", "closed", "64", "true", "true"); 
    tasksRepository.addTask (task); 
    System.out.println("\nLog 3: \n" + tasksRepository.getTask(3).getLog()); 
} 

에게 반환합니다. 새 레코드가 도입되면 모든 이전 레코드가 업데이트됨을 보여줍니다.

로그 0

2012년 9월 7일 10시 21분

:; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작)

로그인 1 :

2012년 9월 7일 10시 21분 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); (참) 배달 플래그

로그인 2 :

2012년 9월 7일 10시 21분 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); 배달 플래그 (참)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); 배달 플래그 (true); 프로젝트 번호 (P2000); 태스크 (태스크 63); 작업 ID (63); 소유자 (O2); 상태 (닫힘); 임계 경로 (true); (false)를 전달 플래그

로그 3

2012년 9월 7일 10시 21분 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); 배달 플래그 (참)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); 배달 플래그 (true); 프로젝트 번호 (P2000); 태스크 (태스크 63); 작업 ID (63); 소유자 (O2); 상태 (닫힘); 임계 경로 (true); 배달 플래그 (거짓)

09/07/2012 10:21 :; 프로젝트 번호 (P1000); 작업 (작업 1); 작업 ID (1); 소유자 (O1); 상태 (시작됨); 작업 (작업 2); 작업 ID (2); 배달 플래그 (true); 프로젝트 번호 (P2000); 태스크 (태스크 63); 작업 ID (63); 소유자 (O2); 상태 (닫힘); 임계 경로 (true); 배달 플래그 (false); 태스크 (태스크 64); 작업 ID (64); (참) 배달 플래그 메소드 서명을 감안할 때

+0

멋진 배경이지만 어디에 문제가 있는지 잘 모르겠습니다. – shem

+0

taskDef의 생성자 및 tasksRepository.addTask (task)의 정의 코드를 표시 할 수 있습니까? – Sabbath

답변

1

, 당신은 정적 필드가 아닌 인스턴스 필드와 같은 TaskDefs의 구성원을 저장합니다. 정적 필드는 TaskDef 클래스 자체의 필드이며 특정 TaskDef 인스턴스의 필드는 아닙니다.

instance and class members에 대한 Java 자습서를 읽으십시오.

+0

정말 고마워요 : (일부 컴파일 문제로 인해 과거에 추가 된) 정적 선언을 제거하면 문제가 완전히 해결되었습니다. – user1511360

관련 문제