[실습문제/mvc패턴] 반복문에 이름을 지어 주고 다중 반복문 한 번에 빠져나오기

2022. 9. 4. 23:58·🚀 from error to study/Java

[문제]

 

Q. 현재 코드는 view단에서 "삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N)" 출력문의 대답을 받기 전부터 이미 controller에 기능을 요청하여 데이터가 삭제된 상태이다.

 

<추가 요청사항>

1) 해당 출력문에서 Y를 입력받은 경우에만 데이터를 삭제

2) Y/N 이외의 대답을 받은 경우 (데이터 삭제 없이) 재입력 요청

3) N을 입력받은 경우 데이터 삭제 없이 회원 삭제 화면을 빠져나갈 것

 

	// 회원 삭제 화면
	public void deleteMember() {
		System.out.println("회원을 삭제합니다.");
		System.out.print("삭제할 회원의 아이디: ");
		String userId = sc.nextLine();
		
		System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
		char answer = sc.nextLine().toUpperCase().charAt(0);
		
		int result = mc.deleteMember(userId);
		
		if(answer == 'Y') {
			if(result > 0) {
				System.out.println("성공적으로 삭제되었습니다.");
			} else {
				System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
			}
		
		}
		
	}

[해결 방법 1]

 

해당 구문은 다중 반복문이 아닌 if와 반복문이므로 굳이 반복문에 이름을 붙일 필요가 없다

 

1) "삭제 후 복구할 수 없습니다~" 출력문부터 섹션을 나누기

2) break와 return을 이용해 내가 원하는 곳으로 가게 하기

 

위의 방법을 통해 충분히 요구사항에 맞춰 활용 가능함!

 

// 회원 삭제 화면
public void deleteMember() {
	System.out.println("회원을 삭제합니다.");
	System.out.print("삭제할 회원의 아이디: ");
   	String userId = sc.nextLine();
		
       // answer 변수를 먼저 선언해 줌
       // -> 반복문 안에서 선언할 경우 반복문 밖에서는 해당 변수를 쓰지 못하게 되므로
	char answer = ' ';
	
	while (true) {
		
		System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
		answer = sc.nextLine().toUpperCase().charAt(0);
			
		if(answer == 'Y') {
          		// 'Y'를 입력받았을 때 controller에서 데이터를 삭제함
			int result = mc.deleteMember(userId);
				
			if(result > 0) {
				System.out.println("성공적으로 삭제되었습니다.");
				// break는 해당 "반복문"을 빠져나가게 하므로 즉, while문을 빠져가게 됨
          	     		break;
			} else {
				System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
				// return은 해당 메소드를 호출했던 곳으로 돌아가게 하므로
               			// 나의 코드상 switch문에 들어갔다가 break를 만나 프로그램 종료됨
                     		return;
			}
		}
		else if (answer == 'N') {
			System.out.println("회원 삭제를 취소하셨습니다. 메뉴 화면으로 돌아갑니다.");
			break;
				
		} else {
			System.out.println("Y 또는 N만 입력하실 수 있습니다. 다시 입력해 주세요.");
		}
	}
}

[해결 방법 2]

 

다만!

추후 반복문을 2번 사용해야 할 경우가 있다면 결과가 다를 수 있다

 

반복문 1

반복문2

break;

 

break는 해당 반복문을 1개 빠져나가기 때문에

반복문 2에서 break를 걸면 반복문1로 돌아가게 되고,

반복문 2에서 반복문 1을 다시 실행시켜야 하는 경우가 있을 경우

다른 코드들과 겹쳐 어떻게 해야 할지 모르는 난감한 상황이 된다

 

이럴 때는

반복문에 이름을 설정해서 간단하게 다중 반복문 탈출이 가능하다

  

// 회원 삭제 화면
public void deleteMember() {
	System.out.println("회원을 삭제합니다.");
	System.out.print("삭제할 회원의 아이디: ");
	String userId = sc.nextLine();
		
	char answer = ' ';
	
    // 반복문에 이름 설정해 주기
    // while 반복문의 이름: whileout
	whileout :
		
	while (true) {
		
		System.out.print("삭제 후 복구할 수 없습니다. 정말 삭제하시겠습니까? (Y/N): ");
		answer = sc.nextLine().toUpperCase().charAt(0);
			
		if(answer == 'Y') {
			int result = mc.deleteMember(userId);
				
				if(result > 0) {
					System.out.println("성공적으로 삭제되었습니다.");
                    			// whileout을 빠져나가게 해라
					break whileout;
				} else {
					System.out.println("일치하는 아이디가 없으므로 삭제할 수 없습니다.");
                    			// whileout을 빠져나가게 해라
					break whileout;
				}
		}
		else if (answer == 'N') {
			System.out.println("회원 삭제를 취소하셨습니다. 메뉴 화면으로 돌아갑니다.");
            		// whileout을 빠져나가게 해라
			break whileout;
				
		} else {
			System.out.println("Y 또는 N만 입력하실 수 있습니다. 다시 입력해 주세요.");
		}
	}		
}

 


코딩은 산 넘어 산쓰,,~

지만 새로운 기능 하나를 알게 될 때마다 유레카 외치게 되는 매력이 있다

똑똑해지는 나

제법 멋있음...

저작자표시 비영리 변경금지 (새창열림)
'🚀 from error to study/Java' 카테고리의 다른 글
  • [Eclipse error] Hot Code Replace Failed
  • [Java] 메소드의 반환형과 매개변수
  • [실습문제/mvc패턴] ArrayList 값 생성 시 1부터 차례대로 부여한 index 값을 ArrayList 값 삭제 시에도 빈 번호 없이 유지하기
  • [실습문제/mvc패턴] 다양한 입력을 받는 중 하나의 입력이 조건과 일치하지 않는다면 "해당 입력만" 다시 받기
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[실습문제/mvc패턴] 반복문에 이름을 지어 주고 다중 반복문 한 번에 빠져나오기
상단으로

티스토리툴바