[자바 무료 강의] 구구단 만들기 - 코드라떼
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));
    }
}
도전자 질문
아이콘구수(2022-11-02 12:02 작성됨)
안녕하세요. while문을 써서 구구단을 하려는데 이해가 안가는 부분이 있어서요. 하다보니 case3과 거의 유사하게 됐는데요. seNum이 9를 초과한 경우에 조건문을 통해 구구단 앞수를 3으로 올리고 뒷수를 1로 돌아가게 해서 다음 단을 시작하게 하려고 설계해봤는데요. 이렇게 코드를 짜니 2 X 9 = 18 까지만 가고, 그 이후는 안나옵니다. 혹시 이 방법이 왜 안되는지를 설명해주실수 있나요?

        int fiNum = 2;
        int seNum = 1;

        while (fiNum < 10 && seNum <10){
            if (seNum > 9) {
                fiNum++;
                seNum = 1;
            } else {
                System.out.printf("%d X %d = %d\n", fiNum, seNum, fiNum*seNum);
                seNum++;
            }
        }
아이콘코드라떼(2023-04-08 15:58 작성됨)
안녕하세요. 코드라떼입니다 :)

seNum이 9인 상황에서 seNum++; 명령문이 호출되어 seNum이 10이되면 while 반복문을 벗어나게 됩니다.
그러므로 while (fiNum < 10 && seNum <10) 해당 부분을 while (fiNum < 10 && seNum < 11)로 고쳐보세요.

감사합니다 :)
아이콘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));
    }
}
도전자 질문
아이콘구수(2022-11-02 12:02 작성됨)
안녕하세요. while문을 써서 구구단을 하려는데 이해가 안가는 부분이 있어서요. 하다보니 case3과 거의 유사하게 됐는데요. seNum이 9를 초과한 경우에 조건문을 통해 구구단 앞수를 3으로 올리고 뒷수를 1로 돌아가게 해서 다음 단을 시작하게 하려고 설계해봤는데요. 이렇게 코드를 짜니 2 X 9 = 18 까지만 가고, 그 이후는 안나옵니다. 혹시 이 방법이 왜 안되는지를 설명해주실수 있나요?

        int fiNum = 2;
        int seNum = 1;

        while (fiNum < 10 && seNum <10){
            if (seNum > 9) {
                fiNum++;
                seNum = 1;
            } else {
                System.out.printf("%d X %d = %d\n", fiNum, seNum, fiNum*seNum);
                seNum++;
            }
        }
아이콘코드라떼(2023-04-08 15:58 작성됨)
안녕하세요. 코드라떼입니다 :)

seNum이 9인 상황에서 seNum++; 명령문이 호출되어 seNum이 10이되면 while 반복문을 벗어나게 됩니다.
그러므로 while (fiNum < 10 && seNum <10) 해당 부분을 while (fiNum < 10 && seNum < 11)로 고쳐보세요.

감사합니다 :)
아이콘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$