실수 한 개 입력받아 부분별로 출력하기
조회수 1228회
자바언어로 알고리즘 기초문제 풀이 중입니다
문제: 실수 한 개가 입력되었을 때 첫 번째 줄에 정수 부분을,
두 번째 줄에 실수 부분을 입력된 자릿수만큼 그대로 출력한다
입력예시:
1.414213
출력예시:
1
414213
아래는 제가 작성한 코드입니다
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] result = input.split(".");
System.out.println(Integer.parseInt(result[0]));
System.out.println(Integer.parseInt(result[1]));
}
}
위의 코드대로 작성하고 실행을 시켜보니까
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.main(Main.java:7)
예외가 뜨더라구요
어떻게 해야할까요 아무리 생각해도 split말고는 딱히 안떠오르네요
2 답변
-
문제의 조건을 알려주시지 않아서 확실치는 않지만 실수에는 정수도 포함된다는 사실에 비추어 보면 소수점이 없는 입력값도 충분히 들어올 수 있지 않나 싶네요.
해당 에러는 인덱스로 배열에 접근할 때 범위를 벗어나서 뜨는 에러인데 범위를 벗어나려면split
의 결과 배열 크기가 1일때 말고는 없죠.추가적으로
parseInt
는 필요가 없고 있어서도 안됩니다. 정수부분은 상관없지만 소수는1.000123
이렇게도 나올 수 있고000123
을parseInt
하면123
이 나와버리니까 제대로 출력이 안되겠죠.-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
.(dot)는 정규식 예약어 입니다. \n(개행문자)를 제외한 모든 문자를 의미하기 때문에 모든문자를 하나씩 지워버려 result에는 값이 들어가지 않습니다. 그렇기에 result[0]이라는 인덱스정보를 찾지못해 ArrayIndexOutOfBoundsException라는 오류가 발생한겁니다.
해결책은 import java.util.Arrays;
class CodeRunner{ public static void main(String[] args){
double input = 15.45454; String str = String.valueOf(input); System.out.println(str); String[] result = String.valueOf(str).split("\\."); System.out.println(Arrays.toString(result)); }
}
참고하셔서 코드수정하시면 될듯합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력