자바 프로그래밍 - Unit 2 자바 기본 (2)

honeyricecake·2022년 3월 27일
0

학교 수업 - 자바

목록 보기
5/16

자바에서 키보드 입력

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도 무조건 실행되어버린다.

0개의 댓글