Java/java
1주차 - read() , Scanner (1)
우젼
2022. 9. 1. 19:32
System.out.println("데이터 입력 : ");
int data = System.in.read();
char convertData = (char)data;
System.out.println("입력 받은 데이터 : " + data);
System.out.println("입력 받은 데이터 : " + convertData);
// '예외(Exception)' 라는 것은 자바 코드는 문제없이 작성되었으나 외부의 문제로 처리가 되지 않는 경우를 부른다. ex) OS에서의 문제, 데이터베이스의 문제
// 예외관리하는 방법 : 전가(throws), 처리(try-catch), 예외발생(throw)
// IOexception 에서 IO 는 I : Input, O : Output 을 의미한다!
int data1, data2, data3;
System.out.print("첫번째 데이터 입력 : ");
data1 = System.in.read();
System.out.println("첫번째 데이터 출력 :" + data1);
System.in.read();System.in.read();
System.out.print("두번째 데이터 입력 : ");
data2 = System.in.read();
System.out.println("두번째 데이터 출력 :" + data2);
System.out.print("세번째 데이터 입력 : ");
data3 = System.in.read();
System.out.println("세번째 데이터 출력 :" + data3);
/* Enter는 유니코드로 CR LF 로 표현이 되기때문에
* 코드에서 a를 입력 후 엔터를 하면 a CR LF 로 인식된다.
* 즉, 두번째 데이터는 CR, 세번째 데이터는 LF로 인식되어 출력된다.
*/
위에서 read() 사용시 발생하는 문제를 해결하기 위해서는 아래와 같은 코드를 이용하면 된다.
int data1, data2, data3;
System.out.print("첫번째 데이터 입력 : ");
data1 = System.in.read();
System.out.println("첫번째 데이터 출력 :" + data1);
System.in.read();System.in.read();
System.out.print("두번째 데이터 입력 : ");
data2 = System.in.read();
System.out.println("두번째 데이터 출력 :" + data2);
System.in.read();System.in.read();
System.out.print("세번째 데이터 입력 : ");
data3 = System.in.read();
System.out.println("세번째 데이터 출력 :" + data3);
/* 예시로 a를 입력했을때에는
* a + Enter 입력을 a CR LF 로 인식 후에,
* CR 과 LF를 버린후, 다시 데이터 입력을 받는다.
* 곧 출력은 a 만 출력되고 다음 데이터 입력을 받는다.
*/
read() 는 이러한 단점이 있어 실제 현업에서 read()가 사용되는 일은 그리 많지 않다고 한다.
아래는 Scanner의 내용
Scanner input;
input = new Scanner(System.in);
System.out.println("참조 값 : " + input);
// Scanner : 자료형, 기본자료형이 아닌 것은 '참조자료형'이라 한다.
// input : 변수이름, 참조변수라 부를 수 있다. 담기는 값은 참조(주소)값 이라 부른다.
// new : 메모리에 공간 확보 후 Scanner 클래스의 내용을 담음.
// 문자열을 입력 받을 때 사용하는 메서드
// input.next();
// input.nextLine();
//
// input.nextByte(); // byte 유형의 데이터를 받는다.
// input.nextShort(); // short 유형의 데이터를 받는다.
// input.nextInt(); // int 유형의 데이터를 받는다.
// input.nextLong(); // long 유형의 데이터를 받는다.
//
// input.nextFloat(); // float 유형의 데이터를 받는다.
// input.nextDouble(); // double 유형의 데이터를 받는다.
//
// input.nextBoolean();
// nextchar() 은 지원되지 않는다.
// next~~ 를 보고서 어떤 데이터를 받을 것인지를 알 수 있다.
System.out.print("데이터 입력 : ");
String data = input.nextLine();
System.out.println("입력 받은 데이터 :" + data);
/* nextLine --> read 매서드와 같이 엔터를 CR LF 로 인식. // next는 CR LF 를 처리하지 않고 넘김.
next가 먼저 나오고 nextLine가 나오면 위의 next에서 남은 CR LF를 인식하기 때문에,
실제 사용될 nextLine 앞에 CR LF 를 받아줄 nextLine을 입력해줘야한다.
*/
System.out.print("데이터 입력 : ");
data = input.next();
System.out.println("입력 받은 데이터 :" + data);
// next() 메서드를 통해 데이터를 입력받을 때 띄어쓰기가 들어가면 그것을 문자열의 끝으로 인식한다.
// 예로, 'test1Test2' 는 정상적으로 인식하지만 'test1 test2' 는 'test1'만 인식한다.
/*
input.next(); --> 공백과 줄바꿈을 입력 문자열의 끝으로 사용.
input.nextLine(); --> 줄바꿈만 입력 문자열의 끝으로 사용.
*/
아래는 nextInt(), nextDouble() 등의 사용 예시
Scanner sc = new Scanner(System.in);
//nextInt()의 사용 예시
System.out.print("정수 입력 : ");
int data = sc.nextInt();
//nextDouble()의 사용 예시
System.out.print("체중 : ");
double weight = sc.nextDouble();
//nextFloat()의 사용 예시
System.out.print("키 : ");
float height = sc.nextFloat();
System.out.println("체중 : " + weight);
System.out.println("키 : " + height);
sc.close(); // Scanner 자료형의 변수에 뜨는 Warning 없애기 위해 필요함.