자바 구구단 프로그래밍 질문하나 있습니다.

   조회 2076   추천 0    

쪽팔리면 질문하지 맙시다. 소중한 답변 댓글을 삭제하는건 부끄러운 일 입니다 

자바를 독학으로 공부하고 있습니다.

프로그래밍을 시작하기 전에 우선 순서도를 그려보고 조건문을 어떻게 배치해야 할지 고민하고 있습니다.


1. 전형적인 nested for문으로 짜본 코드 입니다.


        for(int i = 2; i<=9; i++) {

            for(int k = 1; k<=9; k++) {

                int result = i * k;

                System.out.println(result);

            }

        }

2. 이것은 제가 한번 짜본 코드 입니다.

        int j = 1;

        int sum = 0;

        for(int i = 2; i<=9; i++) {

            while(j<=9) {

                sum = i * j;

                System.out.println(i + " x "+j+ " = "+sum);

                j = j+2;

                if(j == 11) {

                    j = 1;

                    break;

                }

            }

      }

질문1) if( j == 11) { j =1; break} 이 조건이 있으니 프로그래밍이 제대로 돌아갑니다.  디버깅을 해보니 j값이 계속 11을 유지하고 있어서 구구단의 3단으로 넘어가질 않더군요. for문은 k가 9에서 10으로 넘어가면서 루프 벗어나면서 i값이 3으로 증가하면서 k값이 초기화 되는거 같더군요.

이런부분이 for문과 while문의 차이인가요?


질문2) for문과 while문의 순서도는 같은가요? 아니면 다른가요?


이것저것 차근차근 해보고 있습니다. 어떠한 의견도 감사합니다.

짧은글 일수록 신중하게.
extra 2023-06
j = j+2;
=> j = j + 1;
로 변경하셔야 합니다.
위와 아래는 증감 부분이 달라 서로 동작이 미묘하게 달라집니다.

아래 소스는 제대로 수행됩니다.
https://ideone.com/a6ql60
아마 결과가 이상한 것은 잘못 수행되어서 그런 듯 싶습니다.

질문 1에 대한 답은 반복문의 차이라기 보단 프로그램 코드를 잘 못 수정하셔서 그런 듯 싶습니다.
이 부분은 원래의 코드를 모르는 상황에선 고칠 수 없습니다.
그리고 답변을 드리자면 순서도에서는 굳이 for 문인지 while 문인지 구분하지 않습니다.
순서도 그리는 것도 약간의 차이가 있어서 구분을 지을 수 있긴 하지만 일반적으로 반복되는 걸 고려하면 차이가 없습니다. 단순히 조건문에 따라 더 반복할지 안할지만 구분됩니다.
     
inquisitive 2023-06
감사합니다.
구차니 2023-06
for는 일반적으로 횟수를 확실히 알 때 사용합니다.
while은 기약없이 돌리다가 조건에 의해서 종료할때 사용합니다.

물론 문법적으로 두개 키워드가 동등하게 상호 변환이 가능하기 때문에
짜다 보면 어떤걸 쓰던 상관은 없습니다만, 유지보수 쉽도록 가독성을 고려하는게 좋습니다.
     
inquisitive 2023-06
감사합니다.
무아 2023-06
위에 분들이 잘 설명을 해주셨고
조건에 의해 루프를 탈출하게 만들 때는
if(j == 11)
이런 방법 보다는
if(j >= 11)
이런 방법이 좋습니다.
왜인지는 알겠죠?

그리고 변수명도 잘 정해줘야 디버깅이 편합니다.
sum 보다는 mul 같은 이름이 좋겠죠.
     
inquisitive 2023-06
변수명 명확하게 사용해야 겠네요.
감사합니다.
씨디공장 2023-06
while(j<=9)

이거 자체가 동작 조건이고 그 말을 달리 해석하면 탈출 조건도 됩니다.
굳이 밑에 탈출 조건을 안넣어도 된다는거죠.

즉, if(j == 11) { j = 1; break; } 이 구문이 없어도 됩니다.
     
무아 2023-06
저 코드가... 좀..
j를 초기화 하는 데가 없어서 빼 버리면 다음판 부터는 꽝 되어버립니다.
          
씨디공장 2023-06
네 i 영역 안에 j 초기화가 있어야 하는데 그게 없군요.
               
inquisitive 2023-06
힌트 주셔서 감사합니다.
다시 한번 해보겠습니다.
무아 2023-06
if(j == 11)

if(j > 9) 또는 if(j > 10)
로 바꾸세요.
     
inquisitive 2023-06
감사합니다.
조금 고쳐드리면.. j 초기화 구문을 꼭 while 문 안에 넣지 않으셔도 됩니다. 조건 붙이면 길어지고요.
j=j+2 를 j+1 로 수정하면, 기존 프로그램은 2단만 나오던데, 그 경우 윗분들 말씀처럼 j==11 조건을 j >= 10 조건으로 바꿔도 나오긴 하지만,
간단한게 좋겠지요.

int j = 1;

int sum = 0;

for(int i = 2; i<=9; i++) {
j=1;
while(j<=9) {

sum = i * j;

System.out.println(i + " x "+j+ " = "+sum);

j = j+1;

}

}
     
inquisitive 2023-06
깔끔하네요.
이전에 이중for문 이런 문제 겪었는데
이렇게 해결하면 되겠네요.
감사합니다.
성기사 2023-06
>= 보다는 > 를 쓰세요.
     
inquisitive 2023-06
참조하겠습니다.
감사합니다.


QnA
제목Page 5292/5710
2014-05   5156365   정은준1
2015-12   1690708   백메가
2021-07   2081   땅부자
2021-09   2081   ginyunas
2024-03   2081   NightHawk
2023-03   2081   마왕
2024-06   2080   혼자가는길
2023-06   2080   SouthH
2024-07   2080   윤치열
2021-11   2080   범이님
2022-05   2080   다롱이
2022-02   2080   블루모션
2023-10   2080   Nomaker
2024-05   2079   전설속의미…
2023-11   2079   GoverZG
2023-04   2079   kmj343
2021-02   2079   가을햇살71
2021-11   2079   네이쳐
2022-02   2078   구차니
2023-01   2078   LevinF
2022-12   2078   영산회상
2023-03   2077   AplPEC