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( )을 적절히 사용해 주어야 한다.
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를 이용하여 간단한 계산기 프로그램을 작성
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);
}
}
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);
}
}
'자바(JAVA)' 카테고리의 다른 글
[자바(Java)] 멤버 필드 vs 지역 변수(로컬 변수) (0) | 2022.10.04 |
---|---|
[자바(Java)] 초기화, 메서드 오버로딩 (0) | 2022.09.29 |
[자바(Java)] String (1) | 2022.09.23 |
[자바(Java)] 배열(Arrays) (0) | 2022.09.22 |
[자바(Java)] 제어문 - 반복문 (0) | 2022.09.22 |