일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 계수정렬
- 안드로이드
- Median of Medians
- 재귀
- SNS
- 다이나믹프로그래밍
- 알고리즘
- 동적프로그래밍
- 퀵정렬
- 병합정렬
- DP
- 정렬
- 코딩테스트
- 선택정렬
- 수학
- 프로그래밍언어
- 자료구조
- 선택알고리즘
- 백준
- C++
- 프로그래밍
- 버블정렬
- 삽입정렬
- 힙정렬
- 자바
- 정수론
- java
- 백트래킹
- 기수정렬
- 동적계획법
- Today
- Total
MODE::CREATIVE
[JAVA] java의 입력(Scanner) 본문
1. 입력 처리
Java에서 입력 처리는 주로 System.in과 Scanner 클래스를 통해 이루어집니다. 입력 처리는 사용자와 프로그램이 상호작용할 수 있도록 하며, 다양한 데이터 타입의 값을 입력받을 수 있습니다.
1-1. System.in
System.in은 표준 입력 스트림으로, 바이트 단위로 데이터를 읽어옵니다. 하지만 System.in은 숫자나 문자를 직접 변환하지 않기 때문에, 대부분의 경우 직접 사용하기보다 Scanner와 함께 사용하는 것이 좋습니다.
InputStream input = System.in;
1-2. Scanner 클래스
Scanner 클래스는 java.util 패키지에 포함된 클래스로, 다양한 타입의 데이터를 입력받을 수 있도록 지원합니다. Scanner를 사용하려면 다음과 같이 import 문을 추가해야 합니다.
import java.util.Scanner;
1-3. Scanner 객체 생성
Scanner 객체는 System.in을 통해 입력된 데이터를 처리하도록 설정할 수 있습니다. 일반적으로 입력 처리를 위한 Scanner 객체는 프로그램 시작 시 생성하고, 더 이상 사용하지 않으면 닫아주는 것이 좋습니다.
Scanner scanner = new Scanner(System.in);
1-4. Scanner 메소드로 데이터 읽기
Scanner 클래스는 입력값을 다양한 데이터 타입으로 읽어올 수 있는 메소드를 제공합니다. 이 메소드를 사용하면 문자열뿐만 아니라 정수, 실수 등도 손쉽게 입력받을 수 있습니다.
- 문자열 입력:
nextLine()
또는next()
next()
: 공백 전까지의 단어를 읽음nextLine()
: 한 줄 전체를 읽음System.out.print("이름을 입력하세요: "); String name = scanner.nextLine(); // 줄 단위로 문자열 읽기
- 정수 입력:
nextInt()
-
System.out.print("나이를 입력하세요: "); int age = scanner.nextInt(); // 정수 입력
- 실수 입력:
nextDouble()
-
System.out.print("몸무게를 입력하세요: "); double weight = scanner.nextDouble(); // 실수 입력
- 논리값 입력:
nextBoolean()
-
System.out.print("독신 여부를 입력하세요 (true/false): "); boolean isSingle = scanner.nextBoolean(); // 논리값 입력
1-5. Scanner 메소드의 다양한 기능
Scanner 클래스는 문자열을 다양한 타입으로 변환할 수 있어 편리하며, 또한 특정 구분자를 기준으로 데이터를 분리하여 읽을 수 있는 기능도 제공합니다.
- 구분자를 기준으로 입력 나누기: 기본적으로 Scanner는 공백, 개행 문자 등을 기준으로 데이터를 구분하지만,
useDelimiter()
메소드를 통해 구분자를 지정할 수 있습니다.import java.util.Scanner; public class Main { public static void main(String[] args) { String input = "apple,banana,cherry"; Scanner scanner = new Scanner(input); scanner.useDelimiter(","); while (scanner.hasNext()) { System.out.println(scanner.next().trim()); } scanner.close(); } }
1-6. Scanner 예제
아래는 Scanner 클래스를 사용하여 다양한 데이터 타입을 입력받는 예제입니다.
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 문자열 입력
System.out.print("이름을 입력하세요: ");
String name = scanner.nextLine();
// 정수 입력
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
// 실수 입력
System.out.print("몸무게를 입력하세요: ");
double weight = scanner.nextDouble();
// 논리값 입력
System.out.print("독신 여부를 입력하세요 (true/false): ");
boolean isSingle = scanner.nextBoolean();
// 출력
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("몸무게: " + weight);
System.out.println("독신 여부: " + isSingle);
// Scanner 객체 닫기
scanner.close();
}
}
1-7. 입력 예외 처리
입력값이 예상한 타입과 다를 경우 예외가 발생할 수 있습니다. 예를 들어, nextInt()
메소드를 사용할 때 숫자가 아닌 값을 입력하면 InputMismatchException
이 발생합니다. 이를 방지하기 위해 try-catch 문을 사용하여 예외를 처리할 수 있습니다.
try {
System.out.print("나이를 입력하세요: ");
int age = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("유효한 숫자를 입력해 주세요.");
scanner.next(); // 버퍼에 남은 잘못된 입력 제거
}
1-8. Scanner와 System.in 주의사항
- 버퍼 문제:
nextInt()
와nextLine()
을 혼용할 경우 입력 버퍼에 개행 문자가 남아 다음 입력에 영향을 줄 수 있습니다. 이를 방지하기 위해nextLine()
을 사용해 버퍼를 비울 수 있습니다. -
int age = scanner.nextInt(); scanner.nextLine(); // 남은 개행 문자 제거 String name = scanner.nextLine();
- Scanner 객체 닫기: 프로그램 종료 시
scanner.close()
를 호출해 Scanner 객체를 닫아 자원을 해제하는 것이 좋습니다. 다만, 여러 입력 처리를 위해 반복적으로 Scanner를 닫고 새로 생성하지 않는 것이 바람직합니다.
1-9. Scanner로 파일 입력 처리
Scanner는 파일 입력을 처리할 때도 유용하게 사용할 수 있습니다. File
객체와 함께 Scanner를 생성하여 파일의 내용을 읽을 수 있습니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileInputExample {
public static void main(String[] args) {
try {
File file = new File("data.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
System.out.println("파일을 찾을 수 없습니다.");
}
}
}
이처럼 Scanner 클래스는 다양한 입력을 손쉽게 처리할 수 있어 Java의 입력 처리에 중요한 역할을 합니다. nextLine()
과 nextInt()
메소드 등 Scanner의 다양한 기능을 이해하고 활용하면, 입력 데이터를 효과적으로 관리할 수 있습니다.
'JAVA' 카테고리의 다른 글
[JAVA] 자바의 배열(Array) (0) | 2025.01.11 |
---|---|
[JAVA] java의 입력(Buffered reader) (0) | 2024.11.17 |
[JAVA] java의 연산자, 조건문, 반복문 (1) | 2024.11.10 |
[JAVA]Java 프로그램의 기본 구조, 데이터 타입 (1) | 2024.11.10 |
[JAVA]Java 언어의 특징과 구조 (9) | 2024.11.10 |