자바에서 키보드 입력
System.in : 키보드로부터 직접 읽는 자바의 표준 입력 스트림
키 값을 바이트(문자 아님)로 리턴
System.in을 사용할 때 문제점 : 키 값을 바이트 데이터(0과 1)로 넘겨주므로 응용프로그램이 문자 정보로 변환해야 함.
Scanner로 쉽게 키 입력
Scanner 클래스
System.in에게 키를 읽게 하고 읽은 바이트를 문자, 정수, 실수, boolean, 문자열 등 다양한 타입으로 변환하여 리턴
import java.util.Scanner 필수!
예제
import java.util.Scanner;//헤더 파일 같은 것
public class Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//System.in 대신에 파일과 scanner도 연결 가능 -> 파일 입출력
//중략
sc.close(); -> 안 하면 메모리 남용
}
}
System.in 에게 키를 읽게 하고 원하는 타입으로 변환하여 리턴.
Scanner에서 키 입력받기
Scanner는 입력되는 키 값을 공백 문자를 기준으로 분리(토큰)
분리된 토큰 단위로 읽음
공백 문자 : '\t', '\f', '\r', ' ', '\n'
개발자가 원하는 다양한 타입의 값으로 바꾸어 읽을 수 있음
예제
import java.util.Scanner;
public class Scanner_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name = sc.next();
String city = sc.next();
int age = sc.nextInt();//자료형 선언 떄와 달리 자료형은 다 대문자로 시작
double weight = sc.nextDouble();
boolean single = sc.nextBoolean();
System.out.println(name+city+age+weight+single);
}
}
Scanner 주요 메소드
String next() 다음 토큰을 문자열로 리턴// 여기서 앞의 String은 반환하는 자료형을 의미
byte nextByte()
short nextShort()
int nextInt()
long nextLong()
float nextFloat()
double nextDouble()
boolean nextBoolean()
String nextLine() '\n'을 포함하는 한 라인을 읽고 '\n'을 버린 나머지 문자열 리턴
-> 즉 공백을 포함한 한 라인을 읽는다는 것이 next()함수와의 가장 큰 차이이다!
void close() Scanner의 사용 종료
boolean hasNext() 현재 입력된 토큰이 있으면 true, 아니면 입력 때까지 무한정 대기
새로운 입력이 들어올 때 true리턴, ctrl + z키가 입력되면 끝이므로 false 리턴
//버퍼 비울 때 좋겠네
ex.
boolean x = true;
while(x)
{
x = sc.hasNext();
}
이러면 버퍼를 비우고 ctrl + z가 들어오면 다음 명령으로 넘어갈 수 있다.
Scanner예제 - nextline()
import java.util.Scanner;
public class NextLine {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = "";
System.out.println("원하는 내용을 입력하세요: ");
input = sc.nextLine();
System.out.println("입력 내용: " + input);
sc.close();
System.out.println("프로그램 종료");
}
}
예제 - Scanner를 이용한 키 입력 연습
import java.util.Scanner;
public class KeyPractice {
public static void main(String[] args) {
System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요");
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext())//hasNext함수는 버퍼를 비우지 않는다.
{
String name = scanner.next();
if(name.equals("quit")) break;
System.out.print("Name: " + name + ", ");
String city = scanner.next();
System.out.print("City: " + city + ", ");
int age = scanner.nextInt();
System.out.print("Age: " + age + ", ");
double weight = scanner.nextDouble();
System.out.print("Weight: " + weight + ", ");
boolean single = scanner.nextBoolean();//
System.out.println("Marriage: " + single);
//scanner.close() : 예외 발생
}
scanner.close();
System.out.println("Scanner closed");
}
}
if, else, else if, for, while은 C에서 배웠으므로 생략
switch 문 예제
import java.util.Scanner;
public class Switch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char grade;
System.out.println("정수를 입력하세요 (0 ~ 100): ");
int score = scanner.nextInt();
switch(score/10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7 :
grade = 'C';
break;
case 6:
grade = 'D';
break;
default :
grade = 'F';
}
System.out.println("학점은 " + grade + "입니다.");
scanner.close();
}
}
break문을 만나면 switch문을 벗어나고 break문이 없다면 다음 case문으로 실행 계속
->default도 무조건 실행되어버린다.