Programming/Java

[JAVA] 입력클래스 System.in 와 Scanner

Criming 2022. 10. 4. 02:09

System.in.read( )

  • 문자를 하나씩만 가져올 수 있다.
  • 입력받은 값 중 첫번째 문자를 아스키코드 값을 기준으로 십진수로 표현해준다.
  • 정수형(int)으로 입력한 값을 그대로 가져올 때는 아스키 코드 번호에 48를 빼주면 된다.
  • 영문대문자 문자형을 소문자로 출력하고 싶으면 아스키 코드 번호에 32를 더해주면 된다.
  • 문자형(char)로 가져올 때는 아스키 코드를 캐스팅으로 형변환해면 된다.
  • 예외처리를 해주어야한다.

 

예제1) 위 특징들 예제로 살펴보기

import java.io.IOException;
// import java.io.IOException;와 throws IOExceptionsms는 예외처리를 위한 구문

public class Ex2 {

	public static void main(String[] args) throws IOException {
		int data1, data2, data3, data4, data5;
		System.out.print("첫번째 데이터 입력 : ");
		data1 = System.in.read();
		System.out.println("첫번째 데이터 출력 : " + data1);
		System.in.read();System.in.read(); // 문자 하나만 입력받기 위해 임시작성함.
		
		System.out.print("두번째 데이터 입력 : ");
		data2 = System.in.read();
		System.out.println("두번째 데이터 출력 : " + (char)data2);
		System.in.read();System.in.read();
		
		System.out.print("세번째 데이터 입력 : ");
		data3 = System.in.read();
		System.out.println("세번째 데이터 출력 : " + (int)data3);
		System.in.read();System.in.read();
		
		System.out.print("네번째 데이터 입력 : ");
		data4 = System.in.read();
		System.out.println("네번째 데이터 출력 : " + (data4-48));
		System.in.read();System.in.read();

		System.out.print("다섯번째 데이터 입력 : ");
		data5 = System.in.read();
		System.out.println("다섯번째 데이터 출력 : " + (char)(data5+32));

	}
}

 

Scanner 클래스

Scanner클래스는 자바에서 배우는 기초적인 입력클래스로 객체를 생성 후 사용해야하며, 아래와 같은 여러 메서드들이 있다.

이 메서드들을 사용하면 원하는 자료형으로 변환하는 수고는 하지 않아도 된다.

 

input.next();

input.nextLine();          *해당 메서드는 줄바꿈(enter키)만 입력 끝값으로 인식하지만,

                                     이 외에 메서드는  띄어쓰기(space키)도 입력 끝으로 인식하므로 주의해야한다.

input.nextInt(); 
input.nextDouble();
input.nextByte();
input.nextShort();
input.nextLong();
input.nextBoolean();
input.nextFloat();

 

예제1) input.next() 와 input.nextLine() 메서드의 차이

import java.util.Scanner; // Scanner클래스를 사용하기 위해 추가

public class Ex3 {

	public static void main(String[] args) {
		// Scanner : 자료형, 참조자료형
		// input : 변수이름, 참조변수, 담기는 값은 참조(주소)값
		// new : 메모리에 공간 확보 후 Scanner 클래스의 내용을 담음. 
		Scanner input;
		input = new Scanner(System.in); // Scanner클래스 객체 생성
		System.out.println("참조 값 : " + input);
		
		System.out.print("데이터 입력 : ");
		String data = input.next();
		System.out.println("입력 받은 데이터 : " + data);
		
		input.nextLine(); // next 먼저 사용하게되면 공백을 인식하여 출력오류 생기므로 한번더 해줘야한다.
		System.out.print("데이터 입력 : ");
		data = input.nextLine();
		System.out.println("입력 받은 데이터 : " + data);
		input.close();
		/* 
		 	문자열 입력 받을 때 사용하는 메서드
			input.next(); --> 공백(space키)과 줄바꿈(enter키)을 입력 문자열의 끝으로 사용
			input.nextLine(); --> 줄바꿈만 입력 문자열의 끝으로 사용
		*/
		
	}
}

 

예제2) Scanner의 여러 메서드 사용

import java.util.Scanner;

public class Ex4 {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		System.out.print("정수 입력 : ");
		int data = sc.nextInt();
		System.out.println("입력받은 데이터 : " + data );
		
		System.out.print("체중 : ");
		double weight = sc.nextDouble();
		System.out.print("키 : ");
		float height = sc.nextFloat();
		
		System.out.println("체중 : " + weight);
		System.out.println("키 : " + height);
        
		sc.close(); // Scanner 객체 닫기
	}
}

 

예제3)  n번째 데이터 값 사용하는 메서드 : charAt(n-1) 사용해보기

import java.util.Scanner;

public class Ex6 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("문자 입력 : ");
		String data = sc.next();
		char charData1 = data.charAt(0);
		char charData2 = data.charAt(4);
		
		System.out.println("입력 받은 첫번째 문자 출력 : " + charData1);
		System.out.println("입력 받은 다섯번째 문자 출력 : " + charData2);
		
		sc.close();
	}
}

 

예제4)  세과목  점수 입력하여 합계구하기

import java.util.Scanner;

public class Quiz3 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		 
		System.out.print("당신의 이름은 무엇입니까? ");
		String name = sc.nextLine();
		
		System.out.print(name + " 님의 국어 점수 : ");
		int subject1 = sc.nextInt();
		System.out.print(name + " 님의 영어 점수 : ");
		int subject2 = sc.nextInt();
		System.out.print(name + " 님의 수학 점수 : ");
		int subject3 = sc.nextInt();
		
		System.out.println();
		System.out.println("=====================");
		System.out.println("이름 : " + name);
		System.out.println("=====================");
		System.out.println("국어 점수 : " + subject1);
		System.out.println("영어 점수 : " + subject2);
		System.out.println("수학 점수 : " + subject3);
		System.out.println("=====================");
		System.out.println("합계 : " + (subject1+subject2+subject3));
		System.out.println("=====================");
		
		sc.close();
	}
}