처음 백준 문제를 풀때 가장 많이 헷갈리는 부분이 입출력을 어떻게 받는가이다.
아직 StringTokenizer의 사용법이 헷갈려서 오류가 뜰 때가 많다.
처음에 가장 많이 떳던 오류는 NoSuchElementException였다.
아직 정확한 원인은 모르지만
nextToken으로 받은 후 값을 사용하지 않고 바로 nextToken을 사용하여 다른 값을 받으려고 하면 뜬다.
또 StringTokenizer는 무조건 '공백'으로만 입력받는다! 줄 단위로 입력받고 싶으면 그냥 readLine()을 바로 쓰면 된다.
추후에 다른 오류들을 만나며 더 알아봐야겠다.
이번에는 백준 2675번 문제를 풀던 중 다음과 같이 ArrayIndexOutOfBoundsException이 발생하였고 해석해보면 인덱스 1은 배열 1의 길이를 벗어낫다고 한다.
처음에 짠 코드는 다음과 같다.
import java.io.*;
import java.util.StringTokenizer;
import java.util.*;
public class baek_2675 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 1; i <= T; i++) {
String[] input = st.nextToken().split(" ");
for(int j=0; j<input[1].length(); j++) {
bw.write((input[1].charAt(j)+"").repeat(Integer.parseInt(input[0])));
}
//줄바꿈
bw.write("\n");
}
br.close();
bw.flush();
bw.close();
}
}
2
3 ABC
5 /HTP
의 입력값을 넣어줘야 하는데
2
3 ABC까지 입력하자마자 다음과 같은 오류가 발생하였다.
디버깅을 해보니 input 배열에 3값만 들어간 후 바로 for문이 돌아가서 생긴 문제였다.
StringTokenizer는 입력 시 문자열을 공백 단위로 입력받을때 사용한다.
StringTokenizer st = new StringTokenizer(br.readLine()); 부분에서 이미 한줄 단위로 입력을 받고
st.nextToken() 사용 시 공백 단위로 입력을 받는다.
따라서 처음 공백단위로 입력받은 st값은 3 이므로 input배열에는 3의 값만 들어가는 것이다.
이 경우 split(" ")으로 공백 단위로 나눠 입력받고 있으므로 굳이 nextToken()을 사용할 필요가 없다.
한 줄 단위로 입력 받으면 된다.
따라서 다음과 같이 코드를 바꾸니 해결되었다.
import java.io.*;
import java.util.StringTokenizer;
import java.util.*;
public class baek_2675 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int i = 1; i <= T; i++) {
String[] input = br.readLine().split(" ");
for(int j=0; j<input[1].length(); j++) {
bw.write((input[1].charAt(j)+"").repeat(Integer.parseInt(input[0])));
}
//줄바꿈
bw.write("\n");
}
br.close();
bw.flush();
bw.close();
}
}
원하는 출력값을 얻을 수 있었다.
'Error' 카테고리의 다른 글
@MapStruct 이 제대로 작동하지 않는 오류 (0) | 2022.12.11 |
---|---|
E2C 인스턴스 연결 후 bash shell에서 git clone 시 실패하는 오류 (0) | 2022.12.02 |
wls에서 gui로 바로열기 (2) | 2022.11.18 |
Spring - @MapStruct로 MapperImpl생성 시 입력값으로 null이 들어오는 오류 (0) | 2022.10.31 |
Spring - NoSuchBeanDefinitionException오류 (0) | 2022.10.26 |