자바 이중루프문 질문드려요.

   조회 3903   추천 0    

소스코드

         for (int i = 1; i < 10; i += 2)
        {
            for (int j = 0; j < 9 - i / 2; j++)
            {
                System.out.print(" ");
            }

            for (int j = 0; j < i; j++)
            {
                System.out.print("*");
            }

            System.out.print("\n");
        }


결과물

         *
        ***
       *****
      *******
     *********

제가 직접짠 프로그램은 아닙니다. 이중루프문 공부하면서 찾은 예제인데 도트 찍는것은 이해가 갑니다.

그런데 도트 하나를 찍는 과정에서 빈공간 찍는것이 궁금합니다.

질문1. System.out.print(" "); 의미가 궁금합니다. 두번째 for문에서 j< 9 - i /2; 즉 j가 4보다 작을때 (" ") 빈공간으로 채우라 인데

키보드 커서로 갯수를 세어보니 8칸까지 빈공간이고 9번째 *(한개)를 찍더군요. 

질문2. System.out.print(""); 로 바꾸니 직삼각형 모형으로 나오더군요. 이것은 무슨 의미인가요? null값인가요?


독학으로 자바를 공부하고 있습니다. 많은부분이 부족합니다. 도움을 주시면 감사하겠습니다.

짧은글 일수록 신중하게.
캔위드 2017-09
System.out.print(" ");

System.out.print("-");

바꿔보세요.
말 그대로 공백 찍는겁니다. 앞에 자리 만드는거죠.
System.out.print(""); 는 null이라기 보담 결과적으로 아무것도 찍지 않는 겁니다. 그러니 전부 왼쪽으로 붙는 것이죠.

그리고 마지막에 \n 을 찍는건 newline 개행문자라고 해서 다음줄로 넘어가라.. 라는 문자(?)를 찍는겁니다.
정삼각형 그리기 이기때문이 아닐까요? 얼핏 코드를 보았을때는 그런거 같습니다
캔위드 2017-09
참고로 이해가 잘 안가실땐 디버그 찍어보는게 최곱니다.
      for (int i = 1; i < 10; i += 2)
        {
    System.out.print(String.format("공백수 : %2d, 별수 : %2d : ", 9 - i / 2, i));
            for (int j = 0; j < 9 - i / 2; j++)
            {
                System.out.print(" ");
            }
            for (int j = 0; j < i; j++)
            {
                System.out.print("*");
            }
            System.out.print("\n");
        }

음.. 그리고 abs 함수를 이용하면 다이야몬드가 됩니다.
    for (int i = 1; i < 10; i++)
        {
            for (int j = 0; j < Math.abs(i - 5); j++)
            {
                System.out.print(" ");
            }
            for (int j = 1; j < 10 - Math.abs(i*2 - 10); j++)
            {
                System.out.print("*");
            }
            System.out.print("\n");
        }
씨형 2017-09
프로그래밍 처음배울때 흔히 하는 짓? 입니다.
저걸 구현하기 위해서 루프돌리면서 어느 시점에 공백( )으로 채우고 내가 원하는 문자(*)로 채우고
그런것을 직접해보면서
루프돌때 어떤처리를 해주면된다를 배우는것이죠

이게 도스 시절에는 정확히 공백에 대해 1character가 성립이되서 (고정폭 폰트)
느낌이 빡 오는데

요새는 대부분 그래피컬해진 시대이고
폰트들도 고정폭이 아니기 때문에
직접 저런 예제를 하면서도 이해가 안될 소지가 다분하다는 대해는 동의합니다.
breakersDaD 2017-09
본문의 코드는 *를 찍고 나면 더 이상 뭘 할 필요가 없으니 다음행으로 라인을 바꿔주는건데요 (\n), 본인의 취향에 따라 빈칸 (영어로는 whitespace)를 찍어 주던가 아님 다른 기호를 찍게 코드를 바꿔주는 놀이를 하면 재미있습니다.

위의 기본 원리로 루프를 요리 조리 돌리면 어셈블리어로 퐁(Pong)게임도 만들수 있습니다.
질문 중 :: 두번째 for문에서 j< 9 - i /2; 즉 j가 4보다 작을때 (" ") 빈공간으로 채우라 인데 키보드 커서로 갯수를 세어보니 8칸까지 빈공간이고 9번째 *(한개)를 찍더군요. 
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 이 부분은 잘못 이해하신 부분입니다.

9 - i / 2 는 연산자 우선순위에 따라 9 - ( i / 2)  로 계산되고 첫 번째 i=1 일때    저 부등식은 j < 9 - (1/2) 가 됩니다.

추가꽁지말 : 저 부등식에서 계산이 우째 되는지 설명드리고 싶으나, 졸업장 잉크도 덜 말랐을 젊은피인데 ... 까묵어서 죄송합니다. 크흡 ..
자바의 묵시적 형변환이 어떻게 이루어지는지에 대해서 조금 공부해보시면 금방 이해가 되실것 같습니다.

(" ") 스페이스를 적당히 띄워서 정삼각형을 만들고자 하는게 i 루프 내에서 j 루프 2개가 하는 일입니다.
("") 로 스페이스를 주지 않게되면 왼쪽에 90도 각이 있는 직각삼각형이 만들어 집니다.

ㅁㅁ
ㅁㅁㅁ
그럼 오른쪽에 90도 각이 있는 직각삼각형은 어떻게 만들면 될까요?
.......ㅁ
....ㅁㅁ
.ㅁㅁㅁ
또 저걸 뒤집어 찍으려면 어떻게 해야될까요?
ㅁㅁㅁ
..ㅁㅁ
....ㅁ

 이런게 보통 연습문제로 나올것 같습니다.


QnA
제목Page 4196/5708
2014-05   5140458   정은준1
2015-12   1675078   백메가
2018-01   3861   세벌쉭
2014-03   3861   박찬규
2016-02   3861   라이젠
2017-05   3861   캐리안
2016-05   3861   블루영상
2015-07   3861   서버보안
2020-11   3860   hyunwoo3480
2017-08   3860   e5472
2015-03   3860   문짱
2018-06   3860   한가한이수진
2014-01   3860   Olorin
2023-02   3860   흔냥이
2020-12   3860   알수없는힘
2017-04   3860   딩규
2019-09   3860   권희석
2016-07   3860   goodsense
2017-12   3860   나파이강승훈
2013-12   3860   김황중
2015-12   3860   esca
2019-01   3860   pc케이스자…