언어 공부 내용 정리/백준

백준 자바 10952,10951

wosrn 2023. 5. 24. 23:38



package Baekjoon;
import java.util.Scanner;

public class Main{
	
	
	public static void main(String args[]) {
	
   
    Scanner input = new Scanner(System.in);
    
 
    while(true) {
    	int a = input.nextInt(); 
        int b = input.nextInt();
        if(a==0 && b==0)  break;
    	System.out.println(a+b);
    	
    }
	}
	
}


0 0 을 입력받을때 까지 a와 b의 합을 계속해서 출력해야 하기에, 무한루프를 활용하면 쉽게 풀리는 문제다

if문과 출력문 순서를 바꿔쓰면 0 0의 합인 0도 출력되니까 if문을 꼭 출력문 앞에 써야한다

import java.util.Scanner;

public class Main{
	
	
	public static void main(String args[]) {
	
   
    Scanner input = new Scanner(System.in);
    
 
    while(input.hasNextByte()) {
    	byte a = input.nextByte(); 
        byte b = input.nextByte();
      
    	System.out.println(a+b);
    	
    } 
	}
	
}

막혔던 문제.. 처음에 그냥 단순히 true를 사용한 무한루프문으로 작성했었다 이클립스 상에선 입력을 더 안하면 출력도 멈추기 때문에 그래도 되는줄 알았는데 제출하니 런타임에러가 떴다..!

백준 자바 런타임에러를 서치해보니 보통 패키지나 클래스이름 관련한 실수가 많았다 그건 다 아닌데,,

결국 이 문제를 서치했더니 eof 개념과 관련된 오류라는걸 알아냈다.

EOF는 end of file의 약자로 더이상 읽을 데이터가 없다는 것을 의미하는, 입력할 데이터의 개수가 주어지지 않았을 때 그 코드의 종료시점에 관한 용어이다.

코드상에 입력을 더 안하면 실행을 중단한다는 내용의 코드를 작성하지 않아서 오답이었던 것이다

그럼 어떻게 입력을 더 안하는지를 체크할 것인가 ? hasNextByte() (혹은 hasNextInt()) 메소드 이용 ! 이 메소드는 byte/int를 입력 받는 경우엔 true를, 받지 않는 경우에는 false를 반환해주는 메소드이다.