Java 반복문 예제로 쉽게 접할 수 있는 별 찍기 예제에 대해 살펴보겠습니다.

for (int i = 0; i < 5; i++) {
System.out.print("*");
}
2.
for (int i = 0; i < 5; i++) {
System.out.println("*");
}
1과 2의 콘솔창을 비교해보면, print와 println의 차이를 알 수 있습니다.
형식 지정자

for (int i = 0; i < 5; i++) {
System.out.println("*****");
}
다른 방법도 있습니다.
for (int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++){
System.out.print("*");
}
System.out.println();
}
개인적으로는 전자가 나은 것 같습니다.
굳이?

여기서부터는 i, j 모두 데려와야 합니다.
for (int i = 0; i < 5; i++) {
for(int j = 0; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
저는 int i = 0인 게 편해서 이렇게 했는데, int i = 1이라면 이 방법도 있습니다.
for (int i = 1; i <= 5; i++) {
for(int j = 0; j < i; j++){
System.out.print("*");
}
System.out.println();
}

별 다섯 개에서 한 개가 되는 걸 구현하기 위해
감소하는 i와 증가하는 j를 이용한 반복문을 활용했습니다.
for (int i = 5; i > 0; i--) {
for(int j = 0; j < i; j++){
System.out.print("*");
}
System.out.println();
}


for (int i = 0; i < 5; i++) {
for(int j = 0; j < i; j++){
System.out.print(" ");
}
for(int j = 5; j > i; j--){
System.out.print("*");
}
System.out.println();
}
j를 활용한 for문을 두 차례 작성하여 공백과 "*"을 구현했습니다.
j를 두 번 활용하지 않는 방법은 없을까 고민하다가
for (int i = 0; i < 5; i++) {
for(int j = 0; j < i; j++){
System.out.print(" ");
}
for(int k = 5; k > i; k--){
System.out.print("*");
}
System.out.println();
}
i, j의 값을 나타낸 테이블

i, j, k의 값을 나타낸 테이블


모양을 보니 6번의 코드에서 " "와 ""을 바꾸고, ""이 다섯 개여야 하니 i <= 5로 바꾸면 될 것 같습니다.
for (int i = 0; i <= 5; i++) {
for(int j = 0; j < i; j++){
System.out.print("*");
}
for(int j = 5; j > i; j--){
System.out.print(" ");
}
System.out.println();
}
for (int i = 0; i <= 5; i++) {
for(int j = 0; j < i; j++){
System.out.print("*");
}
for(int k = 5; k > i; k--){
System.out.print(" ");
}
System.out.println();
}

보자마자 7번에 6번을 복붙해서 사용해야지 했습니다.
6번 답에 공백이 증가하는 부분을 제외하고, for문을 그대로 살린 다음,
"*"이 다섯 번 출력되는 줄이 반복되지 않도록
int j = 4로 설정했습니다.
for (int i = 0; i <= 5; i++) {
for(int j = 0; j < i; j++){
System.out.print("*");
}
for(int j = 5; j > i; j--){
System.out.print(" ");
}
System.out.println();
}
for (int i = 0; i < 5; i++) {
for(int j = 4; j > i; j--){
System.out.print("*");
}
System.out.println();
}

for (int i = 0; i < 5; i++) {
for(int j = 5; j > i; j--){
System.out.print("*");
}
System.out.println();
}
for (int i = 2; i <= 5; i++) {
for(int j = 1; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
"*"이 하나만 출력되는 줄에 유의하여 반복문의 초기값을 설정해야 합니다.
첫 번째 루프

두 번째 루프

다른 방법
for (int i = 0; i < 9; i++) {
int stars = (i < 5) ? (5 - i) : (i - 3);
for (int j = 0; j < stars; j++) {
System.out.print("*");
}
System.out.println();
}
int[] starCounts = {5, 4, 3, 2, 1, 2, 3, 4, 5};
for (int count : starCounts) {
for (int j = 0; j < count; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
개인적으로는 처음에 소개드렸던 개별 루프를 두 번 사용하는 방식이 제일 직관적인 것 같습니다.

for (int i = 0; i < 4; i++) {
for(int j = 3; j >= i; j--){
System.out.print(" ");
}
for(int j = 0; j <= i; j++){
System.out.print("*");
}
System.out.println();
}
//6번
for (int i = 0; i <= 5; i++) {
for(int j = 0; j < i; j++){
System.out.print(" ");
}
for(int j = 5; j > i; j--){
System.out.print("*");
}
System.out.println();
그래도 명색이 마지막 문제라 그런지 은근 까다로웠다.
첫 번째 루프에서 별 네개 까지만 출력하고,
두 번째 루프는 6번을 참조하여 작성했다.
추가 설명
i, j 값 변화 테이블
첫 번째 루프

공백은 표현이 안 되었는데, " "가 4개, 3개, 2개, 1개가 되었다.
두 번째 루프

좌측 공백이 0개였다가, 1,2,3,4개가 되었다.
생각해보니 루프가 i = 5까지 돌아가는 게 의미가 없어서 두 번째 루프에서 'i <= 5' 를 'i < 5'로 수정해도 무관하다.
다른 방법
단일 이중 루프 사용
public class Main {
public static void main(String[] args) {
int rows = 4;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < rows - i; j++) {
System.out.print(" ");
}
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
rows = 5;
for (int i = 1; i <= rows; i++) {
for (int j = 0; j < i; j++) {
System.out.print(" ");
}
for (int j = rows; j >= i; j--) {
System.out.print("*");
}
System.out.println();
}
}
}
굳이..
반복문을 통해 "*"을 원하는 모양으로 콘솔창에 출력하는 연습을 해보았다.
다양한 문제를 푸는 데에 도움이 될 수 있을 것 같다. 하지만 너무 재미없다...