2017-12-13 17 views
0

예를 들어,이 클래스는 기본적으로 웹 사이트에 로그인 할 수있는 멤버를 만드는 Member라는 이름을 갖습니다. 이 객체의 인스턴스가 생성 될 때마다 생성자 내에서 5 가지를 초기화해야하며, 그 중 하나가 멤버십 번호입니다. 이 회원 번호는 고유해야합니다. 내가 가진 아이디어는 Member 객체가 생성 될 때마다 숫자에 더하기 1을 더하는 것입니다.오브젝트가 Java 내에서 작성 될 때마다 기존 숫자에 1을 더하는 방법은 무엇입니까?

public Member(String newEmail, int newMoney) 
    { 
    // Intialises the email. 
    email = newEmail; 
    // Intialises the membership number. 
    membershipNumber = 000; 
    membershipNumber =+ 001; 
    // Intialises the login status. 
    loginStatus = false; 
    // 
    companions = new ArrayList<Friend>(); 
    // Intialises the members money. 
    money = newMoney; 
    } 

의 LoginStatus, 동료과 비용을 무시하십시오

여기에 내 현재 코드입니다.

회원 번호의 기본값을 000으로 설정하고 +1을 추가했지만 모든 회원이 작성한 회원 번호는 회원 번호가 항상 중요하므로

public Member(String newEmail, int newMoney) 
    { 
    // Intialises the email. 
    email = newEmail; 
    // Intialises the membership number. 
    membershipNumber = membershipNumberTwo; 
    membershipNumberTwo =+ 001; 
    // Intialises the login status. 
    loginStatus = false; 
    // 
    companions = new ArrayList<Friend>(); 
    // Intialises the members money. 
    money = newMoney; 
    } 

그러나 회원 번호가 0

사람이 회원 번호를 만들어 나를 도울 수 항상이 일을 가지고

1. 내가 좋아하는 완전히 다른 필드를 추가하여 다른 방법을 시도 멤버가 생성자에서 생성 될 때마다 추가됩니까? 감사합니다. .

면책 성명 : 저는 Java의 초보자 수준입니다.

+0

정수에는 앞의 0이 필요하지 않습니다. 그냥'membershipNumberTwo + = 1; '을 사용하십시오. –

+0

어떤 데이터 유형이 membershipNumber입니까? 정수? –

+0

@ MasterYoda 감사합니다. 시도했지만이 두 멤버에는 MembersNumber 0이 있습니다. 예, Int입니다. – user8981199

답변

1

왜 숫자를 사용합니까? 대신 UUID를 사용하여 고유 한 membershipNumber를 만드십시오. 이것은 독창성을 유지하고 당신은 그것을 위해 열심히 일할 필요가 없습니다.

UUID class Java 5 이상이 번들로 제공됩니다.

임의의 UUID를 사용하면 randomUUID 메서드를 사용할 수 있습니다.


편집 : 당신은 동시성의 개체를 만들 계획하고 여전히 증가 MEMBERID를 원한다면, 그냥 정적 AtomicNumber를 저장하고 atomicNumber.incrementAndGet를 사용 ()는 '새로운'사용자 ID

참조를 얻을 수 있습니다 더 당신이 준 예에 관해서는 here


: 1 예에서 - 당신처럼, 항상 1이 원인이되는 생성자 내에서 membershipNumber의 값을 초기화 너는 설명했다. 2 예에서

, membershipNumberTwo정적하지 않는 한, 그것은, 당신은 하나의 객체의 구조와 상태를 유지할 필요가 0으로 초기화됩니다 그래서 때마다 새로운 클래스의 모든 구성을 초기화 할 수 있습니다 다른 하나.

+0

감사합니다. membershipNumberTwo static이 저에게 효과적이었습니다. 또한 UUID 클래스와 AtomicNumber 솔루션을 사용해 보겠습니다. – user8981199

+0

도와 드리겠습니다 :) 왜 행동이 그랬는지 이해하는 것이 중요합니다. – GuyKhmel

0

클래스에 대해 필드를 정적으로 만들어야 인스턴스 바인딩이되지 않습니다. Member 클래스의 정적 필드로 membershipNumber을 만듭니다.

+0

OP가 이와 같이 정적 필드를 사용하는 경우 모든 인스턴스가 값을 공유하므로 더 정확하게 고정 필드로 초기화 된 멤버 변수를 사용해야합니다. – AxelH

+0

memberNumber를 int에서 static int로 변경하여 이후에 2 명의 멤버를 만들려고 시도했지만 모두 여전히 0의 멤버십 번호를 유지합니다. – user8981199

0

예제 1에서는 값을 0으로 설정하고 1을 추가하므로 항상 1입니다.

예 2에서, 정말 가치가 당신에게 항상 0을 제공, 각 인스턴스에서 기본적으로 0입니다 membershipNumberTwostatic없는 것 같다 것입니다. 해당 변수에 static 수정자를 추가하기 만하면 인스턴스 레벨이 아닌 클래스 레벨에 값을 저장합니다.


가능한 가장 기본적인 해결책입니다.

단순히 정적 변수를 사용하십시오. 이 값을 사용하여 멤버 변수를 초기화하고 각 생성자 호출에서 정적 값을 늘리는 것을 잊지 마십시오.

class Member{ 
    private static int membershipNumberCount = 0; 
    private int membershipNumber; 

    public Member(){ 
     membershipNumber = membershipNumberCount; 
     membershipNumberCount++; //Could be done on the same line but keep it simple 
    } 
    ... 
} 

이것은 영구적이지 않으며 값은 응용 프로그램 실행마다 재설정됩니다.

+0

온라인으로 생성자에서 다른 userId 초기화를 살펴 봅니다. 이제 모든 회원이 회원 번호에 +1이 추가되었습니다. 도움을 주셔서 감사합니다. – user8981199

0

정적 변수를 사용해야합니다. 이런 식으로 사용해보십시오. 다음 MemberShip 번호를 저장하고이를 사용하여 각 신규 회원의 회원 번호를 찾을 때 사용할 수있는 하나의 고정 변수입니다. see this

private static int NextMemberNumber = 1; 
private int membershipNumber; 
public Member(String newEmail, int newMoney) 
{ 
// Intialises the email. 
email = newEmail; 
// Intialises the membership number. 
membershipNumber =NextMemberNumber; 
NextMemberNumber = NextMemberNumber + 1; 
// Intialises the login status. 
loginStatus = false; 
// 
companions = new ArrayList<Friend>(); 
// Intialises the members money. 
money = newMoney; 
}