실수 한 개 입력받아 부분별로 출력하기

조회수 106회

자바언어로 알고리즘 기초문제 풀이 중입니다

문제: 실수 한 개가 입력되었을 때 첫 번째 줄에 정수 부분을,
두 번째 줄에 실수 부분을 입력된 자릿수만큼 그대로 출력한다

입력예시:
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 이렇게도 나올 수 있고 000123parseInt하면 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));
    
    }
    

    }

    참고하셔서 코드수정하시면 될듯합니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.