해결된 질문
작성
·
342
0
안녕하세요. 문제풀이를 보다보니 접근제어자 강의가 접근제어자에 관한 강의인 것인지 아님 만든 클래스를 바탕으로 접근제어자를 통해서 불러 들이는 것에 관한 내용인지 헷갈리지만 계속 강의를 들으면서 이해하려고 노력 중입니다.
회원의 닉네임과 주소를 받아 저장하는 형식의 로직과 주문할 음식 그리고 해당 음식의 가격과 수량을 받아서 출력문을 만들었습니다.
닉네임과 주소를 입력하지 않고 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("")를 사용하여 비교하여도 괜찮습니다.
나머지 부분도 위를 참조하여 마무리 하실 수 있을거에요.
감사합니다.
안녕하세요 옙버디님!
Scanner는 Order 클래스의 모든 메서드에서 사용하고 있습니다. 이럴 경우 메서드를 호출할 때마다 Scanner 를 새로 생성하는 것보단 멤버 변수로 만들어 한 번만 생성하는 것이 효율적일 수 있습니다.
final 키워드는 변경불가 선언으로, scanner 를 메서드 내부에서 다른 Scanner 인스턴스로 덮어씌울 수 없음을 의미합니다.
감사합니다.
필드에 final final Scanner scanner = new Scanner(System.in);을 쓰는 이유는 왜일까요