
👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
조별 미니 미션
조별 미션과제
각 조는 다시 2팀으로 구성한다.
제출은 교사용컴퓨터 입니다.
<이번 저희회사에서는 회원관리 프로젝트를 담당하게 되었습니다.
회원관리 프로젝트 중 회원의 아이디 유효성 체크를 미션으로 드립니다
제출 시에는 조별토론 단계에서의 기술토론 결과를 정리한 것과 일정
그리고 소스의 결과물을 제출합니다. >
미션 수행단계
1. 조별 토론 (공통된 루틴, 어떤 방식으로 접근할 것인가?을 찾아내는 과정
참고소스 등 방법을 접근하는 기술 토론)
2. 각자 코딩 - 서로 시간을 정해서 언제까지 해 보자라고 결정
3. 미팅시간에 맞춰서 .. 성공했던 부분 잘 안된 부분 체크
4. 최종 소스 완성 및 제출
미션 1
키보드로 아이디를 입력받는다.
입력받은 아이디에 특수 문자가 포함되었는지 확인한다. (유효성)
특수 문자는 @한 개로 정의한다.
특수문자가 몇 개 포함되었는지 출력합니다.
미션 2
키보드로 아이디를 입력받는다.
입력받은 아이디에 특수문자가 포함되었는지 확인한다. (유효성)
특수문자는 String sign="!@#$%^&*"로 정의한다.
특수문자가 몇 개 포함되었는지 출력합니다.
미션 과정
- 공통된 문제 해결 방안
while문을 통한 무한 반복 진행
boolean 자료형을 사용하여 언제 while문을 종료 할 건지 처리함
문자열을 배열로 처리
- 문제 해결을 위한 접근 방식
나 : 유효성 검사를 위해 정상적인 ID패턴을 입력 받을 때 까지 무한 반복(입력과 검사)를 하는 것에 초점을 두었으며
@ 와 @가 아닌 문자열에 대해 각각 처리하는 것과 영어문자를 판단하는 것에 대해 고려했습니다.
조원 1 : 두가지 String 변수에 요소들을 각 각 매칭하여 원하는 검사 결과로 될 수 있도록 반복하는 것으로 진행
- 성공 사례
나 : while문에 boolean 변수를 통해 정상일 경우에만 false처리를 하여 무한 반복이 끝날 수 있도록 종료시점을 구성하였습니다.
영문판단을 위해isAlphabetic메서드를이용하여 알파벳이 아닐 경우 특문으로 판단, 그 후 특문검사를 처리할 수 있도록 로직을 만들었습니다.
조원 1 : continue를 사용하여 필요없는 반복들을 처리하지 않도록 진행하였다.
- 실패 사례
나 : cnt초기화가 되지 않아 지속 동일한 cnt가 출력 되어 한줄 한줄 나눠 재 수정 하다 초기화가 안되는 것을 깨닫고 수정하였습니다.
조원 1 : 특수문자 카운팅에서 똑같은 특수문자가 나왔을때 개수 중첩이 안되었다.
조원 2 : 특수문자를 판단하는 부분이 안되었습니다.
소스코드
public static void main(String[] args) {
// #human@study@today!!@#$%^&*#
Scanner in = new Scanner(System.in);
boolean flag = true;
// flag 값이 최종 false로 될때까지 무한 반복한다.
while (flag) {
// @ 카운트 변수 선언
int speCnt = 0;
// @ 를 제외한 나머지 특수문자 카운트 선언
int notSpeCnt = 0;
// 숫자 카운트
int intSpeCnt = 0;
// 입력 불가 특수문자 선언
String sign = "!@#$%^&*";
// id 입력
System.out.print("[ 필수 특수문자 @ 1개 , 필수 숫자 3개이상 ] \n\t\tID 를 입력 해 주세요 : ");
// id 키보드 입력받기
String idStr = in.nextLine();
// 검사 진행 시 편리를 위해 char배열로 처리함
char[] arrIdStr = idStr.toCharArray();
// 검사 시작
for (int i = 0; i < arrIdStr.length; i++) {
// 배열별 값을 iTmp로 임시저장
char iTmp = arrIdStr[i];
// 영문일 경우 별다른 처리 없이 건너띔
// iTmp 값이 영어 대문자-소문자가 아닐경우(특수 문자일 경우)
if (!isAlphabetic(arrIdStr[i])) {
for (int j = 0; j < sign.length(); j++) {
char jTmp = sign.charAt(j);
// @ 특수문자 갯수 카운팅
if (iTmp == '@') {
speCnt++;
break;
}
// 그외 특수문자 갯수 카운팅
else if (iTmp == jTmp) {
notSpeCnt++;
break;
}
// 숫자 일 경우 숫자 카운팅
else if (iTmp >= 48 && iTmp <= 57) {
intSpeCnt++;
break;
}
}
}
}
if (idStr.trim().isEmpty()) {
System.out.println("입력하신 ID가 없습니다. 다시 입력해 주세요");
System.out.println("----------------------------------------------------------------------------------");
}
// @개 2개부터 , 그외 특수문자 1개부터 , 특수문자 3개 미만 경우 : 재입력
else if (notSpeCnt > 0 || (speCnt >= 2 && intSpeCnt < 3)) {
System.out.println("입력된 @ 문자 개수: " + speCnt);
System.out.println("입력 불가 특문 개수 : " + notSpeCnt);
System.out.println("입력된 숫자 개수 : " + intSpeCnt);
System.out.println("----------------------------------------------------------------------------------");
System.out.println("\t|| 삭제할 @ 개수 : " + (speCnt - 1) + " ||\t|| 삭제할 특수문자 개수 : " + notSpeCnt + " ||\t|| 추가할 숫자 개수 : " + (3 - intSpeCnt + " ||"));
System.out.println("----------------------------------------------------------------------------------");
}
// 모든 검사 항목이 정상 : while 문의 flag를 false로 변경 , while문 탈출
else if (intSpeCnt >= 3 && notSpeCnt <= 0 && speCnt == 1) {
System.out.println("입력하신 ID [" + idStr + "] 는 사용 가능한 ID 입니다\n당신의 ID는 [" + idStr + "] 입니다");
System.out.println("----------------------------------------------------------------------------------");
System.out.println("프로그램을 종료합니다");
flag = false;
}
// 모든 사항이 아닐 경우 : 재입력
else {
System.out.println("입력하신 ID는 유효하지 않습니디. 다시 입력해 주세요");
System.out.println("-----------------------------------------------------------------------------");
}
}
}
'👩🏻💻 𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > ⠀⠀⠀⠀ Jᴀᴠᴀ' 카테고리의 다른 글
2023/10/13⭐️ 미니프로젝트 완성 (0) | 2023.10.18 |
---|---|
2023/10/12⭐️ JAVA Mini Project (0) | 2023.10.18 |
2023/10/10🐰 반복문 키워드 (0) | 2023.10.18 |
2023/10/06🌱 지금까지 배운 자바테스트 (1) | 2023.10.10 |
2023/10/05🐰 중첩FOR문 (0) | 2023.10.10 |