next(); vs nextLine(); 에러

stan·2023년 5월 8일
0

에러 오류 예외

목록 보기
2/12
import java.util.Random;
import java.util.Scanner;

public class Test02 {
	public static void main(String[] args) {

		Random rand=new Random();
		Scanner sc = new Scanner(System.in);

		int N=2; // 상품이 2개란 뜻
		String[] mName=new String[N]; // 메뉴이름 배열
//		for(int i=0;i<mName.length;i++) {
		int index=0;
		while(true) {
			if(index==N) { //전부 완성하면 멈춰
				break;
			}
			System.out.print((index+1)+"번 상품이름 입력: ");
			mName[index]=sc.nextLine(); // 문자열 입력
			System.out.println(mName[index]+" 이(가) 맞나요?");
			System.out.println("1-YES, 2-NO : ");
			int ans=sc.nextInt();
			sc.nextLine(); // 버퍼에 남아있는 쓸데없는값들을 치워주는 코드
			 
			if(ans!=1) {//Y라고 대답하지 않으면,
				System.out.println("다시 입력해주세요!");
				continue;
			}
			System.out.println();
			
			index++;
		}

nextLine();은 모든 공백(space, enter)값을 가져감

이렇게 스페이스바 입력 가능

next();는 모든 공백을 안가져감 받아오지 않음
아이스(띄고)아메리카노 입력시 오류 :

InputMismatchException
입력된값이 문자열이 아니라고 인식

인지해야 하는 부분:
.nextLine(); 을 쓸 경우

sc.nextLine(); // 버퍼에 남아있는 쓸데없는값들을 치워주는 코드

이렇게 한번 버퍼에 남아있는 공백값을 없애줘야 함

그렇게 하지 않을 경우 에러 발생:

메모리 공간에서 integer에 enter값을 받지 못함 :
ans = 1 저장 후

버퍼공간에 남아있는 enter 값을 뒤늦게 남아있네 내건가 하고 가져옴

나는 enter입력 하지 않았는데 입력 한 것이 됨

그니까 기억할것 :

sc.nextLine(); // 버퍼에 남아있는 쓸데없는값들을 치워주는 코드

이거 한번 더 써줘라
애초에 nextLine()이 공백도 가져오고 편함

profile
이진 입니다

0개의 댓글