충분히 쌓여가는
System.in / 구분문자(delimiter) 본문
표준 출력을 위해 System.out이 있듯이, 표준 입력을 위해 System.in이 있다
System.in은 키보드로부터 입력을 받아드리고 표준 입력 대신 콘솔 입력(console input)이라는 용어 사용함
입력을 위해 System.in을 사용하는 것은 출력을 위해 System.out을 사용하는 것보다 복잡함
System.in
- InputStream 클래스의 한 객체: read 메소드로 한 번에 한 바이트(byte)를 읽는 기능 제공
- 문자열과 같이 많이 사용되는 유형의 데이터를 나타내기 위해 여러 바이트들이 요구됨
- java.util 패키지 내의 Scanner 클래스는 여러 유형의 입력 값들을 읽어 들이기 위한 편리한 메소드 제공
import java.util.Scanner;
- 한 프로그램 내에서 Scanner 클래스를 편리하게 사용하기 위해서 프로그램의 맨 앞에 import java.util.Scanner 이라는 import 문을 포함할 수 있다
- 그러면 프로그램 내에서 Scnner 클래스를 나타내기 위해 java.util.Scanner 대신에 Scanner라고 사용할 수 있다
Scanner scan = new Scanner(System.in);
- 데이터를 키보드로부터 대화식으로 읽어 들이기 위해 먼저 Scanner 객체를 생성해야함
- 키보드로부터 데이터를 읽는 Scanner 객체를 생성, 변수 scan이 그 객체를 가리키게 함
- Scanner 객체는 여러 종류의 입력 메소드를 호출하기 위해 사용됨
String answer = scan.nextLine();
- 현재 줄에 남아 있는 모든 입력을 한 문자열로 읽어 들여 answer라는 String 형 변수에 저장함
Scanner 객체를 사용하여 사용자가 키보드로부터 여러 유형의 값들을 읽어 들이는 주요 메소드 | |
String next() | 다음 입력 토큰을 한 문자열로 반환 |
String nextLine() | 현 줄에 남아 있는 모든 입력을 한 문자열로 반환 |
int nextInt() | 다음 입력 토큰을 한 정수로 반환 |
double nextDouble | 다음 입력 토큰을 한 double 형 실수로 반환 |
float nextFloat | 다음 입력 토큰을 한 float 형 실수로 반환 |
구분 문자(delimiter)
- 다르게 지정하지 않는다면 Scanner 객체는 흰색 공간 문자들(빈 칸, 빈 줄, Tab 키)을 이용하여 입력의 구성요소(토큰)들을 서로 분리시킴
adam 12 825-1234
- 세 개의 토큰들(adam, 12, 825-1234)로 구분됨
- 구분 문자들을 입력 토큰들이 다른 문자들에 의해 구분된다면 바뀔 수 있음
- 구분 문자에 -가 추가된다면 네 개의 토큰들(adam, 12, 825, 1234)로 구분됨
간단한 입력문을 사용한 자동차의 연비를 계산하는 프로그램
- 연비 = 주행거리 / 사용한 휘발유 양
// 자동차 연비 계산
import java.util.Scanner;
public class CalFuelEfficiency {
public static void main(String[] args) {
double driveDistance; // 주행거리
double fuels; // 사용한 휘발유 양
double fuelEfficiency; // 연비
Scanner scan = new Scanner(System.in);
System.out.println("주행거리 입력하세요: ");
driveDistance = scan.nextDouble();
System.out.println("사용한 휘발유 양을 입력하세요: ");
fuels = scan.nextDouble();
fuelEfficiency = driveDistance / fuels;
System.out.println("연비: " + fuelEfficiency);
}
}
원의 반지름이 주어지면 면적을 계산하는 프로그램
- 면적 = 원주율 X 반지름 X 반지름
import java.util.Scanner; // Scanner 클래스 이용
public class ComputeArea {
public static void main(String[] args) {
// 상수, 변수 선언
final double PI = 3.14159; // 원주율
double radius; // 반지름
double area; // 면적
Scanner scan = new Scanner(System.in); // Scanner 객체를 만들어 객체의 nextDouble 메소드 호출
System.out.print("원의 반지름 입력하세요: ");
radius = scan.nextDouble();
area = PI * radius * radius;
System.out.println("원의 면적은 " + area + "입니다.");
}
}