새소식

Java

[JAVA] 입력 방법

  • -
728x90
[JAVA] - 입력 방법

 

2가지 입력 방법에 대해 설명하고자 한다.

: 출력에서 System 클래스 ( System.out.println() ) ,BufferedReader , StringBuilder, StringBuffer 을 이용해왔다.

이와 반대로 입력 방법 또한 여러가지가 있다.

1. Scanner

import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
		int A = in.nextInt();
		int B = in.nextInt();
		
		System.out.println(A+B);
 
		in.close();
	}
}

: 가장 기초적인 입력 방법, Scanner 클래스

 

Scanner 패키지는 java.tuil 패키지에 있기 때문에 java.util.Scanner; 을 해주어야 한다.

그리고 반드시 Scanner 의 첫 단어는 대문자로.

 

객체를 생성해주는데 Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

 

참고로 String 입력 방법에 in.next() 와 in.nextLine() 이 있는데 두 가지는 입력 받는 방식이 다르다.

  • in.next() : 문자열 입력시 공백 전 까지만 받음
  • in.nextLine() : 문자열 입력시 Enter 입력 전까지만 받음

상황에 맞게 선택해주면 되지만 next() 의 경우 에러가 발생할 수 있는 경우가 많아

대부분 문제에서는 행 단위로 입력받는 일이 다수이니 문자열 입력 형태로는 in.nextLine() 을 쓴다.

 

2. BufferedReader

BufferedReader 의 경우 문자열을 받는 대표적인 방법은 readLin() 과 read() 이다.

둘의 차이는 readLin() 은 한 행을 읽어오고, read() 는 한 문자만 읽어온다. ( 대부분의 경우에 readLine() 을 사용 )

 

import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
 
		int a = in.nextInt();
		int b = in.nextInt();
		System.out.println(a+b);
	}
}

위의 코드에 '3 5' 를 입력했을 경우 a 에는 3, b 에는 5가 저장되었을 것이다.

 

하지만 BufferedReader의 경우 read() 도 똑같이 되지 않고 공백을 인식한다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(InputStreamReader(System.in));
		int a = br.read()-48;
		int b = br.read()-48;
		System.out.println(a+b);
	}
}

위의 코드에선 a 에는 3이 저장되지만 b 에는 '공백'문자 아스키 코드값인 35에 48을 뺀 -13이 저장될 것이다.

 

위와같은 read() 메소드의 슬픈 사연들로 10 이상의 값을 받고 싶을 때 쓰기가 매우 복잡해진다.

고로 BufferedReader 을 쓸 때는 readLine() 으로 쓰게 된다.

 

readLine() 을 통해 입력 받아 연산하는 방법 두 가지를 설명할 것이다.

앞서 말했듯이 readLine() 은 한 행을 전부 읽기 때문에 공백단위로 입력해 준 문자열을 공백단위로 분리해주어야 문제를 풀 수 있을 것이다.

 

이러한 경우에 있어 StringTokenizer 를 사용해주면 된다.

 

StringTokenizer 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
        
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
 		String str = br.readLine();
		StringTokenizer st = new StringTokenizer(str," ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		
		System.out.println(a+b);
	
/*    
굳이 String 변수 생성 안하고 입력과 동시에 구분자로 분리해줘도 된다.
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		int a = Integer.parseInt(st.nextToken());
		int b = Integer.parseInt(st.nextToken());
		
		System.out.println(a+b); 
        
*/
	}
}

: 공백을 단위로 String 배열에 각각 저장하는 방법이다.

 

출처 : https://st-lab.tistory.com/12

728x90

'Java' 카테고리의 다른 글

[JAVA] 스프링과 객체지향  (0) 2023.10.15
커넥션 풀(Connection Pool)이란  (0) 2023.07.31
Spring 과 SpringBoot 의 차이점  (0) 2023.07.31
HashMap  (0) 2022.10.20
오버로딩(Overloading) & 오버라이딩(Overriding)  (0) 2022.09.11
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.