Java
[Java] 자바 프로그래밍 시 잊기 쉬운 코딩 주의사항들
haehyun
2021. 10. 18. 18:48
728x90
문자열과 기본형 간의 형변환
(ex: 사용자가 입력한 String값을 Int형으로 변환)
parseInt()나 parseFloat()과 같은 형변환 메서드는 매개변수로 받는 문자열에 공백 또는 문자가 포함되어 있는 경우 변환 시 예외(NumberFormatException)가 발생할 수 있으므로 형변환 전 trim()메서드를 통해 앞뒤 공백을 제거해주고, 정수가 아닌 값을 입력했을 때를 대비한 예외처리(try~catch)를 해둘 것을 권장.
아래는 사용자에게 입력받은 값(String)을 정수로 변환한 뒤 정답 값과 비교하는 숫자맞추기 게임의 소스코드이다.
//숫자 맞추기 게임
import java.util.*;
public class StringParseEx {
public static void main(String[] args) {
//1~100사이의 임의의 값을 얻어서 answer에 저장
int answer = (int)(Math.random()*100 + 1);
String inputStr; //사용자 입력 값
int inputNum;
do {
System.out.print("1과 100사이의 값을 입력하세요 :");
inputStr = new Scanner(System.in).nextLine();
inputNum = Integer.parseInt(inputStr); //String -> int 형변환
if(answer > inputNum) {
System.out.println("더 큰 수를 입력하세요.");
} else if(answer < inputNum) {
System.out.println("더 작은 수를 입력하세요.");
} else {
System.out.println("맞췄습니다.");
break;
}
} while(true);
}
}
}
정수를 입력했을 경우
앞에 공백이 포함된 정수를 입력했을 경우
문자열을 입력했을 경우
공백과 문자열 입력 등 예외를 처리한 코드는 아래와 같다.
import java.util.*;
public class StringParseEx {
public static void main(String[] args) {
//1~100사이의 임의의 값을 얻어서 answer에 저장
int answer = (int)(Math.random()*100 + 1);
String inputStr; //사용자 입력 값
int inputNum;
do {
System.out.print("1과 100사이의 값을 입력하세요 :");
try {
inputStr = new Scanner(System.in).nextLine();
inputNum = Integer.parseInt(inputStr.trim()); //공백제거 후 형변환
} catch(NumberFormatException e) {
System.out.println("유효하지 않은 값입니다. 다시 입력하세요."); //예외 발생시 다시 입력받기
continue;
}
if(answer > inputNum) {
System.out.println("더 큰 수를 입력하세요.");
} else if(answer < inputNum) {
System.out.println("더 작은 수를 입력하세요.");
} else {
System.out.println("맞췄습니다.");
break;
}
} while(true);
}
}
또한, 사용자로부터 정수형 입력값을 받을 때는 nextLine()메서드보다는 nextInt()메서드를 사용해서 바로 정수값을 받는 것이 좋다. 물론, nextInt()메서드로 입력을 받을 때에도 String타입 문자열을 입력받게 되면 InputMismatchException 예외가 발생하지만, 앞뒤공백이 들어간 정수 입력은 자동으로 trim()을 통해 공백을 제거해준다.
(추가 예정--------------)
- 참고자료 : "Java의 정석 3판" / 남궁 성 / 도우출판
728x90