Language/Java
[백준 9086] 문자열 (런타임에러 수정)
SS_StudySteadily
2023. 4. 5. 00:06
728x90
반응형
문제출처
https://www.acmicpc.net/problem/9086
9086번: 문자열
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으
www.acmicpc.net
오류발생코드
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++) {
String s = sc.next();
char sf = s.charAt(0);
char sb = s.charAt(s.length()-1);
System.out.print(sf+sb+"\n");
}
sc.close();
}
}
charAt를 문자로 받으려면 char 변수형으로 받을 수 없나? 라는 의문이 생겼다.
이 코드에서는 컴파일 에러는 없지만, 런타임 에러가 발생할 가능성이 있다.
문제는 sf와 sb가 char로 선언되어 있고, 이들을 덧셈 연산자로 합치려고 할 때이다.
char 타입은 연산이 가능하지만, 덧셈 연산은 두 문자를 ASCII 코드 값으로 변환한 후 합치기 때문에,
예상과 다른 결과를 가져올 수 있다.
따라서, sf와 sb를 String으로 변경하여 연결해주어야 한다.
이를 위해 sf+sb 대신 String.valueOf(sf) + String.valueOf(sb)를 사용하는 것이 좋다.
아래는 수정된 코드이다.
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++) {
String s = sc.next();
char sf = s.charAt(0);
char sb = s.charAt(s.length()-1);
System.out.println(String.valueOf(sf) + String.valueOf(sb));
}
sc.close();
}
}
올바른 코드
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++) {
String s = sc.next();
String sf = String.valueOf(s.charAt(0));
String sb = String.valueOf(s.charAt(s.length()-1));
System.out.print(sf+sb+"\n");
}
sc.close();
}
}
charAt를 문자로 받으려면 String 변수로 받아야 한다.
이때, String.valueOf() 사용
728x90
반응형