Small Grey Outline Pointer Java Scanner/ next, netxLine
본문 바로가기
Dev./java

Java Scanner/ next, netxLine

by sso. 2022. 4. 23.
import java.util.Scanner;

public class ScannerTest1 {

	public static void main(String[] args) {
		
		//키보드를 통해서 데이터를 입력 받는 스캐너
		Scanner sc = new Scanner(System.in);		
		
		String addr = "";
		System.out.print("주소를 입력하세요: ");
		addr = sc.nextLine();
		
		System.out.println("주소: " + addr); 
		//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
		//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
		
		sc.close();
		
	}

}

+의 의미

1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자

 

 

주소를 입력하세요: 서울시 강남구 역삼동 //주소 입력
주소: 서울시 강남구 역삼동

 

System.out.println("주소: " + addr); 

입력받은 주소값이 addr 에 저장되어 출력 된다

 

 

 

 

next / nextLine (문자열을 입력받는다)

 

 

에러 코드

import java.util.Scanner;

public class ScannerTest1 {

	public static void main(String[] args) {
		
		//키보드를 통해서 데이터를 입력 받는 스캐너
		Scanner sc = new Scanner(System.in);		
		
		//next(): 문자열을 띄어쓰기 전까지 입력 받는다.
		//nextLine(): 문자열을 한 줄 전체로 입력 받는다.
		String addr = "";
		System.out.print("주소를 입력하세요: ");
		addr = sc.next();
		String name ="";
		System.out.println("이름을 입력하세요: ");
		name= sc.nextLine();
		
		System.out.println(name + "님은" + addr + "에 삽니다"); 
		//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
		//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
		
		sc.close();
		
		
		
		
	}

}

주소를 입력하세요: 서울시 강남구 역삼동
이름을 입력하세요: 
 강남구 역삼동님은 서울시에 삽니다

 

 

next(); 문자열을 띄어쓰기 전까지 입력 받는다.


nextLine(); 문자열을 한 줄 전체로 입력 받는다.

키보드 버퍼가 비어있을 경우 입력을 요구하며 대기하고 
키보드 버퍼가 비어있지 않을 경우, 키보드 버퍼 전체의 내용을 읽어들인다

 

 

 

addr = sc.next(); 서울시 //띄어쓰기 전까지 입력 받음

주소를 입력하고 엔터를 치면

띄어쓰기 뒤에 나오는 문자들은 키보드 버퍼라는 임시기억장소에 들어가게 된다

 

강남구 역삼동 은 아직 키보드버퍼에 남아 있기 때문에

name= sc.nextLine(); 에는 키보드버퍼에 있는 강남구 역삼동 한줄이 들어오게 된다

이 경우에는 이름을 입력 받는 실행을 건너뛰고, 주소가 바로 출력 된다

 

 

 

수정한 코드

import java.util.Scanner;

public class ScannerTest1 {

	public static void main(String[] args) {
		
		//키보드를 통해서 데이터를 입력 받는 스캐너
		Scanner sc = new Scanner(System.in);		
		
		//next(): 문자열을 띄어쓰기 전까지 입력 받는다.
		//nextLine(): 문자열을 한 줄 전체로 입력 받는다.
		//키보드 버퍼가 비어있을 경우 입력을 요구하며 대기하고 
		//키보드 버퍼가 비어있지 않을 경우, 키보드 버퍼 전체의 내용을 읽어들인다
		String addr = "";
		System.out.print("주소를 입력하세요: ");
		addr = sc.nextLine();
		String name = "";
		System.out.println("이름을 입력하세요: ");
		name= sc.nextLine();
		
		System.out.println(name + "님은 " + addr + "에 삽니다"); 
		//+의 의미 1) 양쪽 모두 숫자가 나왔을때 덧셈을 한다
		//2)한쪽이라도 문자열이 나오게 되면 문자열끼리 이어지도록 하는 문자열 연결연산자
		
		sc.close();
		
		
		
		
	}

}

 

 

주소를 입력하세요: 서울시 강남구 역삼동
이름을 입력하세요: 
홍길동
홍길동님은 서울시 강남구 역삼동에 삽니다

 

 

nextLine 으로 문자열 한줄 전체 다 받는 걸로 수정하면 제대로 출력 된다

 

 

 

 


next 입력받을 자료형

 

 

에러 코드

import java.util.Scanner;

public class ScannerTest2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int age = 0;
		System.out.print("나이를 입력 하세요: ");
		age = sc.nextInt();
		String name = "";
		System.out.print("이름을 입력 하세요: ");
		name = sc.nextLine();
		
		System.out.println(name + "님은 " +age + "살 입니다.");
		
		sc.close();
	}
}

나이를 입력 하세요: 20
이름을 입력 하세요: 님은 20살 입니다.

 

이 경우에는 이름 입력을 건너뛰고 바로 출력이 된다

 

20 [엔터키] // 엔터키 까지 키보드버퍼에 들어가게 된다

nextInt(); => 20 까지 저장후 age변수에 넣는다

 

nextLine(); 키보드버퍼가 비어 있지 않으면 버퍼에 남은 내용 전체를 불러들인다

즉 엔터키 값이 아직 버퍼에 남아 있다(눈에는 안보이지만) 

 

