>내가 만든 아이디 중복 체크
public static void overlapCheck(List<UserDTO> list ,UserDTO userDTO) {
for (UserDTO s : list) {
while (true) {
if (s.getEmail().equals(userDTO.getEmail())) {
System.out.print("중복된 아이디입니다\n다시입력 >");
userDTO.setEmail(sc.next());
} else if (!userDTO.getEmail().equals(s.getEmail())) {
break;
}
}
}
}
> 실행은 잘 되지만 선생님이 원하는 답은 아님
> 가장 큰 문제는 뭐가 문제인지 모르겠음
> 따로 알아본 결과 나는 저기에 사용된 userDTO가 한객체에서 수정되며 반복하는줄 알았으나
> 반복하며 새로 입력받을때 마다 새로운 객체가 만들어진다는 답변을 받았음
> 그럼 메모리의 사용량이 늘고 도메인을 넣지 않았기 때문에 같은 아이디에 다른 도매인을 사용하는 경우
> 가입이 된다는데 하여튼 문제가 있다는 사실을 알았음 이는 더 배워가며 느껴야할 부분인듯하다
> 메모리 문제는 Util을 싱글톤으로 만들어보라는 답변도 받음
> 잘이해안됨
> 선생님이 만든 아이디 중복 체크만들기
public String overlapCheck(List<UserDTO> list, String str) {
while(true) {
System.out.print(str+"> ");
String email = sc.next();
boolean find = false;
for(UserDTO u : list) {
if(u.getEmail().equals(email+"@"+UserDTO.getDomain())) {
System.out.println("중복된 "+str);
find = true;
break;
}
}
if(find) {
continue;
}
return email;
}
}
> 다른 분이 만든 아이디 중복체크
> 매우 어려움 나중에 이해가 가능하면 풀이를 적자
public String overlapCheck() {
while(true) {
List<UserDTO> list = repository.findAll();
System.out.print("이메일> ");
String id = sc.next();
String domain = UserDTO.getDomain();
boolean ok = false;
String idOk = null;
if(list.size() == 0) {
return id;
} else {
for(UserDTO u : list) {
// @를 기준으로 문자열을 추출할 것이다.
String selectEmail = u.getEmail();
// 먼저 @ 의 인덱스를 찾는다 - 인덱스 값: 5
int idx = selectEmail.indexOf("@");
// @ 앞부분을 추출
// substring은 첫번째 지정한 인덱스는 포함하지 않는다.
// 아래의 경우는 첫번째 문자열인 a 부터 추출된다.
String selectid = selectEmail.substring(0, idx);
if(selectid.equals(id)) {
idOk = id;
break;
}
}
if(idOk != null) {
for(UserDTO u : list) {
// @를 기준으로 문자열을 추출할 것이다.
String selectEmail = u.getEmail();
// 먼저 @ 의 인덱스를 찾는다 - 인덱스 값: 5
int idx = selectEmail.indexOf("@");
// @ 앞부분을 추출
// substring은 첫번째 지정한 인덱스는 포함하지 않는다.
// 아래의 경우는 첫번째 문자열인 a 부터 추출된다.
String selectid = selectEmail.substring(0, idx);
// 뒷부분을 추출
// 아래 substring은 @ 바로 뒷부분인 n부터 추출된다.
String selectDomain = selectEmail.substring(idx+1);
if(selectid.equals(idOk) && selectDomain.equals(domain)) {
System.out.println("동일한 이메일이 있습니다. 다시입력");
ok = true;
break;
} else {
ok = false;
}
}
} else {
ok = false;
}
}
if(!ok) {
return id;
}
}
}