쥬로그
JAVA 별 찍기 본문
< ⭐ JAVA 별 찍기 ⭐ >
사용자에게 입력받아, 그 수만큼 줄을 출력해 다양한 모양을 만들 수 있다.
< 공통 code >
Scanner() 클래스를 사용하기 위해 public class 밖에서
import java.util.Scanner;를 선언한다.
main 메소드 안에서
Scanner 변수 이름 = new Scanner(System.in); 와 변수이름.close(); 를 선언한다.
사용자에게 줄 수를 입력받기 위해 아래 코드를 선언한다.
System.out.println("숫자를 입력해주세요.");
System.out.print("> ");
int 변수 이름 = scanner 변수이름.nextInt();
① 위에서부터 아래쪽으로 커지는 직각삼각형 만들기
첫 번째 줄에서 별이 1개
두 번째 줄에서 별이 2개
세 번째 줄에서 별이 3개
...
10번째 줄에서 별이 10개
즉, n 번째 줄이면 n개만큼 별이 출력된다.
1) i for문과 j for문 예시
// i = 줄 개수
for(int i = 1; i <= number; i++) {
// j = 별 개수
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
j for문이 반복되는 횟수만큼 별이 출력된다.
1. i = 1
→ i <= number → true → j for문 → j = 1 → j <= i → true → "*" 출력 → j ++
→ j = 2 → j <= i → false → j for문 종료 → i ++
2. i = 2
→ i <= number → true → j for문 → j = 1 → j <= i → true → "*" 출력 → j++
→ j = 2 → j <= i → true → "*" 출력 → j ++ → j = 3 → j <= i → false → j for문 종료 → i ++
3. i = 3
....................
위와 같은 단계 반복
2) String 사용 예시
for(int i = 1; i <= number; i++) {
String stars ="";
for(int j = 1; j <= i; j++) {
stars += "*";
}
System.out.println(stars);
}
String에 공백도 문자도 없는 값을 저장한다.
j for문이 반복되는 만큼 String에 *이 저장되고 종료되면 stars가 출력된다.
1. i = 1
→ j = 1 → j <= i → true → stars에 * 저장 → j ++ → j = 2 → j <= i → false → j for문 종료
→ stars 출력 → * 출력됨 → i ++
2. i = 2
→ j = 1 → j <= i → true → stars에 * 저장 → j ++ → j = 2 → j <= i → true → stars에 * 저장
→ j ++ → j = 3 → j <= i → false → j for문 종료 → stars 출력 → ** 출력됨 → i ++
3. i = 3
....................
위와 같은 단계 반복
② 위에서부터 아래쪽으로 작아지는 역 직각삼각형 만들기
역 직각삼각형은
첫 줄에 사용자가 입력한 숫자만큼의 별 개수가
두 번째 줄은 사용자가 입력한 숫자 - 1개 별 개수가 출력된다.
1) 사용자 입력값을 저장한 j for문
for(int i=1; i <=number; i++) {
for(int j = number; j >= i; j--) {
System.out.print("*");
}
System.out.println("");
}
number가 10이라고 했을 때
1. i = 1
→ j = 10 → j >= i → true → * 출력 → j-- → j = 9 → j >= i → true → * 출력 →...
→ j = 1 → j >= i → true → * 출력 → j-- → j = 0 → j >= i → false → j for문 종료 → println() 실행
→ i++
10부터 1까지 총 *이 10개 출력된 것을 알 수 있다.
* 출력 시 print()를 사용했기 때문에 앞에 출력된 *의 바로 오른쪽에 *가 출력된다.
i++ 가 되기 전 println()로 줄 바꿈이 실행되어 다음 단계에 출력될 *는 그 아래 줄에 출력되는 것을 알 수 있다.
2. i = 2
→ j = 10 → j >= i → true → * 출력 → j-- → j = 9 →....
위와 같은 단계 반복
2) 문자열 사용
for(int i = 1; i <= number; i++) {
String stars = "";
for(int j = i; j <= number; j++) {
stars += "*";
}
System.out.println(stars);
}
이 for문의 경우 j 값이 i 값으로 초기화되므로
i가 1일 때는 j도 1이므로 1부터 number 만큼 반복 출력
i가 2일 때는 j도 2이므로 2부터 number 만큼 반복 출력
i, j 값이 number와 같아질 때까지 반복된다.
③ 오른쪽에서 시작되는 직각삼각형 만들기
여기서부터 머리가 아파지는데,,,🪐
왜냐하면 별은 i만큼 출력되고 공백이 number - i만큼 출력돼야 하기 때문이다.
막상 글로 적어놓으니까 쉬워 보이네요,,,?
하지만 j for문이 2개 쓰인다는 점!
공백 j for문, 별 j for문이 필요하다.
1) 공백과 별 바로 출력하기
for (int i = 1; i <= number; i++) {
// 공백 j for문
for(int j = number-1; j >= i; j--) {
System.out.print(" ");
}
// 별 j for문
for(int j=1; j <=i; j++) {
System.out.print("*");
}
System.out.println("");
}
첫 번째 j for문은 공백 출력을 담당한다.
첫 줄에서 별이 i개가 나오고 공백은 사용자 입력 수 - 1 이므로 j = number - 1로 초기화했다.
만약 number - i로 했을 경우
number가 10이고 i 가 1일 때 공백은 9개, i가 2일 때 j는 8이므로 공백이 7개가 출력된다.
즉, 2번째 줄부터 목표했던 모양이 안 나오기 시작하는 것이다.
그래서 고정값인 -1을 줬다.
두 번째 j for문은 i수만큼 별이 출력되는 것을 위 예시들을 통해서 미리 알 수 있었다.
2) 문자열 사용
for(int i =1; i <= number; i++) {
String stars = "";
for(int j = 1; j <= number - i; j++) {
stars += " ";
}
for (int j = 1; j <= i; j++) {
stars += "*";
}
System.out.println(stars);
}
이 경우엔 첫 번째 j for문에서 j를 1로 초기화했기 때문에 조건식이 number - i가 가능한 것이다.
④ 오른쪽 기준 역 직각삼각형 만들기
2번과 유사하지만 공백 수가 중요하다.
첫 번째 줄에 사용자 입력 수 만큼 별 출력, 두 번째 줄은 사용자 입력 수 - 1, 세 번째 줄은 사용자 입력 수 -2...
마지막 줄에는 *이 1개 출력된다.
공백은 첫 번째 줄에 0개, 두 번째 줄에 1개, 세 번째 줄에 2개,,,, 마지막 줄에 사용자 입력 수 - 1개만큼 출력된다.
1) 공백, 별 직접 출력
for(int i = 1; i <= number; i++) {
// 공백 j for문
for(int j = 1; j < i; j++) {
System.out.print(" ");
}
// 별 j for문
for(int k = number; k >= i; k--) {
System.out.print("*");
}
System.out.println("");
}
2) String 사용
for(int i = 1; i <= number; i++) {
String stars = "";
for(int j = 1; j <= number; j++) {
// 공백 if 문
if(j<=i-1) {
stars += " ";
// 별 else 문
} else {
stars += "*";
}
}
System.out.println(stars);
}
if - else 구조를 통해 j for문 1개로 공백과 별을 출력할 수 있다.
1. i = 1
→ j = 1 → j <= number → true → if 조건식 j <= i -1 → false → else 문 stars에 * 추가 → j++ →...
→ j for문 종료 → stars 출력 → i ++
총 사용자 입력 수만큼 *이 출력된 것을 알 수 있다.
2. i = 2
→ j = 1 → j <= number → true → if 조건식 j <= i - 1 → true → stars에 공백 추가 → j ++ → j = 2 → j <= number → true → if 조건식 j <= i - 1 → false → else 문 stars에 * 추가 → j ++ → j <= number →...
위와 같은 단계 반복
총 공백 1개, 사용자 입력 수 - 1개만큼 *이 출력된 것을 알 수 있다.
⑤ 피라미드 만들기
두둥!
삼각형도 어려웠는데 피라미드 등장! 🔥
별부터 차근차근 살펴보면
첫 번째 줄에 별 1개
두 번째 줄에 별 3개
세 번째 줄에 별 5개
...
마지막 줄에 사용자 입력 수 * 2 -1개
즉 2만큼 증가하는 홀수인 것을 알 수 있습니다.
공백은
첫 번째 줄에 9개
두 번째 줄에 8개
세 번째 줄에 7개
...
마지막 줄에 0개인 걸로 보아
사용자 입력 수 - i 개 인 것을 알 수 있습니다.
공백 j for문, 별 j for문을 이용해 만들 수 있습니다.
1) 공백, 별 바로 출력
for (int i = 1; i <= number; i++) {
// 공백 j for문
for (int j = number; j > i; j--) {
System.out.print(" ");
}
// 별 j for문
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
// 공백 j for문
for (int j = number; j > i; j--) {
System.out.print(" ");
}
System.out.println("");
}
위 코드를 보면 공백 j for문이 2개입니다만 마지막 공백 j for문은 필요 없습니다...
하지만 만약의 경우 오른쪽 공백도 출력을 해야 한다! 하면 입력해주시면 됩니다.
1. i = 1
1) 공백 j for문
→ j = 10 → j > i → true → 공백 출력 → j-- → j = 9 → j > i → true → 공백 출력 →...
→ j = 1 → j > i → false → 공백 j for문 종료
2) 별 j for문
→ j = 1 → j <= 2*i -1 → true → * 출력 → j++ → j = 2 → j <= 2*i -1 → false → j for문 종료
→ println(); 실행 → i ++
2. i = 2
1) 공백 j for문
→ j = 10 → j > i → true → 공백 출력 → j-- → j = 9 → j > i → true → 공백 출력 →...
→ j = 2 → j > i → false → 공백 j for문 종료
2) 별 j for문
→ j = 1 → j <= 2*i -1 → true → * 출력 → j ++ → j = 2 → j <= 2*i -1 → true → * 출력 → j++ →
j = 3 → j <= 2*i -1 → true → * 출력 → j ++ → j = 4 → j <= 2*i -1 → false → 별 j for문 종료
→ println(); 실행 →i ++
.....
위와 단계 반복
2) String 사용 01
for (int i = 1; i <= number; i++) {
String stars = "";
// 공백 j for문
for (int j = 1; j <= number - i; j++) {
stars += " ";
}
// 별 j for문
for (int j = 1; j <= 2 * i - 1; j++) {
stars += "*";
}
System.out.println(stars);
}
3) String 사용 02
for (int i = 1; i <= number; i++) {
String stars = "";
// 공백 j for문
for (int j = i; j < number; j++) {
stars += " ";
}
// 별 j for문
for (int j = 1; j <= 2 * i - 1; j++) {
stars += "*";
}
System.out.println(stars);
}
4) 변수 사용
int min = number;
int max = number;
for (int i = 1; i <= number; i++) {
for (int j = 1; j <= 2 * number - 1; j++) {
if (j >= min && j <= max) {
System.out.print("*");
} else {
System.out.print(" ");
}
}
System.out.println("");
min--;
max++;
}
⑥ 역 피라미드 만들기
피라미드와 반대로
별 개수가
첫 째 줄에서 2 * 사용자 입력 수 - 1
둘째 줄 2 * 사용자 입력 수 - 1 - 2
...
마지막 줄에서 1개
즉 2 * 사용자 입력 수 - i 개입니다.
공백 수는
첫 줄 0개
둘째 줄 1개
세 번째 줄 2개...
i - 1개씩 증가하는 것을 알 수 있습니다.
1) j for문
for (int i = 1; i <= number; i++) {
// 왼쪽 공백 j for 문
for (int j = 1; j < i; j++) {
System.out.print(" ");
}
// 별 j for문
for (int j = i; j <= 2 * number - i; j++) {
System.out.print("*");
}
// 오른쪽 공백 j for문
for (int j = 1; j < i; j++) {
System.out.print(" ");
}
System.out.println("");
}
2) String 사용 01
for (int i = 1; i <= number; i++) {
String stars = "";
// 공백 j for 문
for (int j = 1; j <= i - 1; j++) {
stars += " ";
}
// 별 j for 문
for (int j = 1; j <= 2 * number + 1 - 2 * i; j++) {
stars += "*";
}
System.out.println(stars);
}
3) String 사용 02
for (int i = number; i >= 1; i--) {
String stars = "";
// 공백 j for문
for (int j = 1; j <= number - i; j++) {
stars += " ";
}
// 별 j for문
for (int j = 1; j <= 2 * i - 1; j++) {
stars += "*";
}
System.out.println(stars);
}
같은 모양도 다양한 방법으로 출력할 수 있다.
⑦ 세로로 긴 삼각형 만들기 01
출력된 줄 수는 사용자 입력 수 * 2 - 1이다.
자세히 보면 별의 개수가 사용자 입력수만큼 출력되는 줄이 있는데,
그 줄을 기준으로 위, 아래로 나눠서 윗부분 for문, 아래 부분 for문으로 출력할 수 있다.
1) 윗 삼각형 길게 출력
for(int i = 1; i <= number; i++) {
// 별 j for문
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
for(int i =1; i <= number-1; i++) {
// 별 j for문
for(int j = number-1; j>=i; j-- ) {
System.out.print("*");
}
System.out.println("");
}
첫 번째 i for문과 두 번째 i for문의 가장 큰 차이점은 i 조건식과 j for문의 변화조건식이다.
2) 윗 삼각형 길게 출력 & String 사용
for(int i = 1; i <= number; i++) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
for(int i = 2; i <= number; i++) {
String stars = "";
for(int j = i; j <= number; j++) {
stars += "*";
}
System.out.println(stars);
}
3) 윗 삼각형 짧게 출력
for(int i = 1; i < number; i++) {
for(int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println("");
}
for(int i = 1; i <= number; i++) {
String stars = "";
for(int j = i; j <= number; j++) {
stars += "*";
}
System.out.println(stars);
}
⑧ 세로로 긴 삼각형 만들기 02
7번과 비슷하지만 다른 점은 공백수가 사용자 입력한 수 - 별의 개수 만큼 있어야 한다는 점이다.
1) i for문 2개 사용
for(int i = 1; i <= number; i++) {
String stars = "";
//1. 증가
for(int j = 1; j <= number - i; j++) {
stars += " ";
}
for(int j = 1; j <= i; j++) {
stars += "*";
}
System.out.println(stars);
}
for(int i = 1; i < number; i++) {
String stars = "";
//2. 감소
for(int j = 1; j <= i; j++) {
stars += " ";
}
for(int j = 1; j <= number - i; j++) {
stars += "*";
}
System.out.println(stars);
}
2) i for문 조건식 범위를 출력되는 줄 수만큼으로 설정
for(int i = 1; i <= 2 * number-1; i++) {
String stars ="";
if (i < number) {
// 공백 j for문
for(int j = 1; j <= number -i; j++) {
stars += " ";
}
// 별 j for문
for(int j = 1; j <= i; j++) {
stars += "*";
}
} else {
int lowerI = i - number + 1;
// 공백 j for문
for(int j = 1; j <= lowerI-1; j++) {
stars += " ";
}
// 별 j for문
for(int j = lowerI; j <= number; j++) {
stars += "*";
}
} //if-else중괄호
System.out.println(stars);
} //i for문 중괄호
⑨ 마름모 만들기
위 삼각형처럼 섹션을 2 개로 나눠서 생각해야 편하다.
출력되는 줄 수는 사용자 입력 수 X 2 -1 줄이다.
별은 가장 많이 출력되는 개수가 사용자 입력 수 X 2 -1개이며 2n-1개씩 증가한다.
1) i for문 2개 사용
for(int i = 1; i <= number; i++) {
// 왼쪽 공백
for(int j = number; j > i; j--) {
System.out.print(" ");
}
// 별 개수
for(int k = 1; k <= 2*i-1 ; k++) {
System.out.print("*");
}
// 오른쪽 공백
for(int l = number; l > i; l--) {
System.out.print(" ");
}
System.out.println("");
}
for(int i = 1; i < number; i++) {
// 왼쪽 공백
for(int j = 1; j <= i; j++) {
System.out.print(" ");
}
// 별 수
for(int k = i; k < 2*number - i-1; k++) {
System.out.print("*");
}
// 오른쪽 공백
for(int j = 1; j <= i; j++) {
System.out.print(" ");
}
System.out.println("");
}
2) i for문 1개 사용 & 변수 사용
for(int i = 1; i <= 2*number -1; i++) {
String stars = "";
// i번째 줄의 공백 갯수를 저장할 int 변수
int spaceWidth = 0;
// i번째 줄의 별 갯수를 저장할 int 변수
int starWidth = 0;
// if - else 구조
// spaceWidth와 starWidth의 값을 결정한다.
if (i < number) {
// 공백 개수 (number-1 ~ 1)
spaceWidth = number -i;
// 별 개수
starWidth = 2*i -1;
} else {
int lowerI = 2*number-i;
// 공백 개수 (0 ~ number-1)
spaceWidth = number -lowerI;
// 별 개수 (2*number-1 ~ 1)
starWidth = 2*lowerI -1;
}
// spaceWidth번 반복하면서 stars에 공백을 추가하는 j for문
for(int j = 1; j <= spaceWidth; j++) {
stars += " ";
}
// starWidth번 반복하면서 stars에 별을 추가하는 j for문
for(int j = 1; j <= starWidth; j++) {
stars += "*";
}
System.out.println(stars);
}
⑩ 속 빈 마름모 만들기
3 부분으로 섹션을 나눠서 생각하는 것이 편하다.
제일 첫 줄과 마지막 줄은 공백 없이 모두 별로 출력된다.
개수는 사용자 입력 수 X 2 - 1 개 이므로 줄 수만큼 출력되는 것을 알 수 있다.
그렇다면 if 문을 사용하여 i가 1일 때 와 i가 사용자 입력 수 X 2 - 1 일때만 별이 출력될 수 있도록하고
else if문과 else 문을 사용해 마름모를 2 섹션으로 나눠 윗 부분, 아랫 부분 공백, 별에 해당하는 변수를 만들어
출력될 수 있도록 한다.
1) if - else if - else 구조 & 변수 사용
for (int i = 1; i <= 2 * number - 1; i++) {
String stars = "";
// 공백 개수 저장 변수
int spaceWidth = 0;
// 별 개수 저장 변수
int starWidth = 0;
if (i == 1 || i == 2 * number - 1) {
for (int j = 1; j <= 2 * number - 1; j++) {
stars += "*";
}
} else if (i < number) {
// 윗부분
// 윗부분의 변환된 i의 값을 저장할 int 변수
int upperI = i - 1;
starWidth = number - upperI;
// 공백 1, 3, 5...
spaceWidth = 2 * upperI - 1;
} else {
// 아랫부분
// 아랫부분의 변환된 i의 값을 저장할 int 변수
int lowerI = i - number + 1;
starWidth = lowerI;
spaceWidth = 2 * number - 2 * lowerI - 1;
}
// 왼쪽 별 담당 j for문
for (int j = 1; j <= starWidth; j++) {
stars += "*";
}
// 공백 담당 j for문
for (int j = 1; j <= spaceWidth; j++) {
stars += " ";
}
// 오른쪽 별 담당 j for문
for (int j = 1; j <= starWidth; j++) {
stars += "*";
}
System.out.println(stars);
}
'Study > JAVA' 카테고리의 다른 글
[IntelliJ] Group 적용 및 빠른 속도를 위한 설정 방법 (0) | 2021.12.06 |
---|---|
[eclipse] Enterprise Java and Web Developers 설치 및 환경 설정 (0) | 2021.12.06 |
[JAVA] JAVA IntelliJ & MySQL 설치 및 연결 방법 매뉴얼 (0) | 2021.12.01 |
[JAVA & MySQL] JAVA Eclipse에서 MySQL 연결하기 (0) | 2021.12.01 |