[자바 무료 강의] 구구단 만들기 - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의구구단 만들기최종수정일 2021-11-21
아이콘약 6분

구구단을 출력하는 프로그램을 만드는 강의입니다. 구구단을 만들며 이중반복구조에 대해 깊이 학습할 수 있습니다. 단순히 구구단을 만드는 코드를 외우는 것이 아니라 구구단을 만들기 위해 생각의 흐름이 어떻게 진행되는지 확인해보세요. 또한 이중반복구조를 자기 것으로 만들어야지 앞으로 진행하는 강의에서 좀 더 수월하게 진행할 수 있습니다.

추가 노트

1. 구구단을 여러가지 방법으로


강의에서 작성된 구구단을 제외하고 만들 수 있는 방법은 다양합니다.

문제를 어떻게 접근하냐에 따라, 다양한 방법이 나올 수 있습니다.


case 1

코드 작성

for (int bigSeqNum = 2; bigSeqNum <= 9; bigSeqNum++) {
    for (int seqNum = 1; seqNum <= 9; seqNum++) {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

case 2

코드 작성

int bigSeqNum = 2;
int seqNum = 1;
while (true) {
    if (9 == bigSeqNum && 9 < seqNum) {
        break;
    } else if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 1;
    }
    System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    seqNum++;
}

case 3

코드 작성

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum++)) {
    if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}
도전자 질문
아이콘jaijoij(2022-03-20 23:03 작성됨)
case1에서 두번째 줄 for 괄호 안의 seqNum++는 println 함수가 실행되고 난 후에 적용되는 것이고
(-> 제가 생각하기론 seqNum++가 적용되어서 2x2=4부터 나와야할 것 같다고 생각되어요.)
case2에서 while 괄호 안의 (seqNum++)는 아래의 prinln 함수가 실행되기 전에 적용되는 것인가요?

for와 while의 차이인지 혹은 case3에서 seqNum++가 괄호 안에 있어서 그런것인지
작동순서가 어떤 원리로 일어나는 것인지 궁금합니다.
아이콘코드라떼(2022-03-22 03:27 작성됨)
안녕하세요. 코드라떼입니다 :)

[case1 관련 질문]
먼저 for문내의 for문은 다음과 같은 순서로 진행됩니다.
1. int seqNum = 1 초기화
2. seqNum <= 9 조건 확인 후 참이면 반복문내의 코드를 실행
3. seqNum++ 실행 (++seqNum을 사용해도 상관없음)
4. seqNum <= 9 조건 확인 후 참이면 반복문내의 코드를 실행
5. seqNum++ 실행 (++seqNum을 사용해도 상관없음)
6. (생략)
7. seqNum <= 9 조건이 거짓이면 작은 반복을 벗어나 큰 반복을 다시 실행

[case2 관련 질문]
println이 실행 후 seqNum++를 실행합니다.

[case3 관련 질문]
case3은 좀 복잡합니다. 

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum++)) {
    if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

seqNum++은 seqNum의 값을 먼저 반환 후 seqNum의 값을 1증가시키는 것으로 
최초 while (9 >= bigSeqNum && 9 >= (seqNum++)) 코드가 실행되는 시점에는 seqNum은 0이며 바로 밑의 코드인 if문을 실행할 때

if (9 < seqNum) {
    bigSeqNum++;
    seqNum = 0;
} else {
    System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
}

seqNum은 1입니다. 코드를 좀 더 풀어보면 아래의 코드와 같습니다.

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum)) {
    seqNum = seqNum + 1;
    if (9 < seqNum) {
        bigSeqNum = bigSeqNum + 1;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

결론적으로 seqNum++에 대한 부분과 for문에 대한 부분이 복합적으로 헷갈리셔서 질문을 하신것이 아닌가 생각이듭니다.

감사합니다 :)
아이콘효효(2022-02-25 17:22 작성됨)
int t=2;
int n=1;
        do {
            do {System.out.printf("%dX%d=%d\n",t,n,t*n);
                if (n<=9){n++;}}
            while (n<=9);
            n=1;
            if (t<=9){t++;}}
        while (t<=9);



만들어본 스크립트입니다.
아이콘코드라떼(2022-02-26 00:45 작성됨)
안녕하세요. 코드라떼입니다 :)

스스로 만드신 코드인가요??
스스로 고민하신 코드라면 값진 코드인 것 같습니다 :)
고생하셨습니다. 앞으로도 쭉 응원드릴게요!

감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

구구단을 작성하는 방법은 여러가지가 있습니다. 추가노트에 있는 코드도 작성해서 실행해보세요.

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의구구단 만들기최종수정일 2021-11-21
아이콘약 6분

