기록하는 공부
[백준 9086] 문자열 (런타임에러 수정) 본문
728x90
반응형
문제출처
https://www.acmicpc.net/problem/9086
오류발생코드
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
반응형
'Language > Java' 카테고리의 다른 글
[인프런/강의 복습] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (0~1) / intelliJ 설치 / jdk 11 설치 / cmd에서 스프링 프로젝트 빌드하고 실행하기 (0) | 2023.06.24 |
---|---|
[백준 11654] 아스키 코드(방법 2가지/scanner/system.in) (0) | 2023.04.05 |
[백준 5597] 배열 선언 (3가지 방법) (0) | 2023.03.27 |