프로젝트 깃허브 링크 : https://github.com/hubaek/Project_Calculator
GitHub - hubaek/Project_Calculator
Contribute to hubaek/Project_Calculator development by creating an account on GitHub.
github.com
오늘 계산기 프로젝트 첫날
먼저 Level1으로 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기로 진행하였다.
Scanner를 많이 써보진 않아서 시작부터 문제가 생겼는데,
사칙연산 기호를 넣는 oper를 String에서 char로 변경하면서
sc.nextLine() -> sc.nextLine().charAt(0)으로 변경
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 숫자를 입력해주세요 : ");
int num1 = sc.nextInt();
// 4가지 기호 외에 들어오면 정확한 기호를 입력해 주세요 경고하고, 다시 입력 필요
System.out.println("계산할 기호를 입력해주세요(+,-,*,/) : ");
char oper = sc.nextLine().charAt(0);
System.out.println("두번째 숫자를 입력해주세요 : ");
int num2 = sc.nextInt();
StringIndexOutOfBoundsException 예외가 발생하였음.
알고보니, 첫번째 숫자를 입력받는 sc.nextInt() 다음에 와서 문제가 발생
nextInt()가 되고, 그다음 Enter로 줄바꿈 문자가 버퍼에 남는데, 그것을 sc.nextLine().charAt(0)에서 빈 문자열로 인식해버려서 예외가 발생하는 것.
해결방법이 2가지가 있다.
// 첫번째 해결방법 sc.nextLine()을 중간에 써서, 버퍼 비우기
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 숫자를 입력해주세요 : ");
int num1 = sc.nextInt();
sc.nextLine(); // 남아 있는 줄바꿈 문자를 제거, 버퍼 비우기
// 4가지 기호 외에 들어오면 정확한 기호를 입력해 주세요 경고하고, 다시 입력 필요
System.out.println("계산할 기호를 입력해주세요(+,-,*,/) : ");
char oper = sc.nextLine().charAt(0);
System.out.println("두번째 숫자를 입력해주세요 : ");
int num2 = sc.nextInt();
------------------------
// 두번째 해결방법 sc.nextLine이 아닌 sc.next를 사용
Scanner sc = new Scanner(System.in);
System.out.println("첫번째 숫자를 입력해주세요 : ");
int num1 = sc.nextInt();
// 4가지 기호 외에 들어오면 정확한 기호를 입력해 주세요 경고하고, 다시 입력 필요
System.out.println("계산할 기호를 입력해주세요(+,-,*,/) : ");
char oper = sc.next().charAt(0);
System.out.println("두번째 숫자를 입력해주세요 : ");
int num2 = sc.nextInt();
'끄적끄적 > TIL' 카테고리의 다른 글
TIL #7 자바 객체지향 (setter, 다형성) (1) | 2024.09.13 |
---|---|
TIL #6 계산기프로젝트 - 클래스, 객체, 컬렉션, 예외처리 (3) | 2024.09.11 |
TIL #4 자바챕터 시작, 특강(라이브세션_Git,현직네이버개발자) (3) | 2024.09.02 |
TIL #3 미니 프로젝트 마무리 + 회고(KPT 회고 방법론) (4) | 2024.08.30 |
TIL #2 미니 팀 프로젝트 2일차 (1) | 2024.08.29 |