자바

JAVA STEP 6. INPUT

IT의 큰손 2023. 2. 3. 18:54
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개에 대한 입력이 없어 오른쪽 상단에 디버깅이 종료되지않고 실행되고 있는 상태가 지속되는 것을 볼 수 있다.

a만 입력하였을 경우

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