본문 바로가기

자바(JAVA)
[자바(Java)] 사용자 입력(Console input)

1. System.in.read()

2. BufferedReader 클래스

3. Scanner 클래스★★


//System.in.read()

    - 불편함

    - read() 메서드

    - System.out.print()의 반대 기능

    
- 사용자가 키를 입력하기를 대기하고 있는 상태 (프로그램이 잠시 멈춰 있는 상태) > 사용자가 입력 후 enter을 입력해야 함.

    
- 입력값을 int형으로 반환

    
- 사용자가 입력한 문자를 한 개씩 읽어옴.

    
- 1byte 문자만 입력 가능(한글 입력 불가)

    
※ 사용자가 입력한 데이터는 버퍼에 저장된다. 그 후 read()가 한 글자씩 순서대로 가져간다. (엔터에 해당하는 \r, \n 도 포함)


package com.test.java;

public class Ex10_Input {
    public static void main(String[] args) throws Exception {
	//요구사항] 사용자에게 문자 1개를 입력 받아 화면에 출력하시오.

	//1. 안내 메시지 출력
	//2. 키 입력 받기
	//3. 입력 받은 키를 화면에 출력하기

	// 설계 > 화면 설계 > 화면 구현

	System.out.print("문자를 입력하세요 : "); // 1.라벨
	int code = System.in.read();
	System.out.printf("입력한 문자는 %c입니다.\n", code);
	// <문자 코드값>
	// A : 65
	// a : 97
	// 0 : 48


//	Scanner sc = new Scanner(System.in); // 2. 사용자 입력 - scanner
//	String input = sc.nextLine();
//	System.out.printf("입력한 문자는 %s입니다.\n", input); // 3. 출력
    }
}

package com.test.java;

public class Ex11_Input {
    public static void main(String[] args) throws Exception {
	System.out.print("문자 입력: ");

	int code = System.in.read();

	System.out.println(code);
	System.out.printf("%c\n", code);
	System.out.println();

	code = System.in.read();

	System.out.println(code);
	System.out.printf("%c\n", code);
	System.out.println();

	code = System.in.read();

	System.out.println(code);
	System.out.printf("%c\n", code);
	System.out.println();
    }
}

// BufferedReader 클래스

- 편함

- import java.io.BufferedReader;

- import java.io.InputStreamReader;

- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 입력 도구 생성하기

- 메인 메서드에 throws Exception 필요

- reader.read(): int형으로 반환

- reader.readLine(): String형으로 반환

- 2byte 문자를 입력 받음(한글 입력 가능)


package com.test.java;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Ex12_BufferedReader {
    public static void main(String[] args) throws Exception {


	BufferedReader reader = new BufferedReader
		(new InputStreamReader(System.in)); // 입력 도구 생성하기 > reader

	System.out.print("문자 입력: ");
	int code = reader.read();
	System.out.printf("출력: %c\n", code);
	System.out.println("종료");

	System.out.println();


	BufferedReader reader2 = new BufferedReader
		(new InputStreamReader(System.in));

	System.out.print("이름 입력: ");
	String txt = reader2.readLine();
	System.out.printf("안녕하세요. %s님.\n",txt);

	System.out.println();


	BufferedReader reader3 = new BufferedReader
		(new InputStreamReader(System.in));

	System.out.print("숫자 입력: ");
	String input = reader3.readLine();
	int num = Integer.parseInt(input); // > 숫자를 입력 받아야 할 때는 형변환 필요
	System.out.println(100-num);

	System.out.println();


	BufferedReader reader4 = new BufferedReader
		(new InputStreamReader(System.in));

	System.out.print("숫자 입력: ");
	String input2 = reader4.readLine();
	double num2 = Double.parseDouble(input2); // > 숫자를 입력 받아야 할 때는 형변환 필요
	System.out.println(100-num2);

    }
}

package com.test.java;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Ex12_BufferedReader2 {
    public static void main(String[] args) throws Exception {

	//요구사항] 사용자로부터 숫자 2개 입력 받기 > 두 수의 합 구하기(연산 과정도 같이 출력)

	// 1. 라벨 출력
		//System.out.print("숫자 입력: ");
	// 2. 숫자 1개 입력
		//System.out.println("5");
	// 3. 라벨 출력
		//System.out.print("숫자 입력: ");
	// 4. 숫자 1개 입력
		//System.out.println("10");
	// 5. 두 수의 합
	// 6. 연산 과정 출력
		//System.out.println("5 + 10 = 15");

	BufferedReader reader = new BufferedReader
		(new InputStreamReader(System.in));

	System.out.print("숫자 입력: ");
	String input1 = reader.readLine();

	System.out.print("숫자 입력: ");
	String input2 = reader.readLine();

	int num1 = Integer.parseInt(input1);
	int num2 = Integer.parseInt(input2);

	//Q. 정수형으로 입력 받을 때 reader.read() 를 사용하면 되지 않나요?
	//   왜 굳이 readLine()을 써서 문자열로 입력 받고 다시 정수형으로 변환하나요?
	//A: read()는 여러 개를 입력할 수 없다! 객체를 여러 개 생성해서 각기 다른 참조 변수를 사용해야 한다.
	//   그렇지만 readLine()을 사용하면 여러 번 입력 받을 수 있다. 객체 하나를 여러 번 사용 가능!


	System.out.printf("%d + %d = %d\n", num1, num2, num1 + num2);

    }
}

