Scanner- 화면에서 "입력" 받기

Scanner- 화면에서 "입력" 받기

Scanner

자바에서는 입력을 처리 할때 클래스 변수를 사용 한다 대표적으로 Scanner 클래스

키보드 입력 , 파일입력, 스트림 입력 등 다양한 입력을 처리할수 있는 클래스

키보드 입력을 위해 Scanner 클래스를 사용할 것이다.

import 추가 - import java.util.Scanner;

스캐너 클래스 변수를 선언하고 초기화

해당변수를 초기화 할때에는 해당변수가 어디서 데이터타입을 읽어올지를 지정해주어야한다

키보드 입력은 System.in 이라는 곳에서 읽어오게한다

Scanner 객체생성 - Scanner scanner = new Scanner (System.in); // System.in = 화면입력

1. 사용자로부터 int 입력 받기System.out.println( " 1. int 입력 ");int 입력 받을때 에는 Scanner 클래스 변수 nextInt() 메소드 호출

int num = scanner.nextInt() ; // 화면에 입력받은 정수를 num저장

System.out.println(" 숫자를 입력하세요.");

System.out.println( " - > " );

int number = scanner.nextInt( ) ; // 화면에 입력받은 정수를 number 저장

System.out.println(" 사용자가 입력한 숫자 : " + number);

import java.util.Scanner; public class Main { public static void main (String [] args) { Scanner scanner = new Scanner(System.in); System.out.println("1. int 입력"); System.out.println("숫자를 입력 하세요"); System.out.println("->"); int number = scanner.nextInt(); System.out.println("사용자가 입력한 숫자 : " + number); scanner.close(); } }

2. 사용 자로부터 double 입력 받기

System.out.println( " 2. double 입력 " ) ;

double 입력 받을 때에는 Scanner 클래스 변수의 nextDouble ( ) 메소드 호출

System.out.println(" 실수를 입력 하세요." );

System.out.println( " - > " );

double d = scanner.nextDouble(); // 화면에 입력받은 실수를 d 저장

System.out.println( " 사용자가 입력한 실수 : " + d );

import java.util.Scanner; public class Main { public static void main (String [] args) { Scanner scanner = new Scanner(System.in); System.out.println( " 2. double 입력 " ) ; System.out.println(" 실수를 입력 하세요." ); System.out.println( " - > " ); double d = scanner.nextDouble(); // 화면에 입력받은 실수를 d 저장 System.out.println( " 사용자가 입력한 실수 : " + d ); scanner.close(); } }

3. 사용 자로부터 string 입력받기

System.out.println( "3. string 입력" );

string 을 입력 받을 때에는 Scanner 클래스 변수의 nextLine() 메소드 호출

System.out.println(" 이름을 입력 하세요." );

System.out.println( " - > " );

scanner.nextLine();

String name = scanner.nextLine();

System.out.println(" 사용자 이름 : [%s]

" , name );

import java.util.Scanner; public class Main { public static void main (String [] args) { Scanner scanner = new Scanner(System.in); System.out.println( "3. string 입력" ); string 을 입력 받을 때에는 Scanner 클래스 변수의 nextLine() 메소드 호출 System.out.println(" 이름을 입력 하세요." ); System.out.println( " - > " ); scanner.nextLine(); // 버퍼메모리 날리기용 String name = scanner.nextLine(); System.out.println(" 사용자 이름 : [%s]

" , name ); scanner.close(); } }

4. close 메소드

프로그램에서 데이터를 읽어올 때에는

반드시 버퍼메모리 라는 임시 저장구역에서 저장된 값들을 읽어오게 된다.

외부로 부터 값을 읽어오는 클래스의 변수는 반드시 close () 라는 메소드를 불러와서

더이상 버퍼 메모리를 읽지 못하게 "닫아야한다."

scanner.close();

Scanner 에는 한가지 버그가 존재하는데

nextInt(), nextDouble() 과 같은 숫자를 입력하는 메소드를 실행하고 나면

버퍼메모리에 우리가 입력했던 엔터키(

) 가 남아있는 버그가 있다.

엔터키가 남아있는 상태에서 계속해서 숫자를 입력받는 메소드를 실행하면 문제가 없겠지만

만약 nextLine() 을 실행하게되면?(String)

nextLint() 은 버퍼메모리에 남아있는 엔터키를 보고 사용자가 입력을 종료했다 라고 생각하고

공백제거등의 단계를 거쳐서 아무런 내용도 없는 string 값 (" " )을 보내주게 된다

" " 을 곧장 String 변수에 저장하게되면 ?

해당 String 변수도 아무런 내용없는 String 변수가 되게 된다

버그를 해결 하기 위해서는 실제 변수에 저장하는 nextLine()을 실행하기전에 nextLine()을 한번더 실행 시켜서

엔터키를 버퍼메모리에서 날려버리면 된다

결론 : 버퍼 메모리를 비워주기위해 scanner.nextLine()을 한번 적어주고 나서

값 저장용 scanner.nextLine()을 사용

Ex ) scanner.nextLine();

String name = scanner.nextLine();

import java.util.Scanner; public class Main { public static void main (String [] args) { Scanner scanner = new Scanner(System.in); System.out.println("1. int 입력"); System.out.println("숫자를 입력 하세요"); System.out.println("->"); int number = scanner.nextInt(); System.out.println("사용자가 입력한 숫자 : " + number); System.out.println( " 2. double 입력 " ) ; System.out.println(" 실수를 입력 하세요." ); System.out.println( " - > " ); double d = scanner.nextDouble(); System.out.println( " 사용자가 입력한 실수 : " + d ); System.out.println( "3. string 입력" ); System.out.println(" 이름을 입력 하세요." ); System.out.println( " - > " ); scanner.nextLine(); // 버퍼메모리 날리기용 String name = scanner.nextLine(); System.out.println(" 사용자 이름 : [%s]

" , name ); scanner.close(); } }

이거 정리하는데 진짜 완전 오래걸리네요

from http://gi-dor.tistory.com/5 by ccl(A) rewrite - 2021-09-07 23:01:13