✏️ while문을 이용하여, number가 짝수마다 +가 출력되고, 홀수마다 -가 출력되는 코드를 작성해보세요.
number의 값이 100이 되면 while문을 빠져나와주세요.
-+-+-+-+-+... (반복)
✅문제해설
변수를 생성해서 while문이 한번 작동하면 +1이 되게 만든다.
조건문을 사용하여 짝수이면 " + ", 홀수이면" - "를 출력하게 한다.
public class Ex_0616 {
public static void main(String[] args) {
int number = 1;
while (number <= 100) {
if ((number % 2) == 0)
System.out.print("+");
else
System.out.print("-");
number++;
}
}
💡[아이디어] 오목판에 좌표값을 입력 받아 해당 좌표에 구현해볼 생각을 했다.
X, Y값을 입력 받아서 "오목판"에 바둑알을 출력해라!
✅문제해설
바둑알은 흰색, 검은색 2개가 있다.
X, Y 좌표값 받을 변수를 선언.
계속 반복될 수 있게 while문 추가.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
// 흰돌
System.out.print("검은돌 x 좌표값 : ");
int xx = sc.nextInt();
System.out.print("검은돌 y 좌표값 : ");
int yy = sc.nextInt();
// 검은돌
System.out.print("흰돌 x 좌표값 : ");
int xxx = sc.nextInt();
System.out.print("흰돌 y 좌표값 : ");
int yyy = sc.nextInt();
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 10; y++)
if (x == 0 && y == 0)// 왼쪽 위 모서리막기
System.out.print("┌");
else if (x == 0 && y == 9)// 오른쪽 위 모서리막기
System.out.print("┐");
else if (x == 11 && y == 0)// 왼쪽 아래 모서리막기
System.out.print("└");
else if (x == 11 && y == 9)// 오른쪽 아래 모서리막기
System.out.print("┘");
else if (x == 0)// 위에 막기
System.out.print("┬");
else if (x == 11)// 아래 막기
System.out.print("┴");
else if (y == 0)// 왼쪽 막기
System.out.print("├");
else if (y == 9)// 오른쪽 막기
System.out.print("┤");
else if (x == xx && y == yy)// 검은돌
System.out.print("●");
else if (x == xxx && y == yyy)// 흰돌
System.out.print("○");
else
System.out.print("┼");
System.out.println();
}
}
" ┌ ┐┘└├ ┤ ┬ ┴ ┼ ─ │ " 이 기호들을 사용하여 11x11 오목판을 출력해라.
" ┌ ┐┘└├ ┤ ┬ ┴ ┼ ─ │ " 이 기호들을 사용하여 11x11 오목판을 출력해라.
✅문제해설
┼ 모양으로 내부를 채운다.
┌ ┐┘└ 모양으로 각 모서리를 채워준다.
├ ┤를 사용하여 좌, 우 여백을 닫아준다.
┬ ┴를 사용하여 위, 아래 여백을 닫아준다.
💢중요💢 조건을 실행하는 순서를 잘 생각하지 않으면 이상한 모양이 나온다.
public static void main(String[] args) {
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 10; y++)
if (x == 0 && y == 9)// 오른쪽 위 모서리막기
System.out.print("┐");
else if (x == 11 && y == 9)// 오른쪽 아래 모서리막기
System.out.print("┘");
else if (x == 0 && y == 0)// 왼쪽 위 모서리막기
System.out.print("┌");
else if (x == 11 && y == 0)// 왼쪽 아래 모서리막기
System.out.print("└");
else if (x == 0)// 위에 막기
System.out.print("┬");
else if (x == 11)// 아래 막기
System.out.print("┴");
else if (y == 0)// 왼쪽 막기
System.out.print("├");
else if (y == 9)// 오른쪽 막기
System.out.print("┤");
else
System.out.print("┼");
System.out.println();
}
}
위 코드로 if~else if 문으로 도배를 하니까 코드가독성이 떨어져서 구조 개선을 하기 위해 다시 리펙토링 작업을 해보았다.
[코드 개선작업 완료]
public static void main(String[] args) {
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 12; y++) {
if(x==0)
if(y==0)
System.out.print("┌");
else if(y==11)
System.out.print("┐");
else
System.out.print("┬");
else if(x==11)
if(y==0)
System.out.print("└");
else if(y==11)
System.out.print("┘");
else
System.out.print("┴");
else
if(y==0)
System.out.print("├");
else if (y==11)
System.out.print("┤");
else
System.out.print("┼");
}
System.out.println();
}
}
기존에 하나에 if문에 &&(and) 연산자를 사용하여 X, Y의 조건을 묶어서 표현하니 가독성이 떨어졌던 것이었다.
이런 식으로 X조건 아래에 Y조건을 붙여서 시각적으로 잘 들어오게 표현한 후 비슷한 조건들끼리 묶어줬다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 입력 : ");
int input = sc.nextInt();
int a = 0;
int b = 0;
a = (int) (input / 2) + 1;
b = (int) (input / 2);
System.out.println(a);
System.out.println(b);
for (int i = 0; i < a; i++) {
for (int j = 0; j < (a - 1) - i; j++) {
System.out.printf(" ");
}
for (int k = 0; k < 1 + (i * 2); k++)
System.out.printf("*");
System.out.println();
// ----------------------------------------
// i 0 1 2 3
// k 1 3 5 7
}
for (int i = 0; i < b; i++) {
for (int j = 0; j < i + 1; j++) {
System.out.printf(" ");
}
for (int k = 0; k < b * 2 - (i * 2) - 1; k++)
System.out.printf("*");
System.out.println();
}
✅결과
💢어쩌다 보니 실행되게 만들었다... 하지만 마지막 코드줄이 가시적으로 보이지 않아서 조만간...다시 코드 리펙토링을 할 생각이다..
public static void main(String[] args) {
// 4줄이니까 i를 4번 반복한다.
for (int i = 0; i < 4; i++) {
//i=0일때 "j < (3 - i)" -> 공백 " "3개 출력
for (int j = 0; j < (3 - i); j++) {
System.out.printf(" ");
}
//i=0일때 "k < 1 + (i * 2)" -> 별 "*"개 출력
for (int k = 0; k < 1 + (i * 2); k++)
System.out.printf("*");
System.out.println();
// ----------------------------------------
}
// 3줄이니까 i를 3번 반복한다.
for (int i = 0; i < 3; i++) {
// i=0일때 "j < (i + 1)" -> 공백 " " 1개 출력
for (int j = 0; j < (i + 1); j++) {
System.out.printf(" ");
}
// i=0일때 "k < 5 - (i * 2)" -> 별 "*****" 출력
for (int k = 0; k < 5 - (i * 2); k++)
System.out.printf("*");
System.out.println();
}
}