inflearn logo
강의

講義

知識共有

ナドコーディングのJava基本編 - フルコース (20時間)

出力 (前半戦 - 整数)

출력(전반전-정수)

395

devmichael

投稿した質問数 5

-1

 정수 3자리마다 콤마가 찍히는 원리를 답변 받고 싶습니다 ㅠㅠ

oop java

回答 2

0

유니크한 북극곰

안녕하세요 해당강의를 같이 수강하고있는 사람입니다.

자바의 System.out.printf()는 정수형 출력 "%d"의 "%"바로뒤에 ","를 사용할시 세자리수마다 ","를 찍어 출력하는 기본기능을 객체를 이용하여 제공하고있다고합니다. 내장기능이기 때문에 숙지하시고 가볍게 넘기셔도 괜찮을거같습니다.

printf 가 아닌 다른방식으로 쉼표 표기하거나 세번째자리가 아닌 다른방식으로 표기하고 싶으실경우 format메소드를 이용하여 표기합니다.

0

nadocoding

안녕하세요?
System.out.printf( 형식, 값 ); 는 원하는 형식으로 값을 출력하기 위해 사용합니다.
1) '%d' 는 정수 값을 위한 형식 지정자입니다. 예제에서는 1000000000 이라는 정수를 출력하기 위해 %d 를 사용했습니다.
2) % 와 d 사이에 들어가는 15 라는 값은 자릿수를 위해 사용합니다. 총 15자리 만큼의 공간을 확보하고 거기에 값을 넣으라는 의미입니다. 보통 출력값보다 자릿수를 여유롭게 설정합니다.
3) % 뒤에 들어가는 콤마(,) 는 천(1000) 단위로 구분 기호를 출력하는 역할을 합니다.
4) '%n' 은 줄바꿈을 위해 사용합니다. System.out.println( ) 의 경우 맨 뒤에 붙은 ln 이 line 을 뜻하며 자동으로 줄바꿈을 하는데 System.out.printf( ) 에서는 %n 을 넣지 않으면 줄바꿈을 하지 않습니다.

정수 3자리마다 콤마가 찍히는 원리는 실제로는 구현되어 있는 코드가 복잡하게 되어 있어 모든 내용을 설명드리기는 어렵고 쉽게 아래와 같은 방식으로 진행된다고 이해하시면 도움될 것 같아요.

public class SampleClass {
    public static void main(String[] args) {
        String result = separateNumberWithComma(1000000000);
        System.out.println(result);
    }

    public static String separateNumberWithComma(int number) {
        String str = Integer.toString(number);
        StringBuilder sb = new StringBuilder(str);

        int index = sb.length() - 3;
        while (index > 0) {
            sb.insert(index, ",");
            index -= 3;
            System.out.println(sb.toString()); // 과정 출력
        }
        return sb.toString();
    }
}

먼저 실행 결과는 이렇습니다.

1000000,000 // 뒤에서 3자리 앞에 콤마 삽입
1000,000,000 // 그로부터 3자리 앞에 콤마 삽입
1,000,000,000 // 그로부터 3자리 앞에 콤마 삽입
// 아래는 최종 결과
1,000,000,000

separateNumberWithComma() 메소드에서는 콤마를 적용하려는 정수를 전달받은 뒤 문자열로 변환을 합니다. 그리고 문자열의 길이를 파악하여 문자열의 맨 뒤에서 3자리 앞에 콤마를 삽입(sb.insert) 합니다. 그리고 3자리 앞으로 이동 (index -= 3) 하여 또 콤마를 삽입합니다. 이 작업을 반복수행하고 나면 결과적으로 3자리마다 콤마가 적용된 문자열이 되는 것이죠.

궁금증 해결에 도움되시길 바라겠습니다 😊
감사합니다.

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

0

136

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

111

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

70

1

사고력 키우는 법이 어떤게 있나요?

0

91

2

getter setter

0

101

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

78

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

75

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

114

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

166

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

114

2

응용이 어렵습니다.

0

203

2

IntelliJ가 보이지 않습니다.

0

182

3

JDK 버전 문의

0

128

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

120

2

Iterator 문의

0

104

1

코드 순서 문의

0

139

1

클래스 메소드

0

148

2

Quiz_05 관련 질문드립니다 !

0

117

2

다운로드가 안됩니다

0

165

2

다형성

0

118

2

HashMap

0

80

2