끄적끄적/TIL

TIL #5 계산기 프로젝트 시작, StringIndexOutOfBoundsException(트러블슈팅)

hubaek 2024. 9. 10. 09:33

프로젝트 깃허브 링크 : 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();