기록하는 공부

[백준 9086] 문자열 (런타임에러 수정) 본문

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
반응형