[BOJ]Java - A+B-2 / 입력 받기

정상희·2022년 9월 24일

BOJ

목록 보기
3/4
post-thumbnail

문제3 : A와 B를 입력받고 A+B를 출력

앞의 A+B문제(1000)는 첫째 줄에 A와 B가 오면 되지만,
이번 A+B문제(2558)는 첫째 줄에 A, 둘째 줄에 B가 오도록 구현해야 한다.


런타임 에러는 처음 본다.
java의 콘솔에서 여러 줄을 입력받는 방법을 서치하여 찾아보았다.



Java의 콘솔에서 입력받는 방법


1. 단일 스캐너 사용

단일 스캐너로 각 라인을 읽을 수 있다.
Scanner.nextLine()으로 값을 받고, String.split() 또는 StringTokenizer로 문자열을 나누는 방식이다.

Scanner.nextLine() Enter을 포함하여 string값을 입력받는 메소드
String.split() split(" ")의 내용에 따라 입력받은 string을 나누는 메소드
StringTokenizer() StringTokenizer 클래스의 생성자 메소드. 사용하기 위해서는 import java.util.StringTokenizer을 해주어야 한다.

  • "\\s"는 공백을 나타내는 정규표현
import java.util.Arrays;
import java.util.Scanner;
 
class Main
{
    // `Scanner` 클래스를 사용하여 Java에서 여러 줄 입력 읽기
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
 		
        while (scanner.hasNextLine())
        {
            String[] tokens = scanner.nextLine().split("\\s"); 	
            System.out.println(Arrays.toString(tokens));
        }
 
        scanner.close();
    }
}

hasNextLine() 다음에 읽을 값이 있으면 true를 반환하는 boolean 메소드
Arrays.toString(배열주소) 배열을 리스트 형태로 출력해주는 메소드

한 줄 한줄 각각 따로 값이 입력된다.

2. 두 대의 스캐너 사용


- 하나는 Scanner.nextLine()로, 다른 하나는 Scanner.next()로 입력받는다. - List 인터페이스를 사용하여 ArrayList 객체를 생성한다 이때 클래스 하나로 여러 타입의 객체를 생성할 수 있는 제네릭 타입이 들어갔다.
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
 
class Main
{
    // 두 개의 `Scanner` 인스턴스를 사용하여 Java에서 여러 줄 입력을 읽습니다.
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
 
        while (scanner.hasNextLine())
        {
            List<String> tokens = new ArrayList<>();
            Scanner lineScanner = new Scanner(scanner.nextLine());
 
            while (lineScanner.hasNext()) {
                tokens.add(lineScanner.next());
            }
 
            lineScanner.close();
            System.out.println(tokens);
        }
 
        scanner.close();
    }
}


3. BufferdReader 클래스 사용

BufferedReader의 java 클래스
readLine()으로 값을 읽고, String.split() 또는 StringTokenizer로 분할한다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
 
class Main
{
    // `BufferedReader` 클래스를 사용하여 Java 에서 여러 줄 입력 읽기
    public static void main(String[] args)
    {
        try (InputStreamReader in = new InputStreamReader(System.in);
            BufferedReader buffer = new BufferedReader(in))
        {
            String line;
            while ((line = buffer.readLine()) != null)
            {
                String[] tokens = line.split("\\s");
                System.out.println(Arrays.toString(tokens));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

출처 : https://jhnyang.tistory.com/92
https://www.techiedelight.com/ko/read-multi-line-input-console-java/

BufferedReader을 이용한 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class BufferReaderEx {

	public static void main(String[] args) {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

			StringTokenizer st = new StringTokenizer(br.readLine());
			int a = Integer.parseInt(st.nextToken());
			st = new StringTokenizer(br.readLine());
			int b = Integer.parseInt(st.nextToken());

			bw.write(String.valueOf(a + b));// valueof는 Stringclass의 메소드

			br.close();
			bw.flush();
			bw.close();
            
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}
profile
기록중

0개의 댓글