일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 맥북
- M1
- sort정렬
- 깃허브
- JDK
- 문자열 숫자 변환
- 알고리즘
- Java
- 안드로이드 스튜디오
- 백준
- 노선별 평균 역 사이 거리 조회하기
- 프로그래머스
- OAuth 인증
- 해시
- 27866
- SQL코딩테스트
- HashMap
- 포맷 지정자
- github
- MAC OS
- Iterator
- Android Studio
- 프로그램서
- 자바
- Eclipse
- 코딩테스트
- mysql
- homebrew
- 가격이 제일 비싼 식품의 정보 출력하기
- 핸드폰 가리기
- Today
- Total
개발일지
[백준 JAVA] 10952번: A + B - 5 / 10951번: A + B - 4 본문
#10952번: A + B - 5
문제
풀이
import java.util.Scanner;
public class Main_10952 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(true) {
int a = in.nextInt();
int b = in.nextInt();
if ( a == 0 && b == 0) {
in.close();
return;
}
System.out.println(a + b);
}
}
}
- while문을 실행시켜 a, b를 입력 받고
- 조건문을 이용해 ' a = 0, b = 0' 일 경우에는 프로그램을 종료하고, 아닐 경우에는 a + b값을 출력한다.
if ( a == 0 && b == 0) {
in.close();
break;
}
- return; 대신 break;을 사용해도 된다.
#10951번: A + B - 4
문제
풀이
- 이 문제는 파일 종료의 조건 없이 입력만 주어졌다.
과정
import java.util.Scanner;
public class Main_10951 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(true) {
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a + b);
}
}
}
- 위와 같은 코드를 작성하였는데 컴파일 에러가 났다.
- 프로그램이 끝이 나지 않고 계속 돌아가기 때문에 에러가 난 것 같다.
EOF
EOF (End of File)
- 즉, 입력에서 더이상의 읽을 수 있는 데이터가 존재하지 않을 때 반복문을 종료하라는 것이다.
- EOF를 처리하는데는 여러 방법이 있는데 그 중 Scanner에서 사용하는 방법을 알아보고자 한다.
Scanner
- Scanner는 더 이상 읽어들일 정보가 없으면 예외(NoSuchElementException)를 던진다.
1. try-catch문을 이용해 예외 발생시 반복문을 종료시켜준다.
2. Scanner의 메소드인 hasNext()를 이용한다.
저는 hasNext()를 이용했습니다.
※ 주의
우리가 입력을 받는 System.in (키보드로 입력받는 경우 Scanner)은 Enter, Space도 데이터로 인식하고 정보로 받아들인다.
따라서 조건문을 걸어 " "(공백) 이나 '\n' (엔터)의 경우는 예외를 발생시켜 종료시키도록 해야 한다. (백준 문제는 해당되지 않음)
그러나 IDE나 터미널에서 우리가 입력을 할 경우 공백이나 엔터를 치더라도 이 또한 데이터가 스트림에 넣어지기 때문에 예외로 판단되지 않는다. 결국
반복문을 종료시키려면 hasNextInt()에서 EOF를 입력(ctrl + z)를 해주거나 정수가 아닌 문자열을 입력하는 등 다른 타입의 입력을 주어 InputMismatchException을 던져주어야 한다.
참고) https://st-lab.tistory.com/40
import java.util.Scanner;
public class Main_10951 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a + b);
}
in.close();
}
}
- 위 코드와 같이 hasNextInt()를 사용해 입력값이 있을 때 while문이 실행되도록 해줘야 한다.
참고)
'Java > 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 10807번: 개수 세기 / 10871번: X보다 작은 수 / 10818번: 최소, 최대 / 2562번: 최댓값 /5597번: 과제 안 내신 분...? (0) | 2023.01.31 |
---|---|
[백준 JAVA] 1110번: 더하기 사이클 (0) | 2023.01.31 |
[백준 JAVA] 2438번: 별 찍기 - 1 / 2439번: 별 찍기 - 2 (0) | 2023.01.30 |
[백준 JAVA] 15552번: A + B / #11021번: A + B - 7 /#11022번: A + B - 8 (0) | 2023.01.29 |
[백준 JAVA] 10950번: A + B - 3 / 8393번: 합 / 25304번: 영수증 (0) | 2023.01.27 |