//Scanner 클래스

- import java.util.Scanner;

- sc.nextInt() : 입력값을 정수형으로 반환

- sc.next() : 입력값을 문자열로 반환

- sc.nextLine() :
    -- 입력 버퍼의 내용(개행 문자 전까지)을 읽은 뒤 남아 있는 개행 문자를 지운다. 

★nextLine()은 입력 버퍼의 내용을 읽은 뒤 남아 있는 개행 문자를 지우지만, 나머지는 지우지 않고 남겨둔다.
따라서 nextLine()외에 다른 것을 실행한 후 nextLine()을 실행하게 되면 nextLine()에는 자동으로 개행문자가 입력 되어 종료된다.

- charAt(index) : String으로 저장된 문자열 중에서 한 문자만(index에 해당하는 문자) 선택해서 char타입으로 변환해준다.
    ★Scanner로 입력받으면 String인데, char로 활용하기 위해서는 charAt( )을 적절히 사용해 주어야 한다.

Scanner

import java.util.Scanner; //키보드로 입력을 받으려면 Scanner 클래스가 필요!
public class Example0915 {
	public static void main(String[] args) {
		int num1; //num1 정수형 변수 선언 
		int num2;
		int result;
		
		Scanner sc = new Scanner(System.in);
		System.out.print("첫 번째 정수를 입력하세요: ");
		num1 = sc.nextInt(); //nextInt : 정수형으로 입력받겠다.
		System.out.print("두 번째 정수를 입력하세요: ");
		num2 = sc.nextInt();
		
		result = num1 + num2;
		System.out.println(num1 + "+" + num2 + "=" + result);
		
		result = num1 - num2;
		System.out.println(num1 + "-" + num2 + "=" + result);
		
		result = num1 * num2;
		System.out.println(num1 + "*" + num2 + "=" + result);
		
		result = num1 / num2;
		System.out.println(num1 + "/" + num2 + "=" + result);
		
	}

}

 


//간단한 계산기 프로그램

Scanner를 이용하여 간단한 계산기 프로그램을 작성

1.&nbsp; if문 이용

import java.util.Scanner;

public class Calculator {

	public static void main(String[] args) {
		
		int num1, num2, opr;
		int result;
		
		Scanner sc = new Scanner(System.in);
		System.out.print("연산식 번호를 입력하세요(1. +, 2. -, 3. *, 4. /) : ");
		opr = sc.nextInt();
		System.out.print("첫 번째 숫자를 입력하세요: ");
		num1 = sc.nextInt();
		System.out.print("두 번째 숫자를 입력하세요: ");
		num2 = sc.nextInt();
		
		result = 0 ;
		
		if (opr == 1)
			result = num1 + num2;
		if (opr == 2)
			result = num1 - num2;
		if (opr == 3)
			result = num1 * num2;
		if (opr == 4)
			result = num1 / num2;		
		
		System.out.println("계산 결과는: " + result);
		
	}

}

2. 함수 사용

import java.util.Scanner;

public class Calculator_2 {
	static int calc(int val1, int val2, int op) {
		int res;
		
		switch(op) {
		case 1:
			res = val1 + val2; break;
		case 2:
			res = val1 - val2; break;
		case 3:
			res = val1 * val2; break;
		case 4:
			res = val1 /+ val2; break;
		default:
			res = 0;		
		}
		return res;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int result;
		int oper;
		int num1, num2;
		
		System.out.printf("연산식을 선택(1: +, 2: -, 3: *, 4: /) : ");
		oper = sc.nextInt();
		
		System.out.printf("첫 번째 숫자 입력 : ");
		num1 = sc.nextInt();
		
		System.out.printf("두 번째 숫자 입력 : ");
		num2 = sc.nextInt();
		
		result = calc(num1, num2, oper);
		
		System.out.printf("계산 결과는 : " + result);
		
	}

}