구구단을 출력하는 프로그램을 만드는 강의입니다. 구구단을 만들며 이중반복구조에 대해 깊이 학습할 수 있습니다. 단순히 구구단을 만드는 코드를 외우는 것이 아니라 구구단을 만들기 위해 생각의 흐름이 어떻게 진행되는지 확인해보세요. 또한 이중반복구조를 자기 것으로 만들어야지 앞으로 진행하는 강의에서 좀 더 수월하게 진행할 수 있습니다.

추가 노트

1. 구구단을 여러가지 방법으로


강의에서 작성된 구구단을 제외하고 만들 수 있는 방법은 다양합니다.

문제를 어떻게 접근하냐에 따라, 다양한 방법이 나올 수 있습니다.


case 1

코드 작성

for (int bigSeqNum = 2; bigSeqNum <= 9; bigSeqNum++) {
    for (int seqNum = 1; seqNum <= 9; seqNum++) {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

case 2

코드 작성

int bigSeqNum = 2;
int seqNum = 1;
while (true) {
    if (9 == bigSeqNum && 9 < seqNum) {
        break;
    } else if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 1;
    }
    System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    seqNum++;
}

case 3

코드 작성

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum++)) {
    if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}
도전자 질문
아이콘jaijoij(2022-03-20 23:03 작성됨)
case1에서 두번째 줄 for 괄호 안의 seqNum++는 println 함수가 실행되고 난 후에 적용되는 것이고
(-> 제가 생각하기론 seqNum++가 적용되어서 2x2=4부터 나와야할 것 같다고 생각되어요.)
case2에서 while 괄호 안의 (seqNum++)는 아래의 prinln 함수가 실행되기 전에 적용되는 것인가요?

for와 while의 차이인지 혹은 case3에서 seqNum++가 괄호 안에 있어서 그런것인지
작동순서가 어떤 원리로 일어나는 것인지 궁금합니다.
아이콘코드라떼(2022-03-22 03:27 작성됨)
안녕하세요. 코드라떼입니다 :)

[case1 관련 질문]
먼저 for문내의 for문은 다음과 같은 순서로 진행됩니다.
1. int seqNum = 1 초기화
2. seqNum <= 9 조건 확인 후 참이면 반복문내의 코드를 실행
3. seqNum++ 실행 (++seqNum을 사용해도 상관없음)
4. seqNum <= 9 조건 확인 후 참이면 반복문내의 코드를 실행
5. seqNum++ 실행 (++seqNum을 사용해도 상관없음)
6. (생략)
7. seqNum <= 9 조건이 거짓이면 작은 반복을 벗어나 큰 반복을 다시 실행

[case2 관련 질문]
println이 실행 후 seqNum++를 실행합니다.

[case3 관련 질문]
case3은 좀 복잡합니다. 

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum++)) {
    if (9 < seqNum) {
        bigSeqNum++;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

seqNum++은 seqNum의 값을 먼저 반환 후 seqNum의 값을 1증가시키는 것으로 
최초 while (9 >= bigSeqNum && 9 >= (seqNum++)) 코드가 실행되는 시점에는 seqNum은 0이며 바로 밑의 코드인 if문을 실행할 때

if (9 < seqNum) {
    bigSeqNum++;
    seqNum = 0;
} else {
    System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
}

seqNum은 1입니다. 코드를 좀 더 풀어보면 아래의 코드와 같습니다.

int bigSeqNum = 2;
int seqNum = 0;
while (9 >= bigSeqNum && 9 >= (seqNum)) {
    seqNum = seqNum + 1;
    if (9 < seqNum) {
        bigSeqNum = bigSeqNum + 1;
        seqNum = 0;
    } else {
        System.out.println(String.format("%d x %d = %d", bigSeqNum, seqNum, bigSeqNum * seqNum));
    }
}

결론적으로 seqNum++에 대한 부분과 for문에 대한 부분이 복합적으로 헷갈리셔서 질문을 하신것이 아닌가 생각이듭니다.

감사합니다 :)
아이콘효효(2022-02-25 17:22 작성됨)
int t=2;
int n=1;
        do {
            do {System.out.printf("%dX%d=%d\n",t,n,t*n);
                if (n<=9){n++;}}
            while (n<=9);
            n=1;
            if (t<=9){t++;}}
        while (t<=9);



만들어본 스크립트입니다.
아이콘코드라떼(2022-02-26 00:45 작성됨)
안녕하세요. 코드라떼입니다 :)

스스로 만드신 코드인가요??
스스로 고민하신 코드라면 값진 코드인 것 같습니다 :)
고생하셨습니다. 앞으로도 쭉 응원드릴게요!

감사합니다 :)
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

구구단을 작성하는 방법은 여러가지가 있습니다. 추가노트에 있는 코드도 작성해서 실행해보세요.

Output
root$