728x90
INPUT : 콘솔 입력
1. System.in.read()
- read() 메소드
- System.out.print() 반대 기능
- 불편함
- 1byte 문자만 입력 가능(=한글 입력 불가능)
- ex)
System.out.print("문자를 입력하세요 : "); //라벨
int code = System.in.read(); //사용자가 입력한 값을 읽어 code라는 변수에 넣는다.(하지만 문자 코드 값으로 들어감)
System.out.printf("%c\n", code); //문자 코드 값으로 변환하여 출력
System.out.printf("입력한 문자는 %c입니다. \n", code); //출력
- read는 사용자가 입력한 문자의 단 한개의 글자만 가져옴.
- 즉, 여러개를 가져오려면 아래와 같은 코드를 반복하여야만 가능하다.
System.out.print("문자 입력: ");
int code = System.in.read();
System.out.println(code);
System.out.printf("%c\n",code);
code = System.in.read();
System.out.println(code);
System.out.printf("%c\n",code);
code = System.in.read();
System.out.println(code);
System.out.printf("%c\n",code);
code = System.in.read();
System.out.println(code);
System.out.printf("%c\n",code);
code = System.in.read();
System.out.println(code);
System.out.printf("%c\n",code);
- 만약 문자 입력에 a 한글자만 넣게 된다면?
- 아래와 같은 결과가 나오게된다.
- 그 이유는 : a를 입력하고 enter도 입력이 된 것인데. \r = 13을 의미하고, \n 10을 의미하여 해당 두가지가 출력이 되게 되는 것이다. 또한, 나머지 2개에 대한 입력이 없어 오른쪽 상단에 디버깅이 종료되지않고 실행되고 있는 상태가 지속되는 것을 볼 수 있다.
2. BufferedReader
- System.in.read() 메소드를 보완하여 만든 것
- 더욱 편리함.
- ex)
package com.test.java;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ex12_BufferedReader {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//BufferedReader를 사용하기위한 전처리 작업이라고 보면된다.
//BufferedReader의 클래스를 상속 받아 사용하는 것.
System.out.print("이름을 입력하세요 : ");
String msg = reader.readLine(); // 문자열 msg = 문자열을 받는 메소드를 선언
System.out.printf("안녕하세요. %s님. \n", msg);
System.out.print("아이디 입력: ");
String id = reader.readLine();
System.out.printf("어서오세요. %s님 비밀번호를 입력해주세요. \n", id);
String pwd = reader.readLine();
System.out.println("로그인이 완료되었습니다. 행복한 시간 보내세요!")
}
}
- 하지만, Buffered도 마찬가지로, 숫자를 자료형으로 입력받는 것이 아닌 문자형으로 받아들인다.
- 그때 사용하는 예제를 보이겠다.
- ex)
- 요구사항] 사용자로부터 숫자를 2개 입력 > 두 수의 합을 구하시오. (연산과정도 같이 출력)
- 1. 라벨 출력 (안내 메시지)
- 2. 숫자 1개를 입력
- 3. 라벨 출력
- 4. 두번째 숫자 1개를 입력
- 5. 두수의 합
- 6. 연산과정 출력
package com.test.java;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Ex12_BufferedReader {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("첫번째 숫자를 입력하세요 : "); //1
String input1 = reader.readLine(); //2
int num1 = Integer.parseInt(input1); //문자형을 int형으로 변환
System.out.print("두번째 숫자를 입력하세요 : "); //3
String input2 = reader.readLine(); //4
int num2 = Integer.parseInt(input2);
// 5. 합구하기
System.out.printf("%d + %d = %d\n", num1, num2, num1+num2 ); //6
}
}
3. Scanner
- BufferedReader 클래스를 조금 더 보완하여 만듬.
- ex)
package com.test.java;
import java.util.Scanner;
public class Ex14_Scanner {
public static void main(String[] args) {
//입력 도구
Scanner scan = new Scanner(System.in);
System.out.print("이름: ");
String name = scan.nextLine(); //reader.readLine()과 비슷
System.out.printf("안녕하세요 %s님\n", name);
System.out.print("숫자: ");
int num = scan.nextInt();
System.out.println(num + 10);
}
}
총정리
- 문자 1개를 입력
- int code = System.in.read();
- 문자 1개를 입력
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- int code = reader.read();
- 문자열 입력
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- String line = reader.readLine();
- 문자열 입력
- Scanner scan = new Scanner(System.in);
- String line = scan.nextLine();
- 숫자 입력
- Scanner scan = new Scanner(System.in);
- int num = scan.nextInt();
- 주의할점 : scan.next***() 호출하고 바로 뒤에 nextLine()을 호출할 때
- 앞의 next***()이 개행문자를 남겨버려서 그 다음 nextLine()이 새로운 값을 요구하는 대신에 남아 있는 개행문자를 처리하면서 그냥 넘어간다.
- 해결방법 1 : scan.skip("\r\n");
- 해결방법 2 : scan.nextLine();
728x90
'자바' 카테고리의 다른 글
JAVA STEP 8. Casting (0) | 2023.02.06 |
---|---|
JAVA STEP 7. 카페 무인전산 시스템 만들기(기초) (0) | 2023.02.05 |
JAVA STEP 5. OUTPUT (0) | 2023.02.03 |
JAVA STEP 4. ESCPAE (0) | 2023.02.03 |
JAVA STEP 3. DataType (0) | 2023.02.02 |