🚀 from error to study/Java

[실습문제/mvc패턴] 다양한 입력을 받는 중 하나의 입력이 조건과 일치하지 않는다면 "해당 입력만" 다시 받기

천재강쥐 2022. 9. 3. 22:04

[문제]

 

Q. 회원을 추가하기 위해 아이디, 비밀번호, 이름, 나이, 성별(M/F), 이메일, 전화번호를 입력받고

해당 값을 ArrayList<Member>에 추가해라.

 

사용자가 성별을 M 또는 F로 입력하지 않은 경우 "성별만 재입력" 받고 싶음

 

	// 회원 추가 화면
	public void insertMember() {
		System.out.println("== 새로운 멤버 추가 ==");
		System.out.print("아이디: ");
		String userId = sc.nextLine();
		
		int idCheck = mc.idCheck(userId);
		
		if(idCheck != 0) {
			System.out.println("이미 존재하는 아이디입니다. 다른 아이디를 입력하세요.");
			insertMember();
			return;
		}
		
		System.out.print("비밀번호: ");
		String userPwd = sc.nextLine();
		
		System.out.print("이름: ");
		String userName = sc.nextLine();
		
		System.out.print("나이: ");
		int age = sc.nextInt();
		sc.nextLine();
		
		System.out.print("성별(M/F): ");
		char gender = sc.nextLine().toUpperCase().charAt(0);
		
		System.out.print("이메일: ");
		String email = sc.nextLine();
		
		System.out.print("휴대폰번호: ");
		String phone = sc.nextLine();
		
		int result = mc.insertMember(userId, userPwd, userName, age, gender, email, phone);
		
		if(result > 0) {
			System.out.println("성공적으로 추가되었습니다.");
		} else {
			System.out.println("곡 추가에 실패했습니다.");
		}

	}

[실패 방법 1]

 

기존에 자주 사용하던 방법처럼 insertMember() 메소드를 호출하여 처음부터 시작하고 return;으로 해당 메소드를 끝내는 방법

아이디부터 모두 새로 재입력해야 하므로 적절하지 않음


[해결 방법]

  

제어문 while과 while 하위 if문, 분기문 continue와 break를 사용!

성별에 대한 입력을 while문으로 진행함
while 하위 if문으로 M/F가 아닐 경우 재입력하라는 출력문을 기술한 뒤
continue를 쓰면 while로 돌아가기 때문에 성별만 재입력 가능해짐!
제대로 입력했을 경우에는 if문 바깥, while문 안쪽 위치에 break를 걸어 while문을 빠져나가게 함

 

	// 회원 추가 화면
	public void insertMember() {
		System.out.println("== 새로운 멤버 추가 ==");
		System.out.print("아이디: ");
		String userId = sc.nextLine();
		
		int idCheck = mc.idCheck(userId);
		
		if(idCheck != 0) {
			System.out.println("이미 존재하는 아이디입니다. 다른 아이디를 입력하세요.");
			insertMember();
			return;
		}
		
		System.out.print("비밀번호: ");
		String userPwd = sc.nextLine();
		
		System.out.print("이름: ");
		String userName = sc.nextLine();
		
		System.out.print("나이: ");
		int age = sc.nextInt();
		sc.nextLine();
		
		// 성별 확인받고, M/F가 아닐 경우 다시 입력받기 위해 변수만 따로 빼고 판별식은 while로 묶음
				char gender = 0;
				
				while (true) {
				
				System.out.print("성별(M/F): ");
				gender = sc.nextLine().toUpperCase().charAt(0);
				
				if(gender != 'M' && gender != 'F') {
					System.out.println("성별 재확인 후 알파벳 M(m) 또는 F(f)으로 입력하세요.");
					continue;
				}
					break;
				}
		
		System.out.print("이메일: ");
		String email = sc.nextLine();
		
		System.out.print("휴대폰번호: ");
		String phone = sc.nextLine();
		
		int result = mc.insertMember(userId, userPwd, userName, age, gender, email, phone);
		
		if(result > 0) {
			System.out.println("성공적으로 추가되었습니다.");
		} else {
			System.out.println("곡 추가에 실패했습니다.");
		}

	}