인프런 커뮤니티 질문&답변

옙버디님의 프로필 이미지
옙버디

작성한 질문수

김영한의 실전 자바 - 기본편

캡슐화

문제풀이 응용버전

해결된 질문

작성

·

342

0

안녕하세요. 문제풀이를 보다보니 접근제어자 강의가 접근제어자에 관한 강의인 것인지 아님 만든 클래스를 바탕으로 접근제어자를 통해서 불러 들이는 것에 관한 내용인지 헷갈리지만 계속 강의를 들으면서 이해하려고 노력 중입니다.

 

스크린샷 2024-01-03 11.37.26.png스크린샷 2024-01-03 11.37.58.png스크린샷 2024-01-03 11.41.10.png

회원의 닉네임과 주소를 받아 저장하는 형식의 로직과 주문할 음식 그리고 해당 음식의 가격과 수량을 받아서 출력문을 만들었습니다.

닉네임과 주소를 입력하지 않고 enter를 했을 때 다시 입력하라는 구문과 함께 재입력을 받게 하고 싶은데 아래의 결과처럼 나오게 됩니다. 어떤 부분에서 오류가 있는지 잘 모르겠습니다.
return; 도 사용해봤지만 동일하게 나오더군요.

답변 1

0

안녕하세요. 옙버디님, 공식 서포터즈 코즈위버 입니다.

사용자가 입력을 잘못한 경우, 재 입력을 요청해야 하는데요. 이를 콘솔레벨에서 구현하기 위해선 반복문을 활용해야 합니다.

아래는 userNickName을 입력받는 부분까지 작성한 코드입니다.

do~while() 우선 do의 내용을 실행하고 이후 while () 에서 조건식을 검사하므로 콘솔에서 사용자 입력을 처리하기에 적절합니다. (그러나 콘솔 어플리케이션이 아닌 경우 while, for 문을 더 자주 사용합니다)

public class Order {

	private String userNickName;
	private String address;
	private String orderList;
	private final Scanner scanner = new Scanner(System.in);

	public void createUser() {
		do {
			System.out.print("사용자 이름을 입력하세요 :");
			userNickName = scanner.nextLine();
		} while (userNickName.isBlank());
	}
}

 

코드를 보면 화면에 사용자 이름을 입력하라는 문구를 출력하고,

scanner.nextLine(); 결과값을 userNickName 에 담습니다.

그리고 이 userNickName()이 공백인지를 확인하기 위해 isBlank() 메서드를 사용하였습니다.

.isBlank() 메서드는 String 에서 제공하는 메서드로 문자가 전부 공백인지 여부를 점검하여 결과값은 boolean 으로 반환합니다. 그래서 while() 문의 조건식으로 사용할 수 있지요. isBlank() 대신 userNickName.equals("")를 사용하여 비교하여도 괜찮습니다.

 

나머지 부분도 위를 참조하여 마무리 하실 수 있을거에요.

감사합니다.

옙버디님의 프로필 이미지
옙버디
질문자

필드에 final final Scanner scanner = new Scanner(System.in);을 쓰는 이유는 왜일까요

안녕하세요 옙버디님!

Scanner는 Order 클래스의 모든 메서드에서 사용하고 있습니다. 이럴 경우 메서드를 호출할 때마다 Scanner 를 새로 생성하는 것보단 멤버 변수로 만들어 한 번만 생성하는 것이 효율적일 수 있습니다.

 

final 키워드는 변경불가 선언으로, scanner 를 메서드 내부에서 다른 Scanner 인스턴스로 덮어씌울 수 없음을 의미합니다.

감사합니다.

옙버디님의 프로필 이미지
옙버디

작성한 질문수

질문하기