백준 알고리즘 문제(27) - A+B-4

이번에는 아예 오류가나서 찾아봤다.

아 컴파일이 안되던 이유는 계속해서 입력받는 값이 null값이 되거나 Scanner에서는 예외처리가 된다.(NosuchElement)

그래서 whiled의 조건에
1. Scanner는 hasnextInt()를 통해 정수일땐 true, 정수가 아닐땐 false를 반환하도록 한다.

  1. BufferedReader는 무한정 입력되는 값에 대해서 null값을 반환하므로 while문의 조건안에 str(br.readLine()) != null, 즉 입력받는 값이 null값일 때 false가 되도록 조건을 넣어줘야만 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class  Main {

	public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        String str;
        
        while((str = br.readLine()) != null) {
        	st = new StringTokenizer(str," ");
        	int A = Integer.parseInt(st.nextToken());
        	int B = Integer.parseInt(st.nextToken());
        	sb.append((A+B)).append('\n');
        }
        
        System.out.println(sb);
        
        }
	}

null을 조건에 넣어주고 밖에 str을 입력받을 값을 저장하는 공간으로 지정해줘야만 한다.
str 이라는 문자열이 필요한 이유는 저장할 공간이 존재해야 그 안에서 값을 바꿔가며 null의 여부를 검사할 수 있어서이다. while 조건에서는 str값에 매 반복마다 달라지는 입력값을 저장한 즉시 str을 검사한다.
str이 값을 가지고있으면 st에 파라미터 값을 주며 그 다음 연산이 진행되게 한다.

EOF(End of File) : 파일 종료 조건이 없이 입력이 주어져서 입력에서 더이상 읽을 수 있는 데이터가 존재하지 않을 때, 반복문을 종료하라는 것임.

분명 반복이 안끝나는 문제가 있을테고 try & catch문을 이용하지 않는 경우에는 이런식으로 null값을 방지해주는게 필요해보인다.

좋은 웹페이지 즐겨찾기