본문 바로가기
학교공부

[JAVA 기초]System.in.read() 와 Scanner

by 자라자 2020. 9. 10.

오늘은 사용자가 직접 변수를 입력하는 방법에 대해 알아보겠습니다

 

System.in.read()

정수형을 입력받을 수 있습니다. 간단한 예제를 통해 입출력을 해봅시다. int와 char모두 정수를 변수에 저장하는데, char를 출력할 때는 숫자 대신 문자를 출력한다고 알고 있으면 됩니다. `System.in.read()`로 받아들인 값은 아스키코드의 십진수로 표현이 됩니다.

import java.io.IOException;

public class Chap02_inclass {
	public static void main(String[] args) throws IOException{
		int v1; //char v1으로 바꿔서도 해봅시다
		
		v1=System.in.read();
		System.out.println(v1);
	}

}

`import java.io.IOException`과 `throws IOException`은 예외처리를 위한 구문입니다.

 

Scanner 사용하기

Scanner를 이용해서 입력을 받고 `System.out.println`으로 출력하는 예제입니다. `Scanner` 객체는 유니코드로 문자를 입력받습니다.

import java.util.Scanner;

public class chap02_pro01_ex12 {
	public static void main(String[] args) {
		int v1;
		String v2;
		double v3;
		
		Scanner scan = new Scanner(System.in);
		
		v1=scan.nextInt();
		v2=scan.nextLine();
		v3=scan.nextDouble();
		
		System.out.println(v1);
		System.out.println(v2);
		System.out.println(v3);
	}

}

`Ctrl+F11`로 빌드 후 처음 입력값에 `123`, 두번째 입력값에 `abc`를 넣으면 에러가 납니다. 우리가 입력해주는 값은 보통 `123`이 아니라 엔터까지 포함된 `123\n`인데, `nextInt`와 `nextDouble`은 `\n`을 무시하지만 `nextline`은 그것을 반영합니다. 그래서 첫 `123\n`을 입력할 때 남아있던 엔터 키가 입력되면서 `nextDouble`로 넘어가고, 여기 문자를 입력하는 것이라 못받게 됩니다. 해당 오류를 방지하려면 scan을 한번 써줘서 남아있는 `\n`을 없애주면 됩니다.

 

import java.util.Scanner;

public class chap02_pro01_ex12 {
	public static void main(String[] args) {
		int v1;
		String v2;
		double v3;
		
		Scanner scan = new Scanner(System.in);
		
		v1=scan.nextInt();
		System.out.println("scan.next()로 입력받은 내용 : "+v1);
		scan.nextLine();
		v2=scan.nextLine();
		System.out.println("scan.nextLine()로 입력받은 내용 : "+v1);
		v3=scan.nextDouble();
		
		System.out.println(v1);
		System.out.println(v2);
		System.out.println(v3);
		
		scan.close();
	}

}

 

덧붙이자면, `.charAt(0)`를 뒤에 붙이면 인덱싱을 할 수 있는데, 개행에는 인덱스가 붙지 않아 에러가 납니다.