2017-09-20 1 views
0

안녕하세요 BlueJ의에 의해 JAVA 함께 일하고 있어요에 사용되는 값을 업데이트하지 최종 변수를 생성하기위한 나는 아래의 코드와 함께 문제가있어 :자바 방법은

public class License { 

    private String lastName = "Null"; 
    private final String ID_NUM = generateIDNumber(); 
    private static int ID_GEN = 33333; 

    public License(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    private String generateIDNumber() { 
     String firstLetter = getLastName().substring(0,1); 
     String idNumber = String.format("%d", ID_GEN) + "-" + firstLetter;      firstLetter; 
     ID_GEN += 1; 
     return idNumber; 
    } 
} 

그래서 내가 넣어 입력란에 성을 입력하면 프로그램은 숫자
을 생성해야합니다.이 번호는 5 자리 숫자와 입력 된 성의 첫 글자로 구성됩니다.

그러나, generateIDNumber()에 사용 lastName의 값은 새로 입력 입력,
내가 getLastName()을 실행할 때, 그것은 업데이트 된 입력을 얻을 수 있지만 업데이트하기 아니다. I 입력 "제임스"generateIDNumber()firstLetter의 값과 lastName가 여전히 "제임스"에 대한 "NULL"이 아닌 "33333-J"에 대한 "33333-N"해도 말하면


.

왜인가요? 미리 감사드립니다.

+0

ID_NUM 특성을 클래스 수준 (템플릿 수준)에서 설정하고 개체 수준이 아니라 (생성자 실행 후 완료) ID_NUM 특성을 설정합니다. –

답변

3

생성자가 실행되기 전에 ID_NUM을 설정 중이므로 lastName은 여전히 ​​"Null"입니다. 용액 생성자 내에 설정한다 : 사이드 참고로

private final String ID_NUM; 

public License(String lastName) { 
    this.lastName = lastName; 
    this.ID_NUM = generateIDNumber(); 
} 

가 CONSTANT_CASE static final 변수가 예약되어야한다. 귀하의 변수는 해당 카테고리에 속하지 않습니다.