문자열을 제외한 데이터를 입력 받은 후 nextLine() 메소드가 실행되야 한다면
키보드 버퍼의 엔터키를 읽어들이는 문제가 발생된다
문자열을 제외한 데이터를 입력 받은 후, 키보드 버퍼를 비워주는 동작을 실행하고 nextLine() 실행

 

 

 

수정한 코드

import java.util.Scanner;

public class ScannerTest2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int age = 0;
		System.out.print("나이를 입력 하세요: ");
		age = sc.nextInt();
		
		//문자열을 제외한 데이터를 입력 받은 후 nextLine() 메소드가 실행되야 한다면
		//키보드 버퍼의 엔터키를 읽어들이는 문제가 발생된다
		//문자열을 제외한 데이터를 입력 받은 후, 키보드 버퍼를 비워주는 동작을 실행하고 nextLine() 실행
		
		sc.nextLine(); //키보드 버퍼 비워주는 동작
		
		String name = "";
		System.out.print("이름을 입력 하세요: ");
		name = sc.nextLine();
		
		System.out.println(name + "님은 " +age + "살 입니다.");
		
		sc.close();
	}
}

나이를 입력 하세요: 20
이름을 입력 하세요: 홍길동
홍길동님은 20살 입니다.

 

 

 

 

next(); 

공백을 구분점으로 판단해서 각각의 문자열을 입력 받음

package day04;

import java.util.Scanner;

public class Input {
	public static void main(String[] args) {
		String name=""; //초기화
		Scanner sc = new Scanner(System.in); 
		//sca + ctrl + 스페이스바 누르면 자동완성 scanner클래스까지 호출 됨!
		
		// .마침표는 하위연산자 A.b : A안에 b
		System.out.println("이름이 무엇입니까?");
		 //내가 입력한 문자열 값이 담긴다 
		name = sc.next();
		System.out.println(name);
		
		sc.close();
	}
}

이름이 무엇입니까?
길동 (입력)
길동

 

 

 

 

nextLine();

공백까지도 한 줄로 판단해서 한 줄을 그대로 입력 받음

package day04;

import java.util.Scanner;

public class Input {
	public static void main(String[] args) {
		String name=""; //초기화
		String lastName="";
		Scanner sc = new Scanner(System.in); 
		//sca + ctrl + 스페이스바 누르면 자동완성 scanner클래스까지 호출 됨!
		
		// .마침표는 하위연산자 A.b : A안에 b
		System.out.println("이름이 무엇입니까?");
		 //내가 입력한 문자열 값이 담긴다 
//		name = sc.next();
//		lastName=sc.next();
		name=sc.nextLine();
		System.out.println(name);
		System.out.println(lastName);
		sc.close();
	}
}

이름이 무엇입니까?
길동 홍
길동 홍

 

 

 


package day04;

import java.util.Scanner;

public class InputTest {
	public static void main(String[] args) {
		int num1=0, num2=0;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번째 정수: ");
		num1= sc.nextInt();
		System.out.println("두번째 정수: ");
		num2= sc.nextInt();
		
		System.out.println("첫번째 정수: "+num1);
		System.out.println("두번째 정수: "+num2);
		System.out.println("두 정수의 합 : "+ (num1+num2));
	}
}

첫번째 정수: 1
두번째 정수: 
3
첫번째 정수: 1
두번째 정수: 3
두 정수의 합 : 4

 

 

 


 

한 줄에 정수 두개를 입력 받아 두 수의 합 구하기

package day04;

import java.util.Scanner;

public class InputTask {
	public static void main(String[] args) {
		int num1=0 , num2=0;
		
		Scanner sc = new Scanner(System.in);
		System.out.println("정수 2개를 입력해주세요. \n 예)1 2");
		num1=Integer.parseInt(sc.next());
		num2=Integer.parseInt(sc.next());
		
		System.out.println("결과: " +(num1+num2));
		//"결과: " +num1 문자열과 정수가 연결되면 통째로 문자열로 보기 때문에 
		//그 다음에 오는 정수도 문자열로 변환되어 연산이 아닌, 연결이 되어 나온다
		
	}
}

정수 2개를 입력해주세요. 
 예)1 2

1 3
결과: 4

 

 

"결과: " +num1 문자열과 정수가 연결되면 통째로 문자열로 보기 때문에 
그 다음에 오는 정수도 문자열로 변환되어 연산이 아닌, 연결이 되어 나온다

 

 

 


 

nextLine 주의 할 점

package day04;

import java.util.Scanner;

public class InputTest2 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("나이를 입력하세요");
		sc.nextInt();
		System.out.println("이름을 입력하세요");
		sc.nextLine(); //엔터키가 먹히기 때문에 
		sc.nextLine();
		
		
	}
}

나이를 입력하세요
12
이름을 입력하세요
규규

728x90

'Dev. > java' 카테고리의 다른 글

Java 조건문(if~else)  (0) 2022.04.23
Java String  (0) 2022.04.23
연산자/제어문  (0) 2022.04.20
Java 연산자/instanceof 연산자  (0) 2022.04.18
Java의 시작, 변수와 상수  (0) 2022.04.15

댓글