for문을 이용해서 다음과 같이 *을 출력하세요
//문제1.
int num = 1;
int xSum = 0;
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5 ;j++) {
System.out.printf("%2d ", num);
if(i + j == 6 || i == j) {
xSum += num;
} if(j % 5 == 0) {
System.out.println();
}
num++;
}
}
System.out.println("X의 합 = " + xSum);
int num = 1;
int xSum = 0;
숫자를 1부터 출력하기 위해 num이라는 변수의 초기값을 1로 선언하였습니다.
또한 X영역의 합을 구하기 위하여 xSum이라는 변수를 선언하였습니다.
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= 5 ;j++) {
System.out.printf("%2d ", num);
if(i + j == 6 || i == j) {
xSum += num;
} if(j % 5 == 0) {
System.out.println();
}
num++;
}
}
여러 줄로 출력하기 위하여 다중 for 문을 사용하였습니다.
우선 i를 선언하여 반복문을 사용하는 영역과 j를 선언하여 사용되는 영역으로 나누어져 있습니다.
if(i + j == 6 || i == j) {
xSum += num;
}
해당 부분의 조건은 출력된 숫자 중에서 X자 모양 영역이 되는 조건을 사용하였습니다. i와 j의 합이 6이거나 i와 j가 같다면 문제의 그림처럼 X자 모양의 영역이 나옵니다!
if(j % 5 == 0) {
System.out.println();
}
이 부분은 5칸마다 한 번씩 줄바꿈을 하기 위하여 사용된 조건과 명령입니다!
num++;
숫자를 1만 출력할 게 아니라 1부터 계속 출력할 거니까 계속 더해줘야겠죠??
//문제2.
for(int i = 1; i <= 5; i++) {
for(int j = 1; j <= i; j++) {
System.out.printf("*");
}
System.out.println();
}
i가 1부터 5까지 반복되는 for 문과 j가 1부터 i까지 반복되는 for 문이 있습니다.
i = 1일 때부터 5가 될 때까지 System.out.println()를 통해 총 5번 줄바꿈 합니다.
즉, i로 선언되어 반복되는 for 문에서 증감식이 수행될 때마다 줄바꿈을 한다고 이해하실 수 있습니다.
또한 j가 반복되는 만큼 *이 찍히게 됩니다.
i = 1 일 때
j = 1
i가 1일 때 j는 1까지 반복됩니다.
i = 2일 때
j = 1 / 2
i가 2일 때 j는 1부터 2까지 반복됩니다.
i = 3 일 때
j = 1 / 2 / 3
i가 3일 때 j는 1부터 3까지 반복됩니다.
i = 4 일 때
j = 1 / 2 / 3 / 4
i가 4일 때 j는 1부터 4까지 반복됩니다.
i = 5 일 때
j = 1 / 2 / 3 / 4 / 5
i가 5일 때 j는 1부터 5까지 반복됩니다.
따라서 해당 코드의 출력 결과는 문제 2번처럼 나오게 됩니다.
//문제3.
for(int i = 1; i <= 5; i++) {
for(int j = 5; j >= i; j--) {
System.out.print("*");
}
System.out.println();
}
위의 코드도 마찬가지입니다.
i = 1 일 때
j = 5 / 4 / 3 / 2 / 1
i가 1일 때 j는 5부터 시작해서 1까지 될 때까지 반복됩니다.
i = 2 일 때
j = 5 / 4 / 3 / 2
i가 2일 때 j는 5부터 시작해서 2가 될 때까지 반복됩니다.
i = 3 일 때
j = 5 / 4 / 3
i가 3일 때 j는 5부터 시작해서 3이 될 때까지 반복합니다.
i = 4 일 때
j = 5 / 4
i가 4일 때 j는 5와 4일 때 2번 반복됩니다.
i = 5 일 때
j = 5
i가 5일 때는 j가 1번 반복됩니다.
//문제4.
for(int i = 5; i >= 0; i--) {
for(int j = i-1; j >= 0; j--) {
System.out.print(" ");
}
for(int k = 1; k <= 5-i; k++) {
System.out.print("*");
}
System.out.println();
}
i = 5일 때
j = (i-1) = 4 / 3 / 2 / 1 ( 공백 이 4칸 출력됩니다 )
i = 4 일 때
j = 3 / 2 / 1
i = 3 일 때
j = 2 / 1
i = 2 일 때
j = 1
i = 1일 때는 공백이 출력되지 않습니다.
//문제5
for(int i = 1; i <= 5; i++) {
for(int k = 0; k < i; k++) {
System.out.print(" ");
}
for(int j = 5; j > i - 1; j--) {
//j=1;j<6-i;j++ 포문안에 이렇게 조건을 줘도 됩니다.
System.out.print("*");
}
System.out.println();
}
i 가 1일때 k(공백)은 0부터 i까지 즉 1까지 출력되며 k(*)은 5부터 i까지 즉 0까지 출력됩니다.
i = 1일때
k = 0
j = 5 / 4 / 3 / 2/ 1
i가 1일때 공백은 0 *은 5개가 출력이됩니다.
i = 2 일때
k = 1
j = 5 / 4 / 3 / 2
i가 2일때 공백은 1개 *은 4개가 출력이됩니다.
i = 3 일때
k = 1 / 2
j = 5 / 4 / 3
i가 3일때 공백은 2개 *은 3개가 출력이됩니다.
i = 4 일때
k = 1 / 2 / 3 / 4
j = 5 / 4
i가 4일때 공백은 3개 *은 2개가 출력이됩니다.
i = 5 일때
k = 1 / 2 / 3 / 4 / 5
j = 5
i가 5일때 공백은 4개 *은 1개가 출력이됩니다.
//문제6.
for(int i = 1; i <= 5; i++) {
for(int k = 1; k <= 5-i; k++) {
System.out.print(" ");
}
for(int j = 1; j <= i*2-1; j++) {
System.out.print("*");
}
System.out.println();
}
위의 코드는 i는 1부터 시작하며 5가 될때까지 반복합니다.
i는 줄바꿈을 위한 반복문이고 k는 공백을 출력하기 위한 반복문이며 j는 *을 출력하기 위한 반복문입니다.
i가 1일때 k는 1부터 4까지 반복이 되며 j는 i*2-1만큼 즉, 1부터 1까지 반복합니다.
i가 2일때는 k는 1부터 3까지 반복되고 j도 1부터 3까지 반복이 됩니다.
i = 1
k = 1 / 2 / 3 / 4
j = 1
i = 2
k = 1 / 2 / 3
j = 1 / 2 / 3
i = 3
k = 1 / 2
j = 1 / 2 / 3 / 4 / 5
i = 4
k = 1
j = 1 / 2 / 3 / 4 / 5 / 6 / 7
i = 5
k = 0
j = 1 / 2 / 3 / 4 / 5 / 6 / 7 / 8 / 9
'Java 관련 > Java' 카테고리의 다른 글
[Java] 배열(Array) (0) | 2021.10.18 |
---|---|
[Java] Scanner() (0) | 2021.10.17 |
[Java] 제어문 - 반복문(for 문) (0) | 2021.10.11 |
[Java] 제어문 - 반복문(while 문) (0) | 2021.10.10 |
[Java] 제어문 - 조건문(switch 문) (0) | 2021.10.